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

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

# 7.1. Кодировки

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

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

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

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

>Группа | Кодировки
Arabic | cp864, ISO-8859-6, MacArabic, windows-1256
Armenian | armscii-8
Baltic | ISO-8859-13, ISO-8859-4, windows-1257
Celtic | ISO-8859-14
Central European | cp852, ISO-8859-16, ISO-8859-2, MacCE, MacCroatian, MacRomania, windows-1250
Chinese Simplified | GB2312, GBK
Chinese Traditional | Big5, Big5-HKSCS, cp950
Cyrillic | cp855, cp866, cp866u, ISO-8859-5, KOI-7, KOI8-R, KOI8-U, MacCyrillic, windows-1251
Georgian | geostd8
Greek | cp869, cp875, ISO-8859-7, MacGreek, windows-1253
Hebrew | cp862, ISO-8859-8, MacHebrew, windows-1255
Icelandic | cp861, MacIceland
Indian | MacGujarati, tscii
Iranian | ISIRI3342
Japanese | EUC-JP, ISO-2022-JP, Shift_JIS
Korean | EUC-KR
Lao | cp1133
Nordic | cp865, ISO-8859-10
South Eur | ISO-8859-3
Thai | cp874, ISO-8859-11, MacThai
Turkish | cp1026, cp857, ISO-8859-9, MacTurkish, windows-1254
Unicode | sys-int, UTF-16BE, UTF-16LE, UTF-8
Vietnamese | VISCII, windows-1258
Western | cp437, cp500, cp850, cp860, cp863, IBM037, ISO-8859-1, ISO-8859-15, MacRoman, US-ASCII, windows-1252

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

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

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

armscii-8 | armscii-8, armscii8
Big5 | big-5, big-five, big5, bigfive, cn-big5, csbig5
Big5-HKSCS | big5-hkscs, big5_hkscs, big5hk, hkscs
cp1026 | 1026, cp-1026, cp1026, ibm1026
cp1133 | 1133, cp-1133, cp1133, ibm1133
cp437 | 437, cp437, ibm437
cp500 | 500, cp500, ibm500
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
cp866u | 866u, cp866u
cp869 | 869, cp869, csibm869, ibm869
cp874 | 874, cp874, cs874, ibm874, windows-874
cp875 | 875, cp875, ibm875, windows-875
cp950 | 950, cp950, windows-950
EUC-JP | cseucjp, euc-jp, euc_jp, eucjp, ujis, x-euc-jp
EUC-KR | cseuckr, euc-kr, euc_kr, euckr
GB2312 | chinese, cn-gb, csgb2312, csiso58gb231280, euc-cn, euc_cn, euccn, gb2312, gb_2312-80, iso-ir-58
GBK | cp936, gbk, windows-936
geostd8 | geo8-gov, geostd8
IBM037 | 037, cp037, csibm037, ibm037
ISIRI3342 | isiri-3342, isiri3342
ISO-2022-JP | csiso2022jp, iso-2022-jp
ISO-8859-1 | cp819, csisolatin1, ibm819, iso-8859-1, iso-ir-100, iso8859-1, iso_8859-1, iso_8859-1:1987, l1, latin1
ISO-8859-10 | csisolatin6, iso-8859-10, iso-ir-157, iso8859-10, iso_8859-10, iso_8859-10:1992, l6, latin6
ISO-8859-11 | iso-8859-11, iso8859-11, iso_8859-11, iso_8859-11:1992, tactis, thai, tis-620, tis620
ISO-8859-13 | iso-8859-13, iso-ir-179, iso8859-13, iso_8859-13, l7, latin7
ISO-8859-14 | iso-8859-14, iso-ir-199, iso8859-14, iso_8859-14, iso_8859-14:1998, l8, latin8
ISO-8859-15 | iso-8859-15, iso-ir-203, iso8859-15, iso_8859-15, iso_8859-15:1998, l9, latin0, latin9
ISO-8859-16 | iso-8859-16, iso-ir-226, iso8859-16, iso_8859-16, iso_8859-16:2000
ISO-8859-2 | csisolatin2, iso-8859-2, iso-ir-101, iso8859-2, iso_8859-2, iso_8859-2:1987, l2, latin2
ISO-8859-3 | csisolatin3, iso-8859-3, iso-ir-109, iso8859-3, iso_8859-3, iso_8859-3:1988, l3, latin3
ISO-8859-4 | csisolatin4, iso-8859-4, iso-ir-110, iso8859-4, iso_8859-4, iso_8859-4:1988, l4, latin4
ISO-8859-5 | csisolatincyrillic, cyrillic, iso-8859-5, iso-ir-144, iso8859-5, iso_8859-5, iso_8859-5:1988
ISO-8859-6 | arabic, asmo-708, csisolatinarabic, ecma-114, iso-8859-6, iso-ir-127, iso8859-6, iso_8859-6, iso_8859-6:1987
ISO-8859-7 | csisolatingreek, ecma-118, elot_928, greek, greek8, iso-8859-7, iso-ir-126, iso8859-7, iso_8859-7, iso_8859-7:1987
ISO-8859-8 | csisolatinhebrew, hebrew, iso-8859-8, iso-ir-138, iso8859-8, iso_8859-8, iso_8859-8:1988
ISO-8859-9 | csisolatin5, iso-8859-9, iso-ir-148, iso8859-9, iso_8859-9, iso_8859-9:1989, l5, latin5
KOI-7 | iso-ir-37, koi-7, koi7
KOI8-R | cskoi8r, koi8-r, koi8r
KOI8-U | koi8-u, koi8u
MacArabic | macarabic
MacCE | cmac, macce, maccentraleurope, x-mac-ce
MacCroatian | maccroation
MacCyrillic | maccyrillic, x-mac-cyrillic
MacGreek | macgreek
MacGujarati | macgujarati
MacHebrew | machebrew
MacIceland | macisland
MacRoman | csmacintosh, mac, macintosh, macroman
MacRomania | macromania
MacThai | macthai
MacTurkish | macturkish
Shift_JIS | csshiftjis, ms_kanji, s-jis, shift-jis, shift_jis, sjis, x-sjis
sys-int | sys-int
tscii | tscii
US-ASCII | ansi_x3.4-1968, ascii, cp367, csascii, ibm367, iso-ir-6, iso646-us, iso_646.irv:1991, us, us-ascii
UTF-16BE | utf-16, utf-16be, utf16, utf16be
UTF-16LE | utf-16le, utf16le
UTF-8 | utf-8, utf8
VISCII | csviscii, viscii, viscii1.1-1
windows-1250 | cp-1250, cp1250, ms-ee, windows-1250
windows-1251 | cp-1251, cp1251, ms-cyr, win-1251, win1251, windows-1251
windows-1252 | cp-1252, cp1252, ms-ansi, windows-1252
windows-1253 | cp-1253, cp1253, ms-greek, windows-1253
windows-1254 | cp-1254, cp1254, ms-turk, windows-1254
windows-1255 | cp-1255, cp1255, ms-hebr, windows-1255
windows-1256 | cp-1256, cp1256, ms-arab, windows-1256
windows-1257 | cp-1257, cp1257, winbaltrim, windows-1257
windows-1258 | cp-1258, cp1258, windows-1258

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

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

## 7.1.4. Выбор 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.

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

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

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

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

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

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

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

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

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

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

Для создания собственных карт языков служит утилита `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

По умолчанию, DataparkSearch использует только первые 8192 байт каждого индексируемого файла для определения языка и кодировки. Вы можете изменить это значение при помощи команды GuesserBytes. Используйте значение 0 для учёта всего такста индексируемого документа.

    GuesserBytes 16384

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

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

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

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

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

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

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

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