ServBay Chinese Full-Text Search: Gebruikshandleiding voor zhparser
zhparser
is een krachtige, externe PostgreSQL-extensie, speciaal ontworpen voor efficiënte verwerking van Chinese tekst. Hiermee krijgt de PostgreSQL-database nauwkeurige Chinese woordsegmentatie en full-text zoekmogelijkheden; ideaal voor het bouwen van applicaties waarbij Chinese content-zoekfuncties centraal staan. ServBay, een complete lokale webontwikkelomgeving, heeft zhparser
standaard geïntegreerd, samen met de scws
(Simple Chinese Word Segmentation) bibliotheek, waardoor zhparser
gebruik kan maken van custom woordenboeken.
In dit artikel lees je alles over het installeren (inschakelen) en configureren van zhparser
binnen de ServBay-omgeving, hoe je deze gebruikt voor Chinese full-text zoekopdrachten, en hoe je met de ingebouwde scws
van ServBay eigen woordenboeken aanmaakt en toepast.
1. Overzicht
Voor toepassingen met veel Chinese tekst—zoals contentmanagementsystemen, forums of e-commerceplatforms—is een snelle en nauwkeurige full-text zoekfunctie essentieel. De standaard full-text search van PostgreSQL biedt hiervoor beperkte ondersteuning omdat deze vooral is gericht op spatiegescheiden talen. De zhparser
-extensie biedt een oplossing door Chinese segmentatietechnieken te integreren: PostgreSQL begrijpt zo de woordgrenzen in Chinese teksten, waardoor effectieve full-text search mogelijk wordt.
ServBay levert zhparser
voorgeïnstalleerd aan ontwikkelaars, waardoor je niet langer handmatig de extensie hoeft te compileren en installeren. Hierdoor kun je razendsnel lokaal een ontwikkelomgeving opzetten met Chinese zoekfunctionaliteit.
2. Vereisten
Voordat je zhparser
gaat gebruiken, zorg je ervoor dat:
- ServBay correct geïnstalleerd is.
- Het PostgreSQL-pakket van ServBay is ingeschakeld en draait. Je kunt de status van de pakketten bekijken en beheren via de ServBay-interface.
3. zhparser-extensie installeren (inschakelen)
ServBay heeft het zhparser
-modulebestand al geplaatst in de directory waar PostgreSQL deze kan vinden. Je hoeft hem alleen nog aan te zetten via een SQL-commando in je doel-database.
Maak verbinding met je PostgreSQL-database: Open je terminal en gebruik de
psql
opdrachtregeltool om verbinding te maken met de PostgreSQL-database van ServBay. Vervangservbay-demo
door je daadwerkelijke databasegebruikersnaam, enyour_database_name
door de naam van de database waarin jezhparser
wilt activeren.bashpsql -U servbay-demo -d your_database_name
1Als je verbinding maakt met de standaarddatabase (vaak gelijk aan de gebruikersnaam), kun je de
-d
parameter weglaten.Extensie
zhparser
aanmaken: Geef in de interactieve interface vanpsql
het volgende SQL-commando:sqlCREATE EXTENSION zhparser;
1Zie je geen foutmelding, dan is het gelukt. Krijg je een melding dat de extensie al bestaat, dan is deze eerder al ingeschakeld.
zhparser-installatie verifiëren: Gebruik het volgende commando om de lijst met geïnstalleerde extensies te bekijken:
sql\dx
1In de lijst moet je
zhparser
terugzien inclusief de versie-informatie.
4. zhparser configureren
Na het activeren van zhparser
moet je PostgreSQL’s tekstzoekfunctie instellen om daadwerkelijk Chinese segmentatie te gebruiken. Dit gebeurt via Text Search Configurations.
Maak een Text Search Configuration: Zo'n configuratie bepaalt hoe documenten worden omgezet naar een
tsvector
(voor indexering) en hoe zoektermen in eentsquery
(voor search) veranderen. Hier maken we een configuratie genaamdchinese
diezhparser
als parser gebruikt.sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1Woordenboektoewijzingen instellen: Je wijst toe hoe tokens (woorden met bepaalde woordsoorten) door een woordenboek verwerkt worden.
zhparser
voorziet ieder woord van een tag (zoals zelfstandig naamwoord = n, werkwoord = v, bijvoeglijk naamwoord = a, enz.). Hier koppelen we onder andere n (zelfstandig naamwoord), v (werkwoord), a (bijvoeglijk naamwoord), i (interjectie), e (emotioneel woord), l (getalwoord) aan hetsimple
woordenboek. Dit is het basiswoordenboek, waarbij geen verdere conversie van de tokens plaatsvindt.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- Je kunt indien gewenst zelf andere tags of woordenboeken toevoegen of aanpassen.
1
2Let op: De POS-tags van
zhparser
kunnen afwijken van de standaard NLP-indeling; bovenstaande zijn de meestgebruikte.
5. Full-text search uitvoeren met zhparser
Na de configuratie kun je met zhparser
Chinese full-text search gebruiken. Hieronder een praktische demonstratie.
5.1 Voorbeeldtabel en -data aanmaken
Begin met het aanmaken van een tabel en invoeren van wat voorbeelddata.
Tabel aanmaken:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Voorbeelddata invoegen:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理'), ('中文分词是文本处理的重要步骤'), ('zhparser 是一个很好的中文分词工具'), ('ServBay 让本地开发更便捷');
1
2
3
4
5
5.2 Full-text search index aanmaken
Voor hoge zoekprestaties, zeker met grotere datasets, maak je een index aan op de kolom die je full-text wilt doorzoeken. Voor tsvector
velden kun je het best een GIN (Generalized Inverted Index) gebruiken; deze zijn zeer snel bij text search queries.
GIN-index aanmaken: We maken een GIN-index op de
content
kolom. Tijdens het indexeren converteertto_tsvector('chinese', content)
de tekst in de content-kolom en gebruikt onze nieuwechinese
configuratie (metzhparser
) voor de segmentatie.sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 Full-text zoekopdrachten uitvoeren
Gebruik to_tsquery
om zoektermen om te zetten naar het queryformaat, en de @@
operator om deze te matchen met de tsvector
indexkolom.
Zoekopdracht uitvoeren: Zoek bijvoorbeeld naar documenten die zowel “中文” als “分词” bevatten:
sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- Optioneel: bekijk de segmentatieresultaten FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5
6Deze query geeft de documenten met id 2 en 3 omdat in de content beide woorden staan.
Andere zoekopdrachten proberen:
- Zoeken naar documenten die “ServBay” bevatten:sql(Geeft het document met id 4)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1 - Zoeken naar documenten met “自然语言处理”:sql(Geeft het document met id 1. Let erop dat
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');
1zhparser
“自然语言处理” mogelijk als één geheel, of als losse delen segmenteert, afhankelijk van je segmentatiemodus en woordenboek. Voeg het als geheel toe aan een custom woordenboek voor optimale resultaten.)
- Zoeken naar documenten die “ServBay” bevatten:
6. Maak je eigen woordenboek met de ingebouwde scws van ServBay
scws
is geïntegreerd in ServBay. Daardoor kan zhparser
gebruikmaken van custom woordenboeken voor nog nauwkeurigere segmentatie, bijvoorbeeld voor branchespecifieke termen of nieuwe woorden.
6.1 Eigen woordenboekbestand maken
Eigen woordenboekbestand aanmaken/bewerken: ServBay adviseert custom scws-woordenboeken te plaatsen in
/Applications/ServBay/etc/scws/
. Maak zonodig het bestandcustom_dict.txt
aan.bash# Bestand aanmaken of bewerken in de terminal nano /Applications/ServBay/etc/scws/custom_dict.txt
1
2Woorden toevoegen aan het bestand: Voeg elk woord dat je voor segmentatie wilt gebruiken toe op een aparte regel in
custom_dict.txt
, bijvoorbeeld:plaintext自然语言处理 中文分词 ServBay 本地开发omgeving
1
2
3
4Sla het bestand op en sluit af.
6.2 zhparser configureren met je custom woordenboek
Vertel zhparser
dat hij dit zelfgemaakte woordenboek moet gebruiken.
Stel de parameter
zhparser.dict_path
in: In je PostgreSQL-sessie zet je het pad naar het custom woordenboek in via:sqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- Let op dat het pad juist is en dat de PostgreSQL-gebruiker leesrechten heeft.
1
2Let op: Het
SET
-commando is alleen actief voor de huidige sessie. Voor globaal gebruik pas je hetpostgresql.conf
-bestand aan en voeg je toe/of wijzig jezhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
. Start PostgreSQL (via de ServBay-interface) daarna opnieuw. Voor lokaal testen isSET
meestal voldoende.
6.3 Woordenboek herladen
Na wijzigen van het woordenboek, moet je zhparser
laten herladen.
Herlaad-functie aanroepen:
sqlSELECT zhprs_reload_dict();
1Hierna werkt
zhparser
met het bijgewerkte woordenboek voor alle volgende segmentaties.
7. Segmentatiemodus aanpassen
zhparser
biedt verschillende segmentatiemethoden die de fijnheid van de segmentatie beïnvloeden. De belangrijkste regelaar is de parameter zhparser.seg_with_duality
.
7.1 Segmentatiemodus instellen
- Parameter
zhparser.seg_with_duality
instellen:- Zet op
true
: Activeer "twee-gram segmentatie"; de segmentatie is fijner (meer tokens), wat de recall van zoekopdrachten vergroot (je vindt meer relevante documenten). Bijvoorbeeld, “自然语言处理” wordt gesegmenteerd in “自然”, “语言”, “处理”, “自然语言”, “语言处理”.sqlSET zhparser.seg_with_duality = true;
1 - Zet op
false
: Gebruik een grovere segmentatie (meestal de langste match in het woordenboek). Dit verhoogt de precisie van zoekopdrachten. Bijvoorbeeld, “自然语言处理” wordt slechts als geheel gesegmenteerd (als het in het woordenboek staat).sqlSET zhparser.seg_with_duality = false;
1
postgresql.conf
. - Zet op
8. Veelgestelde vragen (FAQ)
- Q: Krijg ik een foutmelding bij
CREATE EXTENSION zhparser;
? A: Kijk of het PostgreSQL-pakket van ServBay goed is geïnstalleerd en draait. Dezhparser
-bibliotheek moet in de juiste extensiedirectory van PostgreSQL aanwezig zijn. Controleer eventueel de installatie/integriteit van zowel ServBay als PostgreSQL en start ServBay opnieuw. - Q: Mijn custom woordenboek wordt niet gebruikt – hoe kan dit? A: Controleer deze punten:
- Staat de parameter
zhparser.dict_path
goed ingesteld op het pad van jouw woordenboek (/Applications/ServBay/etc/scws/custom_dict.txt
)? Pad is hoofdlettergevoelig! - Heb je na het instellen van
zhparser.dict_path
ookSELECT zhprs_reload_dict();
uitgevoerd? - Is het woordenboekformaat correct (één woord per regel)?
- Is de parameter opnieuw ingesteld voor elke nieuwe databasesessie, of heb je
postgresql.conf
aangepast en PostgreSQL herstart? - Heeft de PostgreSQL-gebruiker leesrechten op het woordenboekbestand?
- Staat de parameter
- Q: Mijn zoekresultaten komen niet overeen met de verwachting? A: Kijk of je Text Search Configuration (
chinese
) POS-tags juist aan woordenboeken koppelt. Experimenteer met de parameterzhparser.seg_with_duality
. GebruikSELECT to_tsvector('chinese', 'je Chinese testtekst');
om te zien hoe tekst precies gesegmenteerd wordt (handig voor debuggen). Controleer of je query (to_tsquery
) de juiste termen en logische operatoren (&
,|
,!
) bevat. - Q: Slechte performance bij full-text search? A: Zorg ervoor dat je een GIN-index hebt op je
to_tsvector(...)
kolom. Voor zeer grote datasets zijn er extra optimalisaties mogelijk binnen PostgreSQL of (eventueel) andere zaailing-zoektechnologieën.
9. Samenvatting
Dankzij ServBay is het implementeren van Chinese full-text search met zhparser
in PostgreSQL efficiënter dan ooit. Met enkele eenvoudige stappen schakel je de extensie in, configureer je tekstsearch, én kun je direct profiteren van custom woordenboeken via de ingebouwde scws-bibliotheek. Door vertrouwd te raken met basisgebruik en configuratie van zhparser
, verhoog je de Chinese tekstverwerkingsmogelijkheden van je lokale ontwikkelomgeving ingrijpend—en leg je een solide fundament voor het bouwen van krachtige, meertalige toepassingen.