# Поддержка языков
DataparkSearch - Полнофункциональная поисковая машина для Интернета и Интранета с открытым исходным кодом. Распространяется по лицензии GNU.
Keywords: shareware, freeware, интернет, unix, поисковик, поисковая машина, поиск, поиск информации, интранет, open source, opensource, search, searching, software, udmsearch, engine, indexing, system, web, ftp, http, cgi, php, SQL, MySQL, database, php3, FreeBSD, Linux, Unix, DataparkSearch, MacOS X, Mac OS X, Windows, 2000, NT, 95, 98, GNU, GPL, url, grabbing

DataparkSearch Engine 4.53: Справочное руководство
Пред. |  | След.

# Глава 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 | cp775, 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, GB-18030
Cyrillic | cp855, cp866, cp866u, ISO-8859-5, KOI-7, KOI8-C, KOI8-R, KOI8-U, MacCyrillic, windows-1251
Georgian | georgian-academy, georgian-ps, 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
Tajik | KOI8-T
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
cp775 | 775, cp775, ibm775
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
GB-18030 | gb-18030, gb18030
GB2312 | chinese, cn-gb, csgb2312, csiso58gb231280, euc-cn, euc_cn, euccn, gb2312, gb_2312-80, iso-ir-58
GBK | cp936, gbk, windows-936
georgian-academy | georgian-academy
georgian-ps | georgian-ps
geostd8 | geo8-gov, geostd8
IBM037 | 037, cp037, csibm037, ibm037
ISIRI3342 | isiri-3342, isiri3342
ISO-2022-JP | csiso2022jp, iso 2022-jp, iso-2022-jp
ISO-8859-1 | cp819, csisolatin1, ibm819, iso 8859-1, iso-8859-1, iso-ir-100, iso8859-1, iso_8859-1, iso_8859-1:1987, l1, latin-1, latin1
ISO-8859-10 | csisolatin6, iso 8859-10, iso-8859-10, iso-ir-157, iso8859-10, iso_8859-10, iso_8859-10:1992, l6, latin-6, latin6
ISO-8859-11 | 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-8859-13, iso-ir-179, iso8859-13, iso_8859-13, l7, latin-7, latin7
ISO-8859-14 | iso 8859-14, iso-8859-14, iso-ir-199, iso8859-14, iso_8859-14, iso_8859-14:1998, l8, latin-8, latin8
ISO-8859-15 | iso 8859-15, iso-8859-15, iso-ir-203, iso8859-15, iso_8859-15, iso_8859-15:1998, l9, latin-0, latin-9, latin0, latin9
ISO-8859-16 | 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-8859-2, iso-ir-101, iso8859-2, iso_8859-2, iso_8859-2:1987, l2, latin-2, latin2
ISO-8859-3 | csisolatin3, iso 8859-3, iso-8859-3, iso-ir-109, iso8859-3, iso_8859-3, iso_8859-3:1988, l3, latin-3, latin3
ISO-8859-4 | csisolatin4, iso 8859-4, iso-8859-4, iso-ir-110, iso8859-4, iso_8859-4, iso_8859-4:1988, l4, latin-4, latin4
ISO-8859-5 | csisolatincyrillic, cyrillic, iso 8859-5, 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-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-8859-7, iso-ir-126, iso8859-7, iso_8859-7, iso_8859-7:1987
ISO-8859-8 | csisolatinhebrew, hebrew, iso 8859-8, iso-8859-8, iso-ir-138, iso8859-8, iso_8859-8, iso_8859-8:1988
ISO-8859-9 | csisolatin5, iso 8859-9, iso-8859-9, iso-ir-148, iso8859-9, iso_8859-9, iso_8859-9:1989, l5, latin-5, latin5
KOI-7 | iso-ir-37, koi-7, koi7
KOI8-C | cskoi8с, koi8-c, koi8c
KOI8-R | cskoi8r, koi8-r, koi8r
KOI8-T | cskoi8t, koi8-t, koi8t
KOI8-U | cskoi8u, 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, ms-cyrl, 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. Команда LangMapFile

Загружает из указанного файла карту языка и кодировки для автоматического их определения. Вы можете задать как абсолютный, так и относительный путь. Относительный путь задаётся от директории `etc`. Можно использовать несколько команд LangMapFile.

    LangMapFile langmap/en.ascii.lm

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

Для создания собственных карт языков служит утилита `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`. Это может пригодиться, например, во время поиска для ограничения поиска только по документам на указанном языке.

    DefaultLang <string>

Задаёт язык документов по умолчанию.

    DefaultLang en

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

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

## 7.1.10. Команда LocalCharset

Задаёт кодировку, которая будет использоваться для хранения информации в базе данных. Данные во всех других кодировках будут перекодированы в эту кодировку. См. Разд. 7.1> для подробного описания как выбрать LocalCharset для языков, используемых на вашем сайте или сайтах, а также списка поддерживаемых кодировок. Эта команда должны быть задана один раз и имеет глобальный эффект для всего файла конфигрурации. Значение по умолчанию: `iso-8859-1` (`latin1`).

    LocalCharset koi8-r

## 7.1.11. Команда RemoteCharset

    RemoteCharset <charset>

`<сharset>` - кодовая страница по умолчанию для последующих команд Server, Realm или Subnet. Используется при индексировании "плохих" серверов, не предоставляющих информации о кодировке в заголовках ответа сервера или в <META NAME="Content" Content="text/html; charset="some_charset"> на страницах. Команда действует до конца файла, или до следующей команды RemoteCharset. Значение по умолчанию: iso-8859-1 (latin1).

    RemoteCharset iso-8859-5

## 7.1.12. Команда URLCharset

    URLCharset <charset>

`<charset>` - кодовая страница для аргументов последующих команд Server, Realm или URL. Эта команда задаёт кодовубю страницу только для аргументов последующих команду и не влияет на определение кодировки индексируемых страниц. Имеет меньший приоритет, нежели команда RemoteCharset. Может задаваться перед каждой командой Server, Realm или URL и действует до конца файла конфигурации или до следующей команды URLCharset. Значение по умолчанию: ISO-8859-1 (latin1).

    URLCharset KOI8-R

## 7.1.13. Команда CharsToEscape

    CharsToEscape "\"&<>![]"

Используйте эту команду в вашем поисковом шаблоне для указания списка эскейп-символов для мета-переменных поискового шаблона типа $&(x).

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