Analisador de pesquisa de texto PostGresql usando análise de limite da UTI
A primeira etapa da pesquisa completa de texto é a análise - quebrando textos de documentos e consultas em tokens individuais (palavras distintas, números etc.). No entanto, existem idiomas em que essa tarefa não é tão trivial. O exemplo mais proeminente são os idiomas do Leste Asiático (como chinês, japonês, coreano e muito mais) - onde as palavras não são normalmente separadas por espaço em branco e pontuação. Outro exemplo é o hebraico; Embora as palavras sejam separadas pela pontuação, alguns caracteres podem ser considerados como marcas de pontuação ou não, dependendo do contexto.
O analisador padrão incluído no subsistema de pesquisa de texto completo do PostGresql fornece resultados bastante insatisfatórios nesses casos. pg_icu_parser é uma extensão que fornece uma implementação de análise de pesquisa de pesquisa completa de texto de texto personalizada que usa rotinas de análise de limite da ICU Word para extrair tokens para fora do texto de origem. Eles implementam os algoritmos especificados no Anexo 29 do padrão Unicode e podem fornecer resultados razoáveis em vários idiomas.
Atualmente, pg_icu_parser deve ser construído a partir do código -fonte. Verifique se você possui arquivos de suporte de desenvolvimento (cabeçalhos etc.) para o PostgreSQL disponível.
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
A extensão também está disponível no PGXN.
Para carregar a extensão em um banco de dados, execute o seguinte comando SQL como usuário com permissões adequadas:
CREATE EXTENSION pg_icu_parser;Isso registrará o analisador de texto personalizado no esquema atual. Para fazer uso, uma configuração de pesquisa de texto deve ser criada conforme descrito no manual PostgreSQL. Por exemplo:
CREATE TEXT SEARCH CONFIGURATION sample (parser = icu_parser);
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR number , ideo, kana WITH simple; Os tipos de token que podem ser emitidos pelo analisador são word , number , kana , ideo e blank - eles se alinham com as tags de quebra de palavras suportadas pela UTI. Não há restrições sobre quais dicionários podem ser usados.
pg_icu_parser expõe um único parâmetro de configuração:
pg_icu_parser.locale - String, opcional. O local da UTI para usar com as rotinas de análise de limite. Se não estiver definido, os padrões para en . Normalmente, não há necessidade de definir esse parâmetro, pois não há regras de detecção de limite de palavras que sejam sensíveis ao local. Conforme descrito acima, a força principal de pg_icu_parser versus o analisador default já incorporado no PostgreSQL são os melhores resultados de tokenização em vários idiomas. Além disso, pg_icu_parser não depende da configuração de localidade do banco de dados ou do sistema operacional subjacente para determinar o que é uma carta.
No entanto, existem várias trade-offs a serem cientes de que podem afetar a decisão de se pg_icu_parser é apropriado para um caso de uso específico:
O analisador padrão pode reconhecer uma ampla variedade de padrões como tokens, incluindo URLs, endereços de email, vários tipos distintos de valores numéricos, etc. pg_icu_parser por outro lado, tem significativamente menos tipos de token (e os poucos que são suportados são muito mais grossos) e não podem detectar padrões complexos.
No momento, pg_icu_parser não suporta a função ts_headline . Talvez no futuro ...
pg_icu_parser é muito mais lento que o analisador default . No entanto, se a codificação do servidor do banco de dados for UTF-8, é usado um caminho rápido, o que reduz a sobrecarga. Veja a seção de referência abaixo.
Como uma extensão de terceiros, pg_icu_parser só pode ser usado quando o controle total da instalação do PostGresql está disponível; Ou seja, provavelmente não pode ser usado com as soluções gerenciadas PostgreSQL.
A referência não científica a seguir pode dar uma idéia de quanto de desacelerar se pode esperar de usar pg_icu_parser em vez do analisador padrão. O cenário testado é uma consulta para contar o número de tokens não em branco em cada documento em um corpus. O corpus usado é o Haaretz Corpus, composto por 27.139 artigos de idiomas hebraicos curtos. Os valores são o tempo médio de execução em milissegundos de 10 rodadas, conforme relatado pelo EXPLAIN ANALYZE :
| Codificação do servidor | default | pg_icu_parser | Desacelerar |
|---|---|---|---|
| UTF-8 | 2.566.9974 | 2.884.3696 | -12,3% |
| ISO-8859-8 | 3.529.6487 | 5.059.3616 | -43,3% |
É claro que diferentes ambientes e diferentes corpora podem ter resultados diferentes, YMMV.
pg_icu_parser é licenciado sob a licença pública de Mozilla 2.0.