Pełnotekstowe wyszukiwanie po chińsku w ServBay: Przewodnik po użyciu zhparser
zhparser
to potężne, zewnętrzne rozszerzenie PostgreSQL zaprojektowane do wydajnego przetwarzania tekstów w języku chińskim. Rozszerzenie to umożliwia precyzyjną segmentację chińskich fraz i wyszukiwanie pełnotekstowe w PostgreSQL, co czyni je idealnym wyborem do tworzenia aplikacji opartych o chińskie treści. ServBay – kompleksowe, lokalne środowisko do tworzenia aplikacji webowych – posiada wbudowaną obsługę rozszerzenia zhparser
oraz zintegrowaną bibliotekę segmentacyjną scws
(Simple Chinese Word Segmentation), którą można wykorzystać do obsługi niestandardowych słowników.
Ten artykuł szczegółowo opisuje proces instalacji (włączenia) oraz konfiguracji zhparser
w środowisku ServBay, pokazuje, jak realizować chińskie wyszukiwanie pełnotekstowe, a także wyjaśnia, jak za pomocą scws ServBay tworzyć i stosować własne słowniki.
1. Wprowadzenie
W aplikacjach operujących na dużych ilościach chińskiego tekstu – takich jak systemy zarządzania treścią, fora czy platformy e-commerce – szybkie i precyzyjne wyszukiwanie pełnotekstowe jest kluczowe. Rodzime narzędzia PostgreSQL umożliwiają przeszukiwanie pełnotekstowe, lecz domyślnie nie radzą sobie dobrze z językiem chińskim, gdyż opierają się na podziale według spacji. Rozszerzenie zhparser
rozwiązuje ten problem dzięki zaawansowanej segmentacji chińskich słów, pozwalając PostgreSQL właściwie rozpoznawać granice słów w chińskim tekście i skutecznie realizować pełnotekstowe wyszukiwanie.
ServBay dostarcza gotowe, preinstalowane rozszerzenie zhparser
, eliminując konieczność ręcznego kompilowania i instalacji, dzięki czemu możesz szybko skonfigurować w pełni funkcjonalne środowisko z obsługą chińskiego wyszukiwania.
2. Wymagania wstępne
Przed rozpoczęciem korzystania z zhparser
upewnij się, że:
- Masz zainstalowany ServBay.
- Pakiet PostgreSQL w ServBay został uruchomiony. Możesz to sprawdzić i kontrolować poprzez interfejs aplikacji ServBay.
3. Instalacja (Włączenie) rozszerzenia zhparser
ServBay umieszcza pliki modułu zhparser
w lokalizacji rozpoznawanej przez PostgreSQL. Aby włączyć rozszerzenie, wykonaj polecenie SQL w swojej docelowej bazie danych.
Połącz się ze swoją bazą PostgreSQL: Otwórz terminal i za pomocą
psql
połącz się z bazą PostgreSQL uruchomioną przez ServBay. Zamieńservbay-demo
na nazwę użytkownika orazyour_database_name
na rzeczywistą nazwę bazy, w której chcesz aktywowaćzhparser
.bashpsql -U servbay-demo -d your_database_name
1Jeśli łączysz się z domyślną bazą (zazwyczaj o nazwie użytkownika), możesz pominąć
-d
.Utwórz rozszerzenie
zhparser
: W interfejsiepsql
wykonaj następujące polecenie SQL:sqlCREATE EXTENSION zhparser;
1Brak komunikatu o błędzie oznacza sukces. Jeśli rozszerzenie już istnieje, zobaczysz odpowiednie powiadomienie – możesz wtedy przejść dalej.
Weryfikacja instalacji
zhparser
: Możesz sprawdzić listę zainstalowanych rozszerzeń, wydając polecenie:sql\dx
1Wśród pozycji powinna pojawić się informacja o
zhparser
i jego wersji.
4. Konfiguracja zhparser
Po włączeniu zhparser
należy skonfigurować funkcję pełnotekstowego wyszukiwania w PostgreSQL tak, by korzystała z segmentatora chińskiego. Chodzi tu głównie o stworzenie odpowiedniej konfiguracji wyszukiwania tekstowego (Text Search Configuration).
Tworzenie konfiguracji wyszukiwania tekstowego: Konfiguracja tego typu definiuje, jak konwertować dokumenty do
tsvector
(do indeksowania) i jak zapytania zamieniać natsquery
(do wyszukiwania). Stworzymy konfigurację o nazwiechinese
z parserem ustawionym nazhparser
.sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1Dodanie mapowania słowników: Trzeba określić, jakiego słownika powinien używać parser do poszczególnych typów wyrazów (tokenów).
zhparser
oznacza słowa według ich kategorii gramatycznych (np. rzeczownik: n, czasownik: v, przymiotnik: a itd.). W tym miejscu zmapujemy rzeczowniki (n), czasowniki (v), przymiotniki (a), wyrażenia niezależne (i), wyrażenia emocjonalne (e), liczebniki (l) do słownikasimple
. Słowniksimple
zachowuje wyrazy bez żadnych zmian.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- Możesz wedle potrzeb dodać lub zmienić etykiety kategorii i słowników.
1
2Uwaga: Kategorie używane przez
zhparser
mogą się różnić od standardowych tagów NLP; powyżej wymieniono najczęstsze.
5. Wyszukiwanie pełnotekstowe z użyciem zhparser
Konfiguracja gotowa – czas przejść do praktycznego wyszukiwania tekstów po chińsku! Oto demonstracja krok po kroku.
5.1 Tworzenie przykładowej tabeli i danych
Najpierw załóż tabelę przechowującą chińskie teksty i wstaw do niej przykładowe wpisy.
Tworzenie tabeli:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Wstawianie danych przykładowych:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理'), ('中文分词是文本处理的重要步骤'), ('zhparser 是一个很好的中文分词工具'), ('ServBay 让本地开发更便捷');
1
2
3
4
5
5.2 Tworzenie indeksu do wyszukiwania pełnotekstowego
Dla wydajności – szczególnie przy dużych zbiorach danych – zaleca się indeksowanie kolumn przeznaczonych do wyszukiwania pełnotekstowego. Najlepszym wyborem dla kolumn typu tsvector
jest indeks GIN (Generalized Inverted Index).
Tworzenie indeksu GIN: Indeks utworzymy dla kolumny
content
– przekształcając tekst na formattsvector
za pomocąto_tsvector('chinese', content)
i wskazując naszą wcześniejszą konfiguracjęchinese
, by użyć parserazhparser
.sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 Wykonywanie zapytań pełnotekstowych
Teraz możesz użyć funkcji to_tsquery
do konwersji słów-kluczy na format zapytania i wykonać wyszukiwanie z operatorem @@
na indeksowanej kolumnie.
Wykonywanie zapytania: Przykładowe zapytanie wyszukujące dokumenty zawierające zarówno "中文", jak i "分词":
sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- Opcjonalnie: podgląd wyników segmentacji FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5
6Zapytanie zwróci dokumenty o
id
równym 2 i 3, ponieważ oba zawierają oba słowa.Inne przykłady:
- Wyszukiwanie dokumentów z "ServBay":sql(Zwróci dokument z id 4)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1 - Wyszukiwanie dokumentów z "自然语言处理":sql(Zwróci dokument z id 1. Uwaga: w zależności od trybu segmentacji i słownika,
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');
1zhparser
może traktować "自然语言处理" jako jedno słowo lub podzielić. Warto dodać tę frazę do niestandardowego słownika.)
- Wyszukiwanie dokumentów z "ServBay":
6. Tworzenie niestandardowego słownika przy użyciu scws wbudowanego w ServBay
ServBay posiada zintegrowaną bibliotekę scws
, z której może korzystać zhparser
do przetwarzania plików słownika – zarówno domyślnych, jak i własnych, co zwiększa precyzję segmentacji, zwłaszcza dla terminologii branżowej lub neologizmów.
6.1 Tworzenie pliku słownika użytkownika
Utwórz lub edytuj plik niestandardowego słownika: Zaleca się trzymać słowniki scws w katalogu
/Applications/ServBay/etc/scws/
. Utwórz plik o nazwiecustom_dict.txt
(jeśli jeszcze nie istnieje):bash# Tworzenie lub edycja pliku w terminalu nano /Applications/ServBay/etc/scws/custom_dict.txt
1
2Dodaj wyrazy do słownika: W pliku wpisz każdą frazę, którą chcesz, aby
zhparser
traktował jako jedno słowo, w osobnym wierszu. Na przykład:plaintext自然语言处理 中文分词 ServBay 本地开发环境
1
2
3
4Zapisz i zamknij plik.
6.2 Konfiguracja zhparser do użycia własnego słownika
Musisz poinformować zhparser
, gdzie znajduje się słownik użytkownika.
Ustawienie parametru
zhparser.dict_path
: W sesji PostgreSQL ustaw ścieżkę do pliku słownika:sqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- Upewnij się, że ścieżka jest poprawna i użytkownik PostgreSQL ma do niej dostęp.
1
2Uwaga: Parametr ustawiony przez
SET
jest aktywny tylko w bieżącej sesji. Jeśli chcesz aktywować go globalnie, edytuj plikpostgresql.conf
i dodajzhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
, po czym zrestartuj PostgreSQL (przez ServBay). Dla lokalnych testów i developmentu zwykłeSET
zazwyczaj wystarcza.
6.3 Przeładowanie słownika
Po edycji słownika musisz poinformować zhparser
o zmianach.
Wywołanie funkcji przeładowującej słownik:
sqlSELECT zhprs_reload_dict();
1Po wykonaniu tej procedury, następna segmentacja będzie korzystać z odświeżonego słownika.
7. Regulacja trybu segmentacji
zhparser
obsługuje różne tryby segmentacji, mające wpływ na szczegółowość dzielenia tekstu. Najczęściej stosowanym parametrem sterującym jest zhparser.seg_with_duality
.
7.1 Ustawianie trybu segmentacji
- Ustawianie parametru
zhparser.seg_with_duality
:- Ustaw
true
, by włączyć tryb dwuelementowej segmentacji (bigramy), co daje bardziej szczegółowe podziały i lepszą "odnajdywalność" treści (większa liczba trafień). Przykład: "自然语言处理" może być podzielone na "自然", "语言", "处理", "自然语言", "语言处理".sqlSET zhparser.seg_with_duality = true;
1 - Ustaw
false
, by korzystać z segmentacji opartej głównie na najdłuższym dopasowaniu z uwzględnieniem słownika – podnosi to precyzję trafień. Np. "自然语言处理" zostanie podzielone tylko jako całość (jeśli jest w słowniku).sqlSET zhparser.seg_with_duality = false;
1
postgresql.conf
. - Ustaw
8. Najczęściej zadawane pytania (FAQ)
- Q: Polecenie
CREATE EXTENSION zhparser;
zgłasza błąd braku rozszerzenia? A: Upewnij się, że PostgreSQL w ServBay jest poprawnie zainstalowany i uruchomiony. ServBay powinien automatycznie umieścić plikizhparser
w katalogu rozszerzeń. Jeśli problem nadal występuje, sprawdź kompletność instalacji ServBay i PostgreSQL oraz spróbuj ponownie uruchomić ServBay. - Q: Niestandardowy słownik nie działa? A: Sprawdź następujące punkty:
- Czy parametr
zhparser.dict_path
został poprawnie ustawiony i wskazuje na Twój plik słownika (/Applications/ServBay/etc/scws/custom_dict.txt
). Pamiętaj, że ścieżki są rozróżniane wielkość liter. - Czy po ustawieniu ścieżki wykonałeś
SELECT zhprs_reload_dict();
aby przeładować słownik? - Czy format pliku słownika jest prawidłowy (jedna fraza w wierszu)?
- Jeśli korzystasz z nowej sesji bazy – czy ponownie zastosowałeś
SET zhparser.dict_path = ...;
lub czy na pewno dodałeś ustawienie dopostgresql.conf
i zrestartowałeś PostgreSQL? - Czy użytkownik PostgreSQL ma uprawnienia do odczytu pliku słownika?
- Czy parametr
- Q: Wyniki wyszukiwania pełnotekstowego są niewłaściwe? A: Sprawdź, czy konfiguracja wyszukiwania (
chinese
) poprawnie mapuje kategorie gramatyczne do słowników, wypróbuj zmianę parametruzhparser.seg_with_duality
i zobacz efekty. Użyj zapytania:SELECT to_tsvector('chinese', 'Twój chiński tekst');
, by podejrzeć sposób segmentacji (przydatne przy debugowaniu). Sprawdź również logikę zapytania i używane operatory (&
,|
,!
). - Q: Wyszukiwanie pełnotekstowe działa wolno? A: Upewnij się, że utworzony został indeks GIN na kolumnie z
to_tsvector(...)
. Przy bardzo dużych zbiorach warto rozważyć optymalizację konfiguracji PostgreSQL lub zastosowanie dodatkowych technik indeksowania.
9. Podsumowanie
Dzięki ServBay zastosowanie zhparser
dla chińskiego wyszukiwania pełnotekstowego w PostgreSQL jest szybkie i proste. W kilku krokach możesz włączyć rozszerzenie, ustawić konfigurację wyszukiwania tekstowego i korzystać z niestandardowych słowników dzięki integracji scws w ServBay. Poznanie zasad działania i podstaw konfiguracji zhparser
znacząco zwiększa możliwości przetwarzania chińskich danych tekstowych w Twoim lokalnym środowisku deweloperskim – to solidna baza pod zaawansowane chińskojęzyczne projekty.