ServBay Chinesische Volltextsuche: Leitfaden zur Nutzung von zhparser
zhparser
ist ein leistungsstarkes Drittanbieter-Erweiterungsmodul für PostgreSQL, das speziell für die effiziente Verarbeitung von chinesischen Texten entwickelt wurde. Es verschafft PostgreSQL präzise chinesische Tokenisierung und Fähigkeiten für die Volltextsuche und ist damit die ideale Wahl für Anwendungen, die mit chinesischen Inhalten arbeiten. ServBay, als umfassende lokale Webentwicklungsumgebung, integriert und unterstützt zhparser
bereits ab Werk und enthält zusätzlich die Tokenisierungsbibliothek scws
(Simple Chinese Word Segmentation), sodass zhparser
auf benutzerdefinierte Wörterbücher zugreifen kann.
Dieser Leitfaden beschreibt detailliert, wie man zhparser
in ServBay installiert (bzw. aktiviert) und konfiguriert, wie man es für chinesische Volltextsuche verwendet sowie eigene Wörterbücher mithilfe des integrierten scws
erstellt und einsetzt.
1. Überblick
Für Anwendungen, die große Mengen chinesischer Texte beinhalten – etwa Content-Management-Systeme, Foren oder E-Commerce-Plattformen – ist eine schnelle und präzise Volltextsuche unerlässlich. PostgreSQL bietet zwar standardmäßig eine Volltextsuche, unterstützt jedoch Chinesisch nur schlecht, da sie vor allem für durch Leerzeichen getrennte Sprachen ausgelegt ist. Das Plugin zhparser
löst dieses Problem durch die Integration chinesischer Tokenisierungstechnologien und ermöglicht es PostgreSQL, Wortgrenzen in chinesischen Texten zu erkennen – die Grundlage für eine effektive Volltextsuche.
ServBay enthält zhparser
bereits vorinstalliert, sodass Sie keine Bibliotheken manuell kompilieren oder installieren müssen. Damit können Sie schnell eine lokale Entwicklungsumgebung mit Unterstützung für chinesische Volltextsuche aufbauen.
2. Voraussetzungen
Bevor Sie zhparser
nutzen, stellen Sie bitte sicher, dass:
- ServBay erfolgreich installiert wurde.
- Das PostgreSQL-Paket in ServBay aktiviert und läuft. Den Status von Softwarepaketen können Sie über die ServBay-Anwendung einsehen und steuern.
3. Installation (Aktivierung) des zhparser-Plugins
ServBay platziert die Moduldateien von zhparser
bereits an einem Ort, den PostgreSQL erkennt. Sie müssen das Plugin lediglich in Ihrer Zieldatenbank mithilfe von SQL-Befehlen aktivieren.
Verbinden Sie sich mit Ihrer PostgreSQL-Datenbank: Öffnen Sie ein Terminal und verwenden Sie das Kommandozeilen-Tool
psql
, um sich mit PostgreSQL unter ServBay zu verbinden. Ersetzen Sie dazuservbay-demo
durch den tatsächlichen Nutzername undyour_database_name
durch den Namen Ihrer Datenbank.bashpsql -U servbay-demo -d your_database_name
1Wenn Sie sich mit der Standard-Datenbank (meist identisch mit dem Benutzernamen) verbinden, können Sie den Parameter
-d
weglassen.Erstellen Sie die
zhparser
-Erweiterung: Geben Sie impsql
-Interface folgenden SQL-Befehl ein:sqlCREATE EXTENSION zhparser;
1Funktioniert der Befehl ohne Fehlermeldung, wurde das Plugin korrekt installiert. Eine Meldung über eine bereits bestehende Erweiterung bedeutet, dass sie schon aktiviert ist.
Überprüfen Sie die Installation von
zhparser
: Mit folgendem Befehl erhalten Sie eine Liste aller aktiven Erweiterungen:sql\dx
1In der Ausgabe sollte
zhparser
samt Versionsangabe erscheinen.
4. Konfiguration von zhparser
Nach der Aktivierung von zhparser
muss PostgreSQL für die Textsuche so eingerichtet werden, dass chinesische Texte mit zhparser
tokenisiert werden. Dies geschieht über das Anlegen einer Textsuchkonfiguration (Text Search Configuration).
Erstellen Sie eine Textsuchkonfiguration: Die Konfiguration beschreibt, wie Dokumente in
tsvector
(für den Index) und Abfragen intsquery
(für die Suche) umgewandelt werden. Legen Sie eine Konfiguration namenschinese
an und setzen Siezhparser
als Parser:sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1Legen Sie die Wörterbuch-Zuordnung fest: Außerdem muss für Tokens, die
zhparser
nach der Tokenisierung mit bestimmten Wortarten (wie Nomen n, Verben v, Adjektiven a etc.) markiert, das zu verwendende Wörterbuch bestimmt werden. Wir ordnen Nomen (n), Verben (v), Adjektive (a), unabhängige Wörter (i), Emotionswörter (e), Mengenwörter (l) dem sehr einfachen Wörterbuchsimple
zu – dieses übernimmt die Tokens vonzhparser
direkt, ohne sie zu ändern.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- Sie können die Zuordnung der Wortarten und Wörterbücher nach Bedarf anpassen oder erweitern.
1
2Hinweis: Die von
zhparser
unterstützten POS-Tags (Part-of-Speech Tags) können von üblichen NLP-Tags abweichen. Die genannten sind die häufigsten.
5. Nutzung von zhparser für die Volltextsuche
Nach der Konfiguration können Sie die chinesische Volltextsuche mit zhparser
direkt nutzen. Folgendes Beispiel zeigt die wichtigsten Schritte.
5.1 Beispiel-Tabelle und Testdaten erstellen
Zunächst erstellen Sie eine Beispiel-Tabelle für chinesische Texte und fügen einige Daten ein.
Tabelle anlegen:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Beispieldaten einfügen:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理'), ('中文分词是文本处理的重要步骤'), ('zhparser 是一个很好的中文分词工具'), ('ServBay 让本地开发更便捷');
1
2
3
4
5
5.2 Volltextsuch-Index erstellen
Um die Suchleistung, gerade bei großen Datenmengen, zu verbessern, wird empfohlen, einen Index für die relevante Spalte anzulegen. Für die Spalte vom Typ tsvector
eignet sich besonders ein GIN-Index (Generalized Inverted Index), da dieser für Volltextanfragen sehr performant ist.
GIN-Index anlegen: Für die Spalte
content
legen wir einen GIN-Index an. Der Inhalt wird mitto_tsvector('chinese', content)
in das passende Format überführt. Dabei greifen wir auf die zuvor angelegte Konfigurationchinese
zurück, sodass die Tokenisierung flächendeckend aufzhparser
basiert.sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 Volltextsuche durchführen
Jetzt können Sie Suchbegriffe mit to_tsquery
in einen Query-Operator umwandeln und mit @@
gegen die indizierte Spalte prüfen.
Suchanfrage ausführen: Example: Suche nach Dokumenten, die sowohl „中文“ als auch „分词“ enthalten:
sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- Optional: Tokenisierungsergebnis anzeigen FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5
6Die Abfrage gibt die Dokumente mit den IDs 2 und 3 zurück, da deren Inhalte beide Begriffe enthalten.
Probieren Sie weitere Suchanfragen:
- Nach Dokumenten mit „ServBay“ suchen:sql(gibt das Dokument mit ID 4 zurück)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1 - Nach Dokumenten mit „自然语言处理“ suchen:sql(gibt das Dokument mit ID 1 zurück. Hinweis:
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');
1zhparser
kann „自然语言处理“ ggf. als ein Ganzes oder als mehrere Tokens behandeln, je nach Tokenisierung und Wörterbuch. Mit eigenem Eintrag im Wörterbuch werden die Ergebnisse besser.)
- Nach Dokumenten mit „ServBay“ suchen:
6. Eigene Wörterbücher mit dem in ServBay integrierten scws nutzen
ServBay enthält die scws
-Tokenisierungsbibliothek. zhparser
kann so konfiguriert werden, dass es Wörterbuchdateien von scws
– inklusive benutzerdefinierter Wörterbücher – nutzt. Die Tokenisierungsgenauigkeit wird dadurch insbesondere für fachspezifische Vokabeln oder Neologismen deutlich erhöht.
6.1 Eigenes Wörterbuch erstellen
Eigene Wörterbuchdatei erstellen oder bearbeiten: Bewahren Sie benutzerdefinierte Wörterbücher für
scws
am besten unter/Applications/ServBay/etc/scws/
auf. Legen Sie im Terminal beispielsweise eine neue Dateicustom_dict.txt
an (sofern sie nicht existiert):bash# Im Terminal Datei erstellen oder bearbeiten nano /Applications/ServBay/etc/scws/custom_dict.txt
1
2Dem Wörterbuch neue Begriffe hinzufügen: In der Datei
custom_dict.txt
notieren Sie – je Zeile – alle Begriffe, diezhparser
künftig als eigenständige Tokens erkennen soll, etwa:plaintext自然语言处理 中文分词 ServBay 本地开发环境
1
2
3
4Speichern Sie die Datei nach den Anpassungen.
6.2 zhparser für die Nutzung des benutzerdefinierten Wörterbuchs konfigurieren
Sie müssen zhparser
mitteilen, welches Wörterbuch verwendet werden soll.
Parameter
zhparser.dict_path
setzen: Führen Sie in Ihrer PostgreSQL-Session folgenden Befehl aus, um den Pfad zu Ihrem benutzerdefinierten Wörterbuch einzustellen:sqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- Der Pfad muss korrekt sein und der PostgreSQL-User benötigt Leseberechtigung.
1
2Hinweis: Mit
SET
gesetzte Parameter gelten nur für die aktuelle Datenbank-Session. Um die Einstellung generell zu übernehmen, editieren Sie die PostgreSQL-Konfiguration (postgresql.conf
), fügen Sie dort z. B.zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
hinzu und starten Sie den PostgreSQL-Dienst (über die ServBay-Oberfläche) neu. Für lokale Entwicklung und Tests genügt das Setzen im laufenden Prozess meist.
6.3 Wörterbuch neu laden
Nach Anpassungen am Wörterbuch sollte zhparser
diese neu einlesen.
Reload-Funktion aufrufen:
sqlSELECT zhprs_reload_dict();
1Danach werden neue Tokenisierungen das aktuellste Wörterbuch berücksichtigen.
7. Tokenisierungsmodus anpassen
zhparser
unterstützt verschiedene Tokenisierungsmodi, welche die Granularität der Zerteilung beeinflussen. Der wichtigste Schalter hierfür ist zhparser.seg_with_duality
.
7.1 Tokenisierungsmodus wählen
- Parameter
zhparser.seg_with_duality
setzen:- Auf
true
: Aktiviert Dual-Tokenisierung – dabei entstehen feinere Segmente durch Zweier-Kombinationen, was die Trefferquote (Recall) erhöht. So kann beispielsweise „自然语言处理“ in „自然“, „语言“, „处理“, „自然语言“, „语言处理“ zerlegt werden.sqlSET zhparser.seg_with_duality = true;
1 - Auf
false
: Es wird eine gröbere, meist durch maximale Übereinstimmung mit dem Wörterbuch geprägte Tokenisierung genutzt, was die Genauigkeit erhöht, z. B. „自然语言处理“ als ein Begriff (sofern im Wörterbuch enthalten).sqlSET zhparser.seg_with_duality = false;
1
postgresql.conf
gesetzt werden. - Auf
8. Häufige Fragen (FAQ)
- Frage:
CREATE EXTENSION zhparser;
meldet fehlendes Extension-File? Antwort: Prüfen Sie, ob das PostgreSQL-Paket in ServBay korrekt installiert und aktiviert ist. Die Bibliotheksdatei vonzhparser
sollte bereits im passenden Ordner liegen. Andernfalls prüfen Sie die Integrität der ServBay- und PostgreSQL-Installation oder starten Sie ServBay neu. - Frage: Das eigene Wörterbuch scheint nicht zu wirken? Antwort: Beachten Sie Folgendes:
- Ist der Parameter
zhparser.dict_path
korrekt auf den Pfad Ihres Wörterbuchs gesetzt (/Applications/ServBay/etc/scws/custom_dict.txt
)? (Groß-/Kleinschreibung beachten!) - Haben Sie nach dem Setzen von
zhparser.dict_path
auchSELECT zhprs_reload_dict();
abgesetzt? - Ist das Dateiformat korrekt (ein Begriff pro Zeile)?
- Haben Sie in der neuen Session erneut
SET zhparser.dict_path = ...;
ausgeführt, oder wurde die Einstellung in derpostgresql.conf
gesetzt und der Dienst neu gestartet? - Verfügt der PostgreSQL-User über Leserechte für die Wörterbuchdatei?
- Ist der Parameter
- Frage: Die Suchergebnisse weichen von meinen Erwartungen ab? Antwort: Prüfen Sie die Zuordnung der Wortarten in Ihrer
chinese
-Konfiguration. Ändern Sie testweise den Parameterzhparser.seg_with_duality
. MitSELECT to_tsvector('chinese', 'Ihr chinesischer Beispieltext');
können Sie kontrollieren, wie der Text tokenisiert wird (hilfreich zum Debuggen). Prüfen Sie außerdem, ob Ihre Suchanfrage (to_tsquery
) mit den richtigen Keywords und Operatoren (&
,|
,!
) formuliert ist. - Frage: Die Performance der Volltextsuche ist schlecht? Antwort: Vergewissern Sie sich, dass Sie einen GIN-Index für die
to_tsvector(...)
-Spalte erstellt haben. Bei sehr großen Datenmengen sollten Sie ggf. die PostgreSQL-Konfiguration weiter optimieren oder fortgeschrittene Indizierungsmethoden in Betracht ziehen.
9. Zusammenfassung
Dank ServBay wird die chinesische Volltextsuche unter PostgreSQL mit zhparser
zum Kinderspiel. In wenigen Schritten können Sie die Erweiterung aktivieren, die Textsuche konfigurieren und mit dem integrierten scws
eigene Wörterbücher einbinden. Ein grundlegendes Verständnis der Einsatzmöglichkeiten sowie der Konfiguration von zhparser
steigert Ihre Fähigkeit, chinesische Texte in lokalen Entwicklungsumgebungen leistungsstark zu verarbeiten – und die Basis für funktionsreiche chinesischsprachige Anwendungen zu legen.