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 comandopsqlpara se conectar ao PostgreSQL rodando no ServBay. Substituaservbay-demopelo seu nome de usuário real eyour_database_namepelo nome do banco que deseja habilitar ozhparser.bashpsql -U servbay-demo -d your_database_name1Se 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\dx1Você deve ver o
zhparsere 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 ozhparsercomo 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. Ozhparserclassifica 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
zhparserpodem 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
id2 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', '自然语言处理');1zhparserpode 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.txt1
2Adicione vocabulário personalizado:
No arquivo, adicione uma palavra/frase por linha que deseja que ozhparserreconheç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
SETafeta 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,SETjá é 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
truepara 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
falsepara 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 dozhparserno 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_pathaponta 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.confe 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_dualitye 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.
