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

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

# Кодировки

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

DataparkSearch поддерживает почти все популярные в современном Internet однобайтные и многобайтные кодировки, включая корейский euc-kr, китайские Big5, gbk и gb2312, японские shift-jis, euc-jp и iso-2022-jp, а так же Unicode UTF-8. Это позволяет индексировать документы на более чем 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, GBK, gb2312
Группа 103 | Традиционный китайский | Big5, Big5-hkscs, CP950
Группа 104 | Корейский | EUC-KR
Группа 105 | Тайский | CP874, TIS 620, MacThai
Группа 106 | Вьетнамский | CP1258
Группа 107 | Индийский | MacGujarati, tscii
Группа 108 | Грузинский | geostd8
Group 109 | Лаосский | IBM cp1133
Group 110 | Иранский | ISIRI3342
Unicode | Более 650 languages | UTF-8 (Unicode)

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

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

Таблица 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
big5-hkscs: | big5hk, hkscs, big5_hkscs
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. Особенность DataparkSearch состоит в том, что перекодировка между несовместимыми кодировками (например, между русской и греческой) не приводит к потере данных. В случае, если перекодировка какого-либо символа невозможна, DataparkSearch представит этот символ в базе данных в HTML-формате в виде &#NNN; где NNN - код символа, закрепленного за ним в Unicode. Таким образом, вне зависимости от выбора LocalCharset, DataparkSearch сохранит полную информацию о документе без каких-либо потерь. Однако, выбор LocalCharset влияет на размер базы данных.

## Выбор LocalCharset

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

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

Поскольку все кодировки включают в себя латинские буквы, то любая кодировка предоставляет поддержку по-крайней мере двух языков - английского и еще какого-то одного (или более) языка (единственное исключение - `US-ASCII`, поддерживающий только латинские буквы). Это означает, что при использовании DataparkSearch с 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"

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

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

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

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

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

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

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

            dpguesser [-n maxhits] < FILENAME

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

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

По умолчанию, утилиты `dpguesser` и `dpconv` устанавливаются в директорию `/usr/local/dpsearch/sbin/`.

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

    LangMapUpdate yes

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

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

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

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

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

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

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

Пред. | Начало | След.
Категории |  | Создание многоязычных страниц поиска