Простое и упрощенное расширение PostgreSQL, обеспечивающее полное шаблон словаря поиска для иврита на основе Hspell.
Еврейский язык традиционно считается трудным для выполнения задач поиска документов. Его богатая морфология означает, что слова имеют очень большое количество перегиб, с одной стороны, и широко распространенное присутствие гомографов приводит к неоднозначности. Все это означает, что полный текстовый поиск, как правило, страдает от плохого отзыва из коробки при работе с ивритными текстами.
pg_hspell -это расширение PostgreSQL, которое пытается помочь с такими задачами при использовании встроенной подсистемы поиска базы данных. Он использует словарь и лингвистическую информацию, предоставленную проектом Hspell, для предоставления шаблона словаря Postgres, который легматизирует ивритские слова как часть конфигурации конфигурации.
Только ивритные жетоны решаются; Любой токен, который не содержит каких -либо еврейских букв, не распознается и будет направлен в любой следующий словарь в конфигурации.
Ивритные жетоны, которые появляются в настраиваемом списке остановки, сбрасываются.
Для токенов, которые являются достоверными записями в словаре Hspell, все возможные леммы испускаются как разные варианты.
Все остальные токены испускаются как есть.
Система GNU/Linux
Postgresql 9.6+ - более ранние версии также могут работать, но в любом случае не поддерживаются официально
Libhspell, скомпилированный с флагом конфигурации --enable-linginfo (как правило, пакеты распределения)
В настоящее время pg_hspell должен быть построен из исходного кода. Убедитесь, что у вас есть файлы поддержки разработки (заголовки и т. Д.) Для PostgreSQL и HSPELL.
Чтобы построить и установить, запустить:
$ make install
Это будет построено против и установки в установку PostgreSQL, определяемая первым экземпляром pg_config , найденного в текущем пути. Чтобы нацелиться на конкретную установку (или не в пути):
$ make install PG_CONFIG=/path/to/pg_config
Чтобы загрузить расширение в базу данных, выполните следующую команду SQL в качестве соответствующего разрешенного пользователя:
CREATE EXTENSION pg_hspell; Это поместит в текущую схему полный текстовый словарь под названием hspell , который настроен с комплексным списком общих слов иврита. Чтобы создать словарь с другим списком слов остановки (или вообще нет), сделайте что -то вроде следующей команды SQL:
CREATE TEXT SEARCH DICTIONARY my_hspell_dict (
TEMPLATE = hspell,
[ STOPWORDS = my_stop_words_file ]
); Как и во всех других шаблонах словаря текстового поиска, список Stop Words должен быть файлом, сохраненным в каталоге сервера базы данных $SHAREDIR/tsearch_data и имеющего расширение .stop . Приведенный выше пример будет искать $SHAREDIR/tsearch_data/my_stop_words_file.stop
Затем словарь должен быть интегрирован в конфигурацию текстового поиска, как описано в руководстве PostgreSQL. Это расширение не предоставляет никаких предопределенных конфигураций.
Поскольку шаблон каталога hspell будет распознавать только токены, содержащие ивритные символы, имеет смысл только устанавливать словарные основания на его сопоставлениях для токенов word , hword и hword-part (при условии побочного анализатора).
Как отмечалось выше, когда токен распознается словарем HSpell, все возможные леммы испускаются (например, для слова окно הרכבת - רכבת , הרכבה и ъем и הרכיב все излучаются). Это полезно для отзывов, но, конечно, может повредить точность. В настоящее время это расширение не выполняет никаких морфологических динамиков - и, в любом случае, для этого требуется контекст предложений, который полный текстовый поиск PostgreSQL на самом деле не позволяет использовать в словарных шаблонах.
Остановка фильтрации слов применяется на самих токенах. Остановить неоднозначность слов особенно проблематична с ивритом (для примеров см. В этом сообщении), поэтому примите это во внимание при создании списка Stop Word или рассмотрение того, хотите ли вы его использовать вообще.
Hspell не может воспользоваться пунктирным текстом, и на самом деле такой текст даже не может быть представлен в кодировании ISO-8859-8, с которым работает Libhspell. В настоящее время токены, содержащие Niqqud, поэтому не будут признаны этим шаблоном словаря!
Если требуется обработка пунктирного текста, Niqqud должен быть разделен до передачи текста в словарь pg_hspell . Это может быть достигнуто путем создания подходящего набора правил для неподходящего модуля. В будущем pg_hspell может выполнять это напрямую.
Обратите внимание, что анализатор текстового поиска по умолчанию, включенный в PostgreSQL, неправильно обрабатывает угловые случаи, специфичные для иврита, где символы обычно считаются пунктуацией (то есть апострофом и кавычками), не действуют как таковые, когда они включены в слово. Такие случаи распространены в текстах ивритских компьютеров в аббревиатурах и аббревиатурах, которые могут не быть токенизированы, как и ожидалось.
Например:
postgres=# select * from ts_parse('default', $$ נתב"ג $$);
tokid | token
-------+-------
2 | נתב
12 | "
2 | ג
Это не что -то конкретное для pg_hspell или в рамках его действия. Если есть конкретные случаи, которые особенно надоедливы, они могут работать с словарем тезауруса. Вы также можете рассмотреть анализ, предоставленный расширением PG_ICU_PARSER, который обрабатывает это правильно.
Сам pg_hspell лицензирован по публичной лицензии Mozilla 2.0. Включенный список Stop Words основан на том, что создается Guy Saar и извлечен из https://github.com/fergiemcdowall/stopword, выпущенного по лицензии MIT.