AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 57058
Accepted
Neil McGuigan
Neil McGuigan
Asked: 2014-01-19 19:02:24 +0800 CST2014-01-19 19:02:24 +0800 CST 2014-01-19 19:02:24 +0800 CST

Como uso um dicionário Ispell com a pesquisa de texto do Postgres?

  • 772

O Postgres pode usar dicionários compatíveis com Ispell na pesquisa de texto, mas não fornece os arquivos necessários.

postgresql windows
  • 4 4 respostas
  • 5325 Views

4 respostas

  • Voted
  1. Neil McGuigan
    2014-01-19T19:02:24+08:002014-01-19T19:02:24+08:00

    Este exemplo usa o dicionário de inglês canadense, mas você também pode experimentá-lo com outras pessoas.

    Estas são as etapas necessárias para o Windows:

    1. Abra http://src.chromium.org/svn/trunk/deps/third_party/hunspell_dictionaries/en_CA.dic
    2. Selecione todo o texto, copie-o e cole-o no Text Mechanic: http://textmechanic.co/Sort-Text-Lines.html . Adicione uma quebra de linha no final.
    3. Abra http://src.chromium.org/svn/trunk/deps/third_party/hunspell_dictionaries/en_CA.dic_delta
    4. Selecione todo o texto, copie-o e cole-o abaixo do texto colado anteriormente no Text Mechanic.
    5. Role até o topo, selecione e corte a primeira linha (deve ser um número de cinco dígitos) e elimine a quebra de linha.
    6. Clique no botão Alfabético e aguarde a classificação do texto.
    7. Selecione todo o texto e copie-o para a área de transferência
    8. Abra o bloco de notas do Windows como administrador
    9. Cole o texto do Passo 7 no Bloco de Notas
    10. Salve o arquivo como en_ca.dict (com codificação UTF-8) na pasta de pesquisa de texto do Postgres. O meu é C:\Program Files\PostgreSQL\9.3\share\tsearch_data .
    11. Abra http://src.chromium.org/svn/trunk/deps/third_party/hunspell_dictionaries/en_CA.aff , selecione tudo, copie e cole no Bloco de Notas. Salve o arquivo como en_ca.affix na pasta de pesquisa de texto do Postgres.

    No PgAdmin, execute o seguinte SQL:

    create text search dictionary ispell_en_ca (
      template  =   ispell,
      dictfile  =   en_ca,
      afffile   =   en_ca,
      stopwords =   english
    );
    
    --make sure it works:
    select * from ts_lexize('ispell_en_ca', 'colours');
    
    /* 
    result:
    ts_lexize
    text[]
    {coloured,colour}
    */
    

    Você precisará criar uma nova configuração de pesquisa de texto para usar o dicionário.

    • 7
  2. Best Answer
    Jeff
    2015-08-07T06:43:14+08:002015-08-07T06:43:14+08:00

    Eu escrevi o seguinte script para instalar um dicionário en_us no Ubuntu 14.04 rodando PostgreSQL 9.4. Deve ser bastante fácil de modificar para a maioria das situações.

    #!/bin/bash
    cd /usr/share/postgresql/9.4/tsearch_data
    
    wget http://src.chromium.org/svn/trunk/deps/third_party/hunspell_dictionaries/en_US.dic
    wget http://src.chromium.org/svn/trunk/deps/third_party/hunspell_dictionaries/en_US.dic_delta
    wget http://src.chromium.org/svn/trunk/deps/third_party/hunspell_dictionaries/en_US.aff -O en_us.affix
    
    # Remove first line
    sed -i 1d en_US.dic
    
    # Concat the dic and dic_delta, sort alphabetically and remove the leading blank line (leaves the ending newline intact)
    cat en_US.dic en_US.dic_delta | sort > en_us.dict
    sed -i 1d en_us.dict
    
    # Set permissions
    chown -R postgres:postgres *
    
    sudo -u postgres psql -c "CREATE TEXT SEARCH DICTIONARY ispell_en_us (template  = ispell, dictfile = en_us, afffile = en_us, stopwords = english);"
    
    # Clean up source files
    rm en_US*
    
    • 7
  3. Ian Timothy
    2020-02-26T02:53:13+08:002020-02-26T02:53:13+08:00

    Baixe e instale os arquivos necessários:

    inglês.sh

    #!/bin/sh
    
    # https://www.cs.hmc.edu/~geoff/ispell.html
    wget http://www.cs.hmc.edu/~geoff/tars/ispell-3.4.00.tar.gz
    
    tar xvzf ispell-3.4.00.tar.gz
    
    cat ispell-3.4.00/languages/english/english.{0,1,2,3} | sort > english.dic
    cp ispell-3.4.00/languages/english/english.aff ./
    
    #iconv -f ISO_8859-1 -t UTF-8 -o english.affix english.aff
    #iconv -f ISO_8859-1 -t UTF-8 -o english.dict english.dic
    
    iconv -f ISO_8859-1 -t UTF-8 english.aff > english.affix
    iconv -f ISO_8859-1 -t UTF-8 english.dic > english.dict
    
    sudo cp english.{affix,dict} `pg_config --sharedir`/tsearch_data
    

    Em seguida, crie o dicionário e a configuração:

    inglês.sql

    -- first change the database name in the alter database command below
    
    -- create dictionary using files installed by english.sh script
    create text search dictionary english_ispell (
        template = ispell,
        dictfile = english,   -- english.dict
        afffile = english,   -- english.affix
        stopwords = english   -- english.stop (should exist in default installation)
    );
    
    -- create new configuation using the default as a template
    create text search configuration public.english ( copy = pg_catalog.english );
    
    -- show current configuration
    \dF+ public.english
    
    -- alter appropriate mappings to use new dictionary
    alter text search configuration public.english
        alter mapping for asciiword, asciihword, hword_asciipart, word, hword, hword_part
            with english_ispell, english_stem;
    
    -- show changed configuration
    \dF+ public.english
    
    -- test that the new configuation works
    select * from ts_debug(
        'public.english',
        'PostgreSQL, the highly scalable, SQL compliant, open source object-relational database management system, is now undergoing beta testing of the next version of our software.'
    );
    
    -- make database use new config
    alter database <name> set default_text_search_config to 'public.english';
    
    -- make session use new config
    set default_text_search_config to 'public.english';
    
    -- test that the new config is used by default
    select * from ts_debug(
        'PostgreSQL, the highly scalable, SQL compliant, open source object-relational database management system, is now undergoing beta testing of the next version of our software.'
    );
    
    • 3
  4. Craig Ringer
    2014-01-20T18:31:31+08:002014-01-20T18:31:31+08:00

    Isso é abordado em detalhes no manual do PostgreSQL, em ISpell Dictionaries .

    Essencialmente, você apenas CREATE TEXT SEARCH DICTIONARY (...)com o nome do arquivo do dicionário, lista de palavras irrelevantes, etc.

    • 2

relate perguntas

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • O Oracle pode ser instalado no Windows sem ser um administrador?

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve