Une extension PostgreSQL simple et simpliste fournissant un modèle de dictionnaire de recherche de texte complet pour le texte hébreu basé sur HSPELL.
La langue hébraïque est traditionnellement considérée comme difficile pour effectuer des tâches de récupération de documents. Sa riche morphologie signifie que les mots ont une très grande quantité d'inflexions d'une part, et la présence généralisée d'homographes entraîne une ambiguïté. Tout cela signifie que les systèmes de recherche de texte intégral ont tendance à souffrir d'un mauvais rappel hors de la boîte lorsqu'ils traitent des textes hébreux.
pg_hspell est une extension PostgreSQL qui essaie d'aider avec ces tâches lors de l'utilisation du sous-système de recherche de texte intégré de la base de données. Il utilise le dictionnaire et les informations linguistiques fournies par le projet HSPELL pour fournir un modèle de dictionnaire Postgres qui lemmatise les mots hébreux dans le cadre d'un pipeline de configuration.
Seuls les jetons hébreux sont traités; Tout jeton qui ne contient aucune lettre hébraïque n'est pas reconnu et sera transmis à un dictionnaire suivant dans la configuration.
Les jetons hébreux qui apparaissent dans une liste de mots d'arrêt configurable sont supprimés.
Pour les jetons qui sont des entrées valides dans le dictionnaire de HSpell, tous les lemmes possibles sont émis comme différents variantes.
Tous les autres jetons sont émis tels quels.
Un système GNU / Linux
PostgreSQL 9.6+ - Les versions antérieures peuvent également fonctionner, mais ne sont pas officiellement soutenues de toute façon
libhspell, compilé avec l'indicateur de configuration --enable-linginfo (les packages de distribution sont généralement)
Actuellement, pg_hspell doit être construit à partir du code source. Assurez-vous d'avoir des fichiers de support de développement (en-têtes, etc.) pour PostgreSQL et HSPELL disponibles.
Pour construire et installer, exécuter:
$ make install
Cela s'accumulera contre et s'installe dans l'installation de PostgreSQL déterminée par la première instance de pg_config trouvée dans le chemin actuel. Pour cibler une installation spécifique (ou une non dans le chemin):
$ make install PG_CONFIG=/path/to/pg_config
Pour charger l'extension dans une base de données, exécutez la commande SQL suivante en tant qu'utilisateur convenablement autorisé:
CREATE EXTENSION pg_hspell; Cela placera dans le schéma actuel Un dictionnaire de texte intégral appelé hspell qui est configuré avec une liste groupée de mots d'arrêt hébreu communs. Pour créer un dictionnaire avec une liste de mots d'arrêt différente (ou aucune du tout), faites quelque chose comme la commande SQL suivante:
CREATE TEXT SEARCH DICTIONARY my_hspell_dict (
TEMPLATE = hspell,
[ STOPWORDS = my_stop_words_file ]
); Comme pour tous les autres modèles de dictionnaire de recherche de texte, la liste des mots d'arrêt doit être un fichier enregistré dans le répertoire $SHAREDIR/tsearch_data du serveur de données et ayant une extension .stop . L'exemple ci-dessus recherchera $SHAREDIR/tsearch_data/my_stop_words_file.stop
Le dictionnaire doit ensuite être intégré dans une configuration de recherche de texte, comme décrit dans le manuel PostgreSQL. Cette extension ne fournit aucune configuration prédéfinie.
Comme le modèle de répertoire hspell ne reconnaîtra que des jetons contenant des caractères hébreux, il est logique de définir des dictionnaires en fonction de celui-ci dans des mappages pour les jetons de type word , hword et hword-part (en supposant l'analyseur par défaut).
Comme indiqué ci-dessus, lorsqu'un jeton est reconnu par le dictionnaire de Hspell, tous les lemmes possibles pour lui sont émis (par exemple pour le mot הרכבת - רכבת , הרכבה et הרכיב sont tous émis). Ceci est bénéfique pour le rappel, mais peut bien sûr nuire à la précision. Pour le moment, cette extension n'effectue aucune désambiguïsation morphologique - et de toute façon, cela nécessite un contexte de phrase, quel cadre de recherche de texte intégral de PostgreSQL ne rend pas vraiment simple à utiliser dans les modèles de dictionnaire.
Le filtrage des mots d'arrêt est appliqué sur les jetons d'entrée eux-mêmes. L'ambiguïté des mots d'arrêt est particulièrement problématique avec l'hébreu (pour des exemples, consultez ce billet de blog), alors prenez-le en compte lors de la création d'une liste de mots d'arrêt ou si vous souhaitez en utiliser un.
Hspell ne peut pas profiter du texte en pointillé, et en fait un tel texte ne peut même pas être représenté dans le codage ISO-8859-8 avec lequel Libhspell fonctionne. Actuellement, les jetons contenant Niqqud ne seront donc pas reconnus par ce modèle de dictionnaire!
Si le traitement du texte pointillé est souhaité, Niqqud doit être dépouillé avant de passer du texte à un dictionnaire pg_hspell . Cela peut être réalisé en créant un ensemble de règles approprié pour le module inaccent. À l'avenir, pg_hspell pourrait effectuer cela directement.
Veuillez noter que l'analyseur de recherche de texte par défaut inclus avec PostgreSQL ne gère pas correctement les cas d'angle spécifiques à l'hébreu où les caractères généralement considérés comme la ponctuation (c'est-à-dire l'apostrophe et la marque de citation) n'agissent pas comme tels lorsqu'ils sont intégrés dans un mot. Ces cas sont communs dans les textes informatiques hébraïques dans les acronymes et les abréviations, qui peuvent ne pas être tokenisés comme prévu.
Par exemple:
postgres=# select * from ts_parse('default', $$ נתב"ג $$);
tokid | token
-------+-------
2 | נתב
12 | "
2 | ג
Ce n'est pas quelque chose de spécifique à pg_hspell ou dans sa portée à l'adresse. S'il existe des cas spécifiques qui sont particulièrement gênants, ils peuvent être travaillés avec un dictionnaire de thésaurus. Vous pouvez également considérer l'analyseur fourni par l'extension PG_ICU_PARSER, qui le gère correctement.
pg_hspell lui-même est autorisé en vertu de la Licence publique Mozilla 2.0. La liste des mots d'arrêt inclus est basée sur celle créée par Guy SAAR et extraite de https://github.com/fergiemcdowall/stopword, publiée sous la licence MIT.