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-demodurch den tatsächlichen Nutzername undyour_database_namedurch den Namen Ihrer Datenbank.bashpsql -U servbay-demo -d your_database_name1Wenn Sie sich mit der Standard-Datenbank (meist identisch mit dem Benutzernamen) verbinden, können Sie den Parameter
-dweglassen.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\dx1In der Ausgabe sollte
zhparsersamt 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 namenschinesean und setzen Siezhparserals Parser:sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);1Legen Sie die Wörterbuch-Zuordnung fest: Außerdem muss für Tokens, die
zhparsernach 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örterbuchsimplezu – dieses übernimmt die Tokens vonzhparserdirekt, 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
zhparserunterstü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
contentlegen 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 Konfigurationchinesezurück, sodass die Tokenisierung flächendeckend aufzhparserbasiert.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', '自然语言处理');1zhparserkann „自然语言处理“ 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
scwsam besten unter/Applications/ServBay/etc/scws/auf. Legen Sie im Terminal beispielsweise eine neue Dateicustom_dict.txtan (sofern sie nicht existiert):bash# Im Terminal Datei erstellen oder bearbeiten nano /Applications/ServBay/etc/scws/custom_dict.txt1
2Dem Wörterbuch neue Begriffe hinzufügen: In der Datei
custom_dict.txtnotieren Sie – je Zeile – alle Begriffe, diezhparserkü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_pathsetzen: 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
SETgesetzte 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_dualitysetzen:- 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.confgesetzt 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 vonzhparsersollte 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_pathkorrekt 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_pathauchSELECT 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.confgesetzt 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.
