mnoGoSearch 3.2.15 Руководство: Поисковая машина
Пред.След.

Глава 7. Поддержка языков

Кодировки

Поддерживаемые кодировки

mnoGoSearch поддерживает почти все популярные в современном Internet однобайтные и многобайтные кодировки, включая корейский euc-kr, китайские Big5 и gb2312, японские shift-jis, euc-jp и iso-2022-jp, а так же Unicode utf8. Это позволяет индексировать документы на более чем 650-ти языках мира, предусмотренных в Unicode.

Внимание! Из-за большого объема перекодировочных таблиц, приводящего к увеличению размера исполняемых файлов, поддержка Восточно-Азиатских многобайтных кодировок не компилируется по-умолчанию. Смотрите параметры configure, как активизировать поддержку этих кодировок при компиляции.

Таблица 7-1. Кодировки и их языковые группы

ГруппаЯзыкиКодировки
Группа 1Западная Европа: албанский, каталанский, датский, голландский, английский, Faeroese, финский, французский, Galician, немецкий, исландский, итальянский, ножвежский, португальский, испанский, шведскийASCII 8, CP437, CP850, CP860, CP1252, ISO 8859-1, ISO 8859-15, MacRoman, MacIceland
Группа 2Восточная Европа: хорватский, чешский, венгерский, польский, сербский (латиница), румынский, словакский, словенскийCP852, CP1250, ISO 8859-2, MacCentralEurope, MacRomania, MacCroatian
Group 4Страны Балтии: латвийский, литовский, эстонскийCP1257, iso-8859-4, iso-8859-13
Группа 5Кириллица: болгарсикй, белорусский, македонский, русский, сербский, украинскийCP855, CP866, CP1251, ISO 8859-5, Koi8-r, Koi8-u, MacCyrillic
Группа 6АрабскийCP864, CP1256, ISO 8859-6, MacArabic
Группа 7ГреческийCP869, CP1253, ISO 8859-7, MacGreek
Группа 8ЕврейскийCP1255, ISO 8859-8, MacHebrew
Группа 9ТурецкийCP857, CP1254, ISO 8859-9, MacTurkish
Группа 101ЯпонскийShift-JIS, EUC-JP, ISO-2022-JP
Группа 102Упрощенный китайскийEUC-GB
Группа 103Традиционный китайскийBig5
Группа 104КорейскийEUC-KR
Группа 105ТайскийCP874, TIS 620, MacThai
Группа 106ВьетнамскийCP1258
Группа 107ИндийскийMacGujarati
Группа 108Грузинскийgeostd8
UnicodeБолее 650 languagesUTF-8 (Unicode)

Разные названия кодировок

Каждая кодировка имеет модет иметь несколько различных вариантов названия. Например, iso-8859-2, iso8859-2, latin2 - названия одной и той же кодировки. mnoGoSearch понимает следующие варианты названий кодировок:

Таблица 7-2. Синонимы наименований кодировок

iso-8859-1: CP819, CSISOLATIN, IBM819, ISO-8859-1, ISO-IR-100, ISO_8859-1, ISO_8859-1:1987, L1, LATIN1
iso-8859-10: CSISOLATIN6, ISO-8859-10, ISO-IR-157, ISO_8859-10, ISO_8859-10:1992, L6, LATIN6
iso-8859-11: ISO-8859-11, TIS-620, TIS620, TACTIS
iso-8869-13: ISO-8859-13, ISO-IR-179, ISO_8859-13, L7, LATIN7
iso-8859-14: ISO-8859-14, ISO-IR-199, ISO_8859-14, ISO_8859-14:1998, L8, LATIN8
iso-8859-15: ISO-8859-15, ISO-IR-203, ISO_8859-15, ISO_8859-15:1998
iso-8859-16: ISO-8859-16, ISO-IR-226, ISO_8859-16, ISO_8859-16:2000
iso-8859-2: CSISOLATIN2, ISO-8859-2, ISO-IR-101, ISO_8859-2, ISO_8859-2:1987, L2, LATIN2
iso-8859-3: CSISOLATIN3, ISO-8859-3, ISO-IR-109, ISO_8859-3, ISO_8859-3:1988, L3, LATIN3
iso-8859-4: CSISOLATIN4, ISO-8859-4, ISO-IR-110, ISO_8859-4, ISO_8859-4:1988, L4, LATIN4
iso-8859-5:CSISOLATINCYRILLIC, CYRILLIC, ISO-8859-5, ISO-IR-144, ISO_8859-5, ISO_8859-5:1988
iso-8859-6: ARABIC, ASMO-708, CSISOLATINARABIC, ECMA-114, ISO-8859-6, ISO-IR-127, ISO_8859-6, ISO_8859-6:1987
iso-8859-7: CSISOLATINGREEK, ECMA-118, ELOT_928, GREEK, GREEK8, ISO-8859-7, ISO-IR-126, ISO_8859-7, ISO_8859-7:1987
iso-8859-8: CSISOLATINHEBREW, HEBREW, ISO-8859-8, ISO-IR-138, ISO_8859-8, ISO_8859-8:1988
iso-8859-9: CSISOLATIN5, ISO-8859-9, ISO-IR-148, ISO_8859-9, ISO_8859-9:1989, L5, LATIN5
armscii-8: ARMSCII-8
big5: BIG-5, BIG-FIVE, BIG5, BIGFIVE, CN-BIG5, CSBIG5
cp1250: CP1250, MS-EE, WINDOWS-1250
cp1251: CP1251, MS-CYRL, WINDOWS-1251
cp1252: CP1252, MS-ANSI, WINDOWS-1252
cp1253: CP1253, MS-GREEK, WINDOWS-1253
cp1254: CP1254, MS-TURK, WINDOWS-1254
cp1255: CP1255, MS-HEBR, WINDOWS-1255
cp1256: CP1256, MS-ARAB, WINDOWS-1256
cp1257: CP1257, WINBALTRIM, WINDOWS-1257
cp1258: CP1258, WINDOWS-1258
cp437: 437, CP437, IBM437
cp850: 850, CP850, CSPC850MULTILINGUAL, IBM850
cp852: 852, CP852, IBM852
cp855: 855, CP855, IBM855
cp857: 857, CP857, IBM857
cp860: 860, CP860, IBM860
cp861: 861, CP861, IBM861
cp862: 862, CP862, IBM862
cp863: 863, CP863, IBM863
cp864: 864, CP864, IBM864
cp865: 865, CP865, IBM865
cp866: 866, CP866, CSIBM866, IBM866
cp869: 869, CP869, IBM869, CP874, WINDOWS-874
euc-kr: CSEUCKR, EUC-KR, EUCKR
gb2312: CHINESE, CSGB2312, CSISO58GB231280, GB2312, GB_2312-80, ISO-IR-58
koi8-r: CSKOI8R, KOI8-R
koi8-u KOI8-U
shift-jis: CSSHIFTJIS, MS_KANJI, S-JIS, SHIFT-JIS, SHIFT_JIS, SJIS
cp367: ANSI_X3.4-1968, ASCII, CP367, CSASCII, IBM367, ISO-IR-6, ISO646-US, ISO_646.IRV:1991, US, US-ASCII
utf8: UTF-8, UTF8
viscii: CSVISCII, VISCII, VISCII1.1-1
maccyrillic: MACCYRILLIC, X-MAC-CYRILLIC
macroman: MACROMAN, MACINTOSH, CSMACINTOSH, MAC
MacCentralEurope: MACCENTRALEUROPE, MACCE

Перекодировка во время индексации

indexer перекодирует все документы в кодировку, указанную в команде LocalCharset в файле indexer.conf. Внутри программы перекодировка реализована посредством промежуточного представления в виде Unicode. Особенность mnoGoSearch состоит в том, что перекодировка между несовместимыми кодировками (например, между русской и греческой) не приводит к потере данных. В случае, если перекодировка какого-либо символа невозможна, mnoGoSearch представит этот символ в базе данных в HTML-формате в виде &#NNN; где NNN - код символа, закрепленного за ним в Unicode. Таким образом, вне зависимости от выбора LocalCharset, mnoGoSearch сохранит полную информацию о документе без каких-либо потерь. Однако, выбор LocalCharset влияет на размер базы данных.

Выбор LocalCharset

Выбор LocalCharset должен производиться с учетом языкового наполнения индексируемого пространства. Правильный выбор позволит уменьшить место, требуемое для хранения, а так же увеличить скорость индексации и поиска.

Если командой LocalCharset указана кодировка UTF-8, то это позволит сохранять любые символы, поддерживаемым в Unicode без необходимости представлять их в HTML-формате. Однако, следует иметь в виду, что это заведомо приводит к использованию до двух-трех байт на каждую не-латинскую букву. Например, на каждую букву кириллицы требуется два байта для сохранения ее в UTF-8.

Поскольку все кодировки включают в себя латинские буквы, то любая кодировка предоставляет поддержку по-крайней мере двух языков - английского и еще какого-то одного (или более) языка (единственное исключение - US-ASCII, поддерживающий только латинские буквы). Это означает, что при использовании mnoGoSearch с LocalCharset, отличным от UTF-8, одновременная индексация документов с языками из одной группы не приводит к необходимости использовать HTML-формат, а значит не приводит к увеличению необходимого дискового пространства.

Например, если Ваша поисковая машина настроена использовать LocalCharset из 5-й группы (Кирилица), то документы на болгарском, белорусском, македонском, русском, сербском, украинском, а так же на английском языках будут сохранены компактно, с использованием одного байта на одну букву. Индексирование документов в других кодировках не из 5-й группы (включая UTF-8) также возможно; однако indexer будет использовать HTML-формат для сохранения букв, отличных от кирилических и английских. Сохранение, например, греческой буквы в кириллической кодировке требует применение семь байт на одну букву.

Таким образом, следует придерживаться следующего алгоритма при выборе LocalCharset: если Вы индексируете, например, в-основном кириллические и анлгийские документы, то выгоднее изпользовать LocalCharset из 5й группы. Если же Ваши документы сожержат информацию на языках из многих языковыз групп одновременно, то в качестве LocalCharset выгоднее использовать UTF8.

Определение кодировки документа

indexer определяет кодировку в документа в следующем порядке:

  1. "Content-type: text/html; charset=xxx"

  2. <META NAME="Content-Type" CONTENT="text/html; charset=xxx">

    Выбор этого варианта можно выключить указав команду GuesserUseMeta no в файле конфигурации indexer.conf.

  3. При выключенном автораспозновании: кодировка по-умолчанию, указанная командой "Charset"

    При включенном автораспознавании: результат работы автоматического распознавания кодировки.

Автоматическое распознавание кодировки

Начиная с версии 3.2.0 mnoGoSearch имеет механизм автоматического распознавания кодировки и языка документа. В настоящее время распознается около 100 различных комбинаций кодировки и языка. Распознавание реализовано с использованием так называемой "N-Gram-Based Text Categorization" технологии. В комплекте программы поставляются файлы с так называемыми "картами языков", один файл на каждую пару кодировка-язык. По-умолчанию они устанавливаются в /usr/local/mnogosearch/etc/langmap/. Чтобы увидеть полный список распознаваемых в настоящий момент языков и кодировок, взгляните в этот каталог. Распознавание работает хорошо на текстах в 500 байт и длиннее. Более короткие тексты могут распознаваться хуже. Для активизации автоматического распознавания кодировки необходимо загрузить языковые карты, используя команды LangMap.

Создание собственных карт языков

Для создания собственных карт языков служит утилита mguesser. Кроме этой утилиты вам также потребуется файл-образец текстов на данном языке в нужной кодировке. Для создания своей карты языка используйте следующий формат команды:


        mguesser -p -c charset -l language < FILENAME > language.charset.lm

Утилиту mguesser можно также использовать для определения языка и кодировки файла на основании уже созданных карт языков. Для этого используйте следующий формат команды:


        mguesser [-n maxhits] < FILENAME

Для некоторых языков существует несколько используемых кодировок. Для преобразования текстов из одной, поддерживаемой mnoGoSearch кодировки, в другую предназначена утилита mconv.


        mconv [OPTIONS] -f charset_from -t charset_to [configfile] < infile > outfile

По умолчанию, утилиты mguesser и mconv устанавливаются в директорию /usr/local/mnoogosearch/sbin/.

Начиная с версии 3.2.14, поддерживается автоматическое обновление карт языков и кодировок, если удалённый сервер возвращает чётко указаные язык и кодировку. Для включения этой возможности необходимо в файле indexer.conf указать команду


LangMapUpdate yes

Кодировка документов по-умолчанию

Используйте команду Charset в indexer.conf чтобы установить кодировку документов по-умолчанию.

Если индексируемый сервер не выдает кодировку документа ни в заголовке Content-Type, ни в META-тэге, и при этом автоматическое распознаывание либо отключено, либо не дало хорошего результата (т.е. язык и кодировка документа "не похожи" на представленные в загруженных картах), то в качестве кодировки документа будет использована кодировка, указанная в команде Charset. Если же кодировка по-умолчанию не указана, то будет использована iso-8859-1 (latin1).

Язык документов по-умолчанию

Вы можете установить язык документов по-умолчанию с помощью команды DefaultLang в файле indexer.conf. Это может пригодиться, например, во время поиска для ограничения поиска только по документам на указанном языке.

Перекодировка во время поиска

Чтобы указать кодировку, в которой будут оторбражаться результаты поиска, используйте команду BrowserCharset в search.htm. BrowserCharset может отличаться от LocalCharset. Поисковая программа произведет перекодировку автоматически.



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости