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 languages | UTF-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 указана кодировка 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 определяет кодировку в документа в следующем порядке:
"Content-type: text/html; charset=xxx"
<META NAME="Content-Type" CONTENT="text/html; charset=xxx">
Выбор этого варианта можно выключить указав команду GuesserUseMeta no в файле конфигурации indexer.conf.
При выключенном автораспозновании: кодировка по-умолчанию, указанная командой "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. Поисковая программа произведет перекодировку автоматически.