Uma extensão simples e simplista do PostGresql, fornecendo um modelo de dicionário de pesquisa de texto completo para o texto hebraico com base no HSPELL.
O idioma hebraico é tradicionalmente considerado difícil de executar tarefas de recuperação de documentos. Sua rica morfologia significa que as palavras têm uma quantidade muito grande de inflexões, por um lado, e a presença generalizada de homógrafos leva à ambiguidade. Tudo isso significa que os sistemas completos de pesquisa de texto tendem a sofrer de baixa recordação fora da caixa ao lidar com textos hebraicos.
pg_hspell é uma extensão PostGresql que tenta ajudar nessas tarefas ao usar o subsistema de pesquisa de texto completo integrado do banco de dados. Ele usa o dicionário e as informações linguísticas fornecidas pelo projeto HSPELL para fornecer um modelo de dicionário pós -gres que lematiza as palavras hebraicas como parte de um pipeline de configuração.
Somente os tokens hebraicos são tratados; Qualquer token que não contenha cartas hebraicas não seja reconhecido e será encaminhado para qualquer dicionário seguinte na configuração.
Os tokens hebraicos que aparecem em uma lista de palavras de parada configuráveis são descartados.
Para tokens que são entradas válidas no dicionário de Hspell, todos os lemas possíveis são emitidos como variantes diferentes.
Todos os outros tokens são emitidos como está.
Um sistema GNU/Linux
PostgreSQL 9.6+ - As versões anteriores também podem funcionar, mas não são oficialmente apoiadas de qualquer maneira
Libhspell, compilado com o sinalizador de configuração --enable-linginfo (os pacotes de distribuição normalmente são)
Atualmente, pg_hspell deve ser construído a partir do código -fonte. Certifique -se de ter arquivos de suporte de desenvolvimento (cabeçalhos etc.) para o PostgreSQL e o HSPELL disponíveis.
Para construir e instalar, execute:
$ make install
Isso será construído contra e instalará na instalação do PostgreSQL determinada pela primeira instância de pg_config encontrada no caminho atual. Para atingir uma instalação específica (ou não no caminho):
$ make install PG_CONFIG=/path/to/pg_config
Para carregar a extensão em um banco de dados, execute o seguinte comando SQL como um usuário adequadamente permissão:
CREATE EXTENSION pg_hspell; Isso colocará no esquema atual um dicionário de texto completo chamado hspell , que é configurado com uma lista agrupada de palavras comuns de parada em hebraico. Para criar um dicionário com uma lista de palavras de parada diferente (ou nenhuma), faça algo como o seguinte comando SQL:
CREATE TEXT SEARCH DICTIONARY my_hspell_dict (
TEMPLATE = hspell,
[ STOPWORDS = my_stop_words_file ]
); Como em todos os outros modelos de dicionário de pesquisa de texto, a lista de palavras de parada deve ser um arquivo salvo no diretório $SHAREDIR/tsearch_data do servidor de banco de dados e ter uma extensão .stop . O exemplo acima procurará $SHAREDIR/tsearch_data/my_stop_words_file.stop
O dicionário precisa ser integrado a uma configuração de pesquisa de texto, conforme descrito no manual PostgreSQL. Esta extensão não fornece nenhuma configuração predefinida.
Como o modelo de diretório hspell reconhecerá apenas tokens contendo caracteres hebraicos, só faz sentido definir dicionários com base nele em mapeamentos para tokens do tipo word , hword e hword-part (assumindo o analisador padrão).
Como רכבת acima, quando um token é reconhecido pelo dicionário de Hspelll הרכבה todos os lemas possíveis são emitidos (por exemplo, para a palavra הרכבת são todos הרכיב ). Isso é benéfico para recall, mas é claro que pode prejudicar a precisão. Nesse momento, essa extensão não realiza nenhuma desambiguação morfológica - e de qualquer maneira isso requer contexto de sentença, que a estrutura de pesquisa de texto completa do PostgreSQL não é realmente simples para usar em modelos de dicionário.
A filtragem de palavras de parada é aplicada nos tokens de entrada. A ambiguidade do Stop Word é particularmente problemática com o hebraico (para exemplos, consulte esta postagem do blog); portanto, leve isso em consideração ao criar uma lista de palavras de parada ou considerando se você deseja usar um.
O HSPELL não pode tirar proveito do texto pontilhado e, de fato, esse texto não pode ser representado na codificação ISO-8859-8, com o que a libhspell trabalha. Atualmente, os tokens que contêm NIQQUD, portanto, não serão reconhecidos por este modelo de dicionário!
Se o texto do processamento for desejado, o NIQQUD deverá ser despojado antes de passar o texto para um dicionário pg_hspell . Isso pode ser conseguido criando uma regra adequada definida para o módulo desacenteado. No futuro, pg_hspell pode executar isso diretamente.
Observe que o analisador de pesquisa de texto padrão incluído no PostgreSQL não lida corretamente a casos de canto específicos para o hebraico, onde os caracteres geralmente considerados pontuação (ou seja, apóstrofe e marca de cotação) não agem como tais quando incorporados em uma palavra. Tais casos são comuns em textos de computador hebraico em acrônimos e abreviações, que podem não ser tokenizadas conforme o esperado.
Por exemplo:
postgres=# select * from ts_parse('default', $$ נתב"ג $$);
tokid | token
-------+-------
2 | נתב
12 | "
2 | ג
Isso não é algo específico para pg_hspell ou dentro de seu escopo para abordar. Se houver instâncias específicas particularmente incômodas, elas podem ser contornadas com um dicionário de dicionário de sinônimos. Você também pode considerar o analisador fornecido pela extensão PG_ICU_PARSER, que lida com isso corretamente.
O próprio pg_hspell é licenciado sob a licença pública de Mozilla 2.0. A lista de palavras de parada incluída é baseada em uma criada por Guy Saar e extraída de https://github.com/fergiemcdowall/stopword, lançada sob a licença do MIT.