В этой статье мы говорим о новых дополнениях в таблицах символов и стоп-слов, которые направлены на упрощение использования этих опций при настройке индексов.
При первоначальном анализе текста документа Manticore Search необходимо знать, какие символы в тексте имеют значение для дальнейшей обработки (разбиение полного текста на отдельные слова, обработка морфологии и так далее) и какие нет. Для определения допустимых текстовых символов используется опция charset_table . С помощью этой опции вы можете указать набор символов, с которыми хотите работать.
Кроме того, для обеспечения лучшего качества текстового поиска Manticore Search выполняет так называемое сглаживание символов. Например, при анализе вашего поискового запроса символы в верхнем регистре сопоставляются с символами в нижнем регистре, диакритические символы (такие как â, ê, î, ô и т. д.) сопоставляются с их базовыми эквивалентами и так далее. Таблица символов - это механизм, который определяет все эти преобразования.
Особый случай представляют собой языки, такие как китайский, которые имеют несегментированный текст, который нельзя легко разбить на отдельные слова, так как у них нет четких разделителей слов. (‘CJK’ - это широко используемый термин для этих языков, аббревиатура от китайского-японского-корейского.) Для обеспечения эффективного поиска для этих языков следует использовать опцию
ngram_chars
вместе с
ngram_len
. Она рассматривает текст как набор отдельных N-грамм, каждая N-грамма представляет собой последовательность символов с длиной, равной значению ngram_len
. (В настоящее время поддерживается только ngram_len = 1
.) Эти символы необходимо определить в директиве ngram_chars и они не могут появляться в обычной таблице charset_table.
Так что если вы хотите, чтобы ваш поиск поддерживал различные языки, вам нужно будет определить наборы допустимых символов и правила сглаживания для всех них, что может быть довольно трудоемкой задачей.
Мы выполнили эту задачу за вас, подготовив таблицы символов по умолчанию, которые охватывают соответственно не cjk и cjk-языки. Эти таблицы должны быть достаточны для использования в большинстве случаев. Они основаны на данных сглаживания символов ICU, которые можно увидеть здесь и определяют следующие сглаживания:
сглаживание обычных цифровых знаков
сглаживание регистра
сглаживание диакритических знаков
сглаживание радикалов Хан
сглаживание хираганы
сглаживание катаканы
сглаживание буквенных форм
упрощенное сглаживание Хан
сглаживание нижних индексов
сглаживание верхних индексов
сглаживание ширины
Здесь вы можете увидеть файлы-источники, используемые для стандартных символов: cjk.txt , non_cjk.txt
Чтобы иметь возможность работать как с cjk, так и с не-cjk языками, вам нужно установить опции в вашем конфигурационном файле, как показано ниже:
charset_table = non_cjk
...
ngram_len = 1
ngram_chars = cjk
В случае, если вам не нужна поддержка cjk-языков, вы можете просто проигнорировать опции ngram_len
и ngram_chars
.
Если вам все же нужны какие-то конкретные правила, которые должны быть включены для определенных языков, вы можете создать соответствующие таблицы символов вручную и разместить их в вашем конфигурационном файле вместо стандартных.
В дополнение к вышеупомянутым опциям вы можете использовать опцию stopwords , чтобы исключить некоторые из наиболее частых слов, которые обычно не имеют большого значения для поисковых запросов, из дальнейшей обработки и индексирования. Например, для английского языка это, вероятно, будут слова a, the, this, that и так далее. Чтобы включить эту опцию, создайте файл стоп-слов и укажите путь к нему в вашем конфигурационном файле:
stopwords = /path/to/your/stopwords/file.txt
Формат файла стоп-слов - это простой текст, содержащий список всех слов, которые вы хотели бы считать стоп-словами, по одному слову в строке. Чтобы создать файл стоп-слов, вам нужно либо собрать его вручную, либо использовать инструмент indexer
, который может предоставить список слов с наивысшей частотой в индексе.
В дополнение к этому, так же как и в случае с опциями charset_table
и ngram_chars
, теперь вы можете использовать один из наших стандартных файлов стоп-слов. В настоящее время доступны стоп-слова для 50 языков. Вот полный список их алиасов:
af - Африкаанс
ar - арабский
bg - болгарский
bn - бенгальский
ca - каталонский
ckb- курдский
cz - чешский
da - датский
de - немецкий
el - греческий
en - английский
eo - эсперанто
es - испанский
et - эстонский
eu - баскский
fa - персидский
fi - финский
fr - французский
ga - ирландский
gl - галисийский
hi - хиндийский
he - иврит
hr - хорватский
hu - венгерский
hy - армянский
id - индонезийский
it - итальянский
ja - японский
ko - корейский
la - латинский
lt - литовский
lv - латышский
mr - маратхи
nl - голландский
no - норвежский
pl - польский
pt - португальский
ro - румынский
ru - русский
sk - словацкий
sl - словенский
so - сомалийский
st - суботийский
sv - шведский
sw - суахили
th - тайский
tr - турецкий
yo - йоруба
zh - китайский
zu - зулу
Например, чтобы использовать стоп-слова для итальянского языка, просто добавьте следующую строку в ваш конфигурационный файл:
stopwords = it
Если вам нужно использовать стоп-слова для нескольких языков, вы должны перечислить все их алиасы, разделенные запятыми:
stopwords = en,it,ru
Все файлы стоп-слов по умолчанию хранятся в отдельной папке. Вы можете найти их в /share/stopwords
в папке установки Manticore на машинах с Windows и в /usr/local/share/manticore/stopwords
на машинах с Linux. Список всех языков, для которых в настоящее время предоставлены стоп-слова по умолчанию, также можно найти там в файле languages_list.txt
.