Busca Textual em Chinês no ServBay: Guia de Uso do zhparser
O zhparser
é uma poderosa extensão de terceiros para o PostgreSQL, projetada especificamente para o processamento eficiente de textos em chinês. Ela adiciona ao banco de dados PostgreSQL recursos precisos de segmentação de palavras e busca textual em chinês, tornando-se a escolha ideal ao construir aplicativos que envolvem busca de conteúdos nesse idioma. O ServBay, como ambiente local completo para desenvolvimento web, já vem com suporte integrado ao zhparser
, além de incluir a biblioteca de segmentação de palavras scws
(Simple Chinese Word Segmentation), que pode ser aproveitada pelo zhparser
para criar dicionários personalizados.
Este guia detalha como instalar (habilitar) e configurar o zhparser
no ambiente do ServBay, demonstra como utilizá-lo para busca textual em chinês e explica o uso do scws
interno do ServBay para criar e aplicar dicionários personalizados.
1. Visão Geral
Para aplicativos que lidam com grandes volumes de textos em chinês — tais como sistemas de gerenciamento de conteúdo, fóruns, plataformas de e-commerce, entre outros — ter uma solução eficiente e precisa de busca textual é fundamental. O PostgreSQL já oferece recursos nativos de busca textual, mas seu suporte ao chinês é limitado por padrão, pois ele foi concebido principalmente para idiomas baseados em separação por espaço. A extensão zhparser
resolve essa limitação ao integrar uma tecnologia de segmentação de palavras para o chinês, capacitando o PostgreSQL a compreender os limites das palavras e realizando buscas textuais em chinês de forma eficiente.
O ServBay já integra previamente o zhparser
, eliminando a necessidade de compilar ou instalar manualmente a extensão. Assim, você pode rapidamente configurar um ambiente de desenvolvimento local com suporte à busca textual em chinês.
2. Pré-requisitos
Antes de usar o zhparser
, verifique se:
- O ServBay está instalado com sucesso.
- O pacote PostgreSQL dentro do ServBay está ativado e em execução. Você pode verificar e gerenciar o status dos pacotes pela interface do aplicativo ServBay.
3. Instalando (Habilitando) a Extensão zhparser
O ServBay posiciona automaticamente o arquivo do módulo zhparser
onde o PostgreSQL pode acessá-lo. Você só precisa executar um comando SQL no banco de dados desejado para habilitá-lo.
Conecte-se ao seu banco de dados PostgreSQL:
Abra o terminal e utilize o cliente de linha de comandopsql
para se conectar ao PostgreSQL rodando no ServBay. Substituaservbay-demo
pelo seu nome de usuário real eyour_database_name
pelo nome do banco que deseja habilitar ozhparser
.bashpsql -U servbay-demo -d your_database_name
1Se for conectar ao banco de dados padrão (normalmente com o mesmo nome do usuário), pode omitir o parâmetro
-d
.Crie a extensão
zhparser
:
No prompt dopsql
, execute o comando SQL abaixo:sqlCREATE EXTENSION zhparser;
1Se o comando executar sem erro, está tudo certo. Caso retorne que a extensão já existe, significa que ela já está habilitada.
Verifique a instalação do
zhparser
:
Confira os módulos de extensão disponíveis no banco rodando:sql\dx
1Você deve ver o
zhparser
e suas informações de versão listadas.
4. Configurando o zhparser
Após habilitar a extensão, é necessário configurar a busca textual do PostgreSQL para utilizar o zhparser
na segmentação de textos em chinês. Isso envolve criar uma configuração de busca textual (Text Search Configuration).
Crie a configuração de busca textual:
Ela define como os documentos são convertidos paratsvector
(para índice) e como as strings de busca são convertidas paratsquery
(para consulta). Vamos criar uma configuração chamadachinese
, usando ozhparser
como analisador (PARSER).sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1Adicione mapeamento de dicionários:
É necessário especificar qual dicionário (dictionary) deve ser utilizado para diferentes tipos de tokens que o parser gera. Ozhparser
classifica as palavras de acordo com as classes gramaticais: substantivos (n), verbos (v), adjetivos (a), frases independentes (i), termos emotivos (e), numerais (l) etc. Aqui, mapeamos esses tipos para o dicionáriosimple
, que faz a correspondência direta sem transformação.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- Você pode adicionar ou ajustar os rótulos conforme necessário.
1
2Nota: As etiquetas de classes gramaticais do
zhparser
podem diferir ligeiramente dos padrões NLP. Acima estão os mais usados pelozhparser
.
5. Usando o zhparser para Busca Textual
Depois da configuração, você já pode usar o zhparser
para buscas textuais em chinês. Veja um exemplo prático.
5.1 Criando tabela e dados de exemplo
Primeiro, crie uma tabela para armazenar texto em chinês e insira alguns registros.
Crie a tabela:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Insira dados de exemplo:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理'), ('中文分词是文本处理的重要步骤'), ('zhparser 是一个很好的中文分词工具'), ('ServBay 让本地开发更便捷');
1
2
3
4
5
5.2 Criando Índice para Busca Textual
Para melhorar a performance da busca, especialmente em grandes volumes de dados, é altamente recomendado criar um índice na coluna usada para busca textual. No caso do tipo tsvector
, o índice GIN (Generalized Inverted Index) é o mais adequado.
Crie o índice GIN:
Faremos o índice sobre a colunacontent
, usandoto_tsvector('chinese', content)
para converter o texto utilizando a configuração criada anteriormente e ativando o uso dozhparser
.sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 Realizando Consultas de Busca Textual
Agora, você pode utilizar to_tsquery
para transformar o termo buscado e usar o operador @@
em consultas à coluna indexada.
Exemplo de busca:
Para buscar documentos que contenham simultaneamente “中文” e “分词”:sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- Opcional: veja os tokens segmentados FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5
6A consulta retorna os documentos com
id
2 e 3, pois ambos possuem “中文” e “分词” no conteúdo.Experimente outras buscas:
- Buscar documentos contendo “ServBay”:sql(Retorna o documento de id 4)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1 - Buscar documentos sobre “自然语言处理”:sql(Retorna o documento de id 1. Observação: o
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');
1zhparser
pode tratar “自然语言处理” como palavra única ou subdividir, dependendo do modo de segmentação e do dicionário. A configuração de dicionários personalizados melhora esse resultado.)
- Buscar documentos contendo “ServBay”:
6. Criando Dicionários Personalizados com o scws Interno do ServBay
O ServBay integra a biblioteca scws
, assim permitindo que o zhparser
utilize arquivos de dicionário, inclusive personalizados. Isso aumenta a precisão na segmentação, principalmente para terminologias técnicas ou neologismos.
6.1 Criando o arquivo de dicionário personalizado
Crie ou edite o dicionário personalizado:
Recomenda-se salvar o arquivo do dicionário em/Applications/ServBay/etc/scws/
. Crie ou edite o arquivocustom_dict.txt
(crie caso não exista).bash# Crie ou edite o arquivo via terminal nano /Applications/ServBay/etc/scws/custom_dict.txt
1
2Adicione vocabulário personalizado:
No arquivo, adicione uma palavra/frase por linha que deseja que ozhparser
reconheça. Exemplo:plaintext自然语言处理 中文分词 ServBay 本地开发环境
1
2
3
4Salve e feche o arquivo.
6.2 Configurando o zhparser para uso do dicionário personalizado
É necessário instruir o zhparser
a utilizar o novo arquivo de dicionário.
Defina o parâmetro
zhparser.dict_path
:
Na sua sessão do PostgreSQL, rode:sqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- Certifique-se de que o caminho está correto e o usuário PostgreSQL tem permissão de leitura.
1
2Nota: O comando
SET
afeta apenas a sessão atual. Para tornar global, ajuste isso no arquivo de configuraçãopostgresql.conf
, adicionandozhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
e reinicie o PostgreSQL (pode ser pelo aplicativo do ServBay). Para desenvolvimento local/testes,SET
já é suficiente.
6.3 Recarregando o dicionário
Após editar o dicionário, é preciso informar ao zhparser
para recarregar o arquivo.
Chame a função de recarga:
sqlSELECT zhprs_reload_dict();
1Após executar, as segmentações passarão a aplicar as novas palavras do dicionário personalizado.
7. Ajustando o Modo de Segmentação
O zhparser
suporta diferentes modos de segmentação, o que altera o grau de detalhamento. O parâmetro mais utilizado é zhparser.seg_with_duality
.
7.1 Definindo o modo de segmentação
- Ajuste o parâmetro
zhparser.seg_with_duality
:- Defina como
true
para ativar o “modo binário”, que gera segmentos mais detalhados, melhorando a cobertura da busca (encontrando mais documentos relevantes). Por exemplo, “自然语言处理” pode ser quebrado em “自然”, “语言”, “处理”, “自然语言”, “语言处理”.sqlSET zhparser.seg_with_duality = true;
1 - Defina como
false
para uma segmentação mais ampla, geralmente usando a correspondência mais longa via dicionário, o que aumenta a precisão. Por exemplo, “自然语言处理” será tratado como um termo único (desde que exista no dicionário).sqlSET zhparser.seg_with_duality = false;
1
postgresql.conf
. - Defina como
8. Perguntas Frequentes (FAQ)
- P: O comando
CREATE EXTENSION zhparser;
retorna extensão não encontrada?
R: Confirme se o pacote PostgreSQL do ServBay está instalado e rodando corretamente. O ServBay já inclui os arquivos dozhparser
no diretório certo do PostgreSQL. Se persistir, verifique a integridade das instalações do ServBay e PostgreSQL ou tente reiniciar o ServBay. - P: Dicionário personalizado não está funcionando?
R: Analise os pontos abaixo:- O parâmetro
zhparser.dict_path
aponta para o arquivo correto (/Applications/ServBay/etc/scws/custom_dict.txt
)? (o caminho diferencia maiúsculas) - Após definir o caminho, executou
SELECT zhprs_reload_dict();
para recarregar o dicionário? - O formato do arquivo está correto (uma palavra por linha)?
- Em novas sessões, confirmou a execução novamente de
SET zhparser.dict_path = ...;
ou adicionou a configuração aopostgresql.conf
e reiniciou o PostgreSQL? - O usuário do PostgreSQL tem permissão de leitura no arquivo do dicionário?
- O parâmetro
- P: Os resultados da busca textual não correspondem ao esperado?
R: Verifique se a configuração de busca textual (chinese
) está corretamente mapeada. Ajuste o parâmetrozhparser.seg_with_duality
e teste novamente. UseSELECT to_tsvector('chinese', 'seu texto chinês');
para ver como o texto está sendo segmentado. Confirme se está usando os termos e operadores corretos emto_tsquery
(&
,|
,!
). - P: Performance da busca textual está lenta?
R: Veja se criou o índice GIN sobre a colunato_tsvector(...)
. Para grandes volumetrias, considere também ajustar configurações do PostgreSQL ou pesquisar técnicas avançadas de indexação.
9. Conclusão
Com o ServBay, usar o zhparser
no PostgreSQL para buscas textuais em chinês ficou muito simples. Com poucos passos, você habilita a extensão, configura a busca textual e pode aproveitar o scws interno do ServBay para personalizar o dicionário e a segmentação. Dominar o zhparser
e suas configurações aumenta significativamente a sua capacidade de trabalhar com dados em chinês em projetos locais, garantindo uma base sólida para criar aplicações em chinês ricas em funcionalidades.