ServBay Çince Tam Metin Arama: zhparser Kullanım Kılavuzu
zhparser
, PostgreSQL için yüksek performanslı Çince metin işleme ve tam metin arama sağlayan güçlü bir üçüncü parti uzantıdır. PostgreSQL veritabanına hassas Çince kelime ayrıştırma ve arama yeteneği ekler. Bu özellik, Çince içerik arayan uygulamalar için idealdir. Kapsamlı bir yerel web geliştirme ortamı olan ServBay, zhparser
uzantısını ve ayrıca scws
(Simple Chinese Word Segmentation) kelime ayırıcı kütüphanesini dahili olarak destekler. zhparser
, özelleştirilebilir sözlükler için scws
'yi kullanabilir.
Bu rehberde, ServBay ortamında zhparser
nasıl kurulur (etkinleştirilir) ve yapılandırılır detaylı olarak anlatılır; ayrıca Çince tam metin aramanın nasıl yapılacağı ve ServBay’in dahili scws
özelliğiyle özelleştirilmiş sözlüklerin nasıl oluşturulup kullanılabileceği adım adım gösterilir.
1. Genel Bakış
Çok miktarda Çince metin içeren uygulamalar için (içerik yönetim sistemleri, forumlar, e-ticaret platformları vb.) doğru ve hızlı tam metin arama hayati öneme sahiptir. PostgreSQL’in yerleşik tam metin arama özelliği mevcuttur, ancak varsayılan olarak Çince desteği zayıftır; çünkü ağırlıklı olarak kelimeleri boşluklara göre bölen dillere uygundur. zhparser
uzantısı, modern Çince kelime ayırma teknolojisini entegre ederek bu sorunu çözer; böylece PostgreSQL, Çince metinlerdeki kelime sınırlarını algılayabilir ve etkili bir tam metin araması mümkün olur.
ServBay, geliştiriciler için zhparser
'ı önceden entegre ederek manuel kurulum zahmetini ortadan kaldırır ve size Çince tam metin arama destekli bir geliştirme ortamı kurma rahatlığı sunar.
2. Ön Koşullar
zhparser
’ı kullanmadan önce:
- ServBay’i başarıyla kurmuş olmalısınız.
- ServBay’de PostgreSQL paketinin etkin ve çalışır durumda olduğundan emin olun. Paket yönetimi ve durumunu ServBay uygulaması arayüzünden takip edebilirsiniz.
3. zhparser Uzantısının Kurulumu (Etkinleştirme)
ServBay, zhparser
modül dosyalarını PostgreSQL’in erişebileceği konumlara yerleştirir. Sadece aşağıdaki SQL komutlarıyla hedef veritabanında eklentiyi etkinleştirmeniz gerekir.
PostgreSQL Veritabanınıza Bağlanın: Terminali açın ve
psql
komut satırı aracıyla ServBay üzerinde çalışan PostgreSQL veritabanına bağlanın.servbay-demo
yerine kullandığınız kullanıcı adını,your_database_name
yerine ise eklentiyi etkinleştirmek istediğiniz veritabanı adını yazın.bashpsql -U servbay-demo -d your_database_name
1Eğer varsayılan veritabanına (genellikle kullanıcı adıyla aynıdır) bağlanıyorsanız,
-d
parametresini atlayabilirsiniz.zhparser
Uzantısını Oluşturun:psql
arayüzünde aşağıdaki SQL komutunu çalıştırın:sqlCREATE EXTENSION zhparser;
1Komut başarılı olursa hata çıkmaz. “Uzantı zaten mevcut” uyarısı alırsanız, daha önce etkinleştirilmiş demektir.
zhparser
Kurulumunu Doğrulayın: Yüklenen uzantıları görmek için aşağıdaki komutu çalıştırın:sql\dx
1Çıktıda
zhparser
ve sürüm bilgilerini görmelisiniz.
4. zhparser Yapılandırması
zhparser
etkinleştirildikten sonra, PostgreSQL’in metin arama özelliğinin Çince kelime ayırma için zhparser
’ı kullanmasını sağlamanız gerekir. Bu, bir metin arama yapılandırması (Text Search Configuration) oluşturmakla yapılır.
Metin Arama Yapılandırması Oluşturun: Bu yapılandırma, belgelerin
tsvector
(indeksleme için) ve sorgu dizelerinintsquery
(arama için) formatına nasıl dönüştürüleceğini tanımlar. “chinese” adında bir yapılandırma oluşturuyoruz ve ayrıştırıcı (PARSER) olarakzhparser
’ı belirtiyoruz.sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1Sözlük Eşlemesi Ekleyin: Metin arama yapılandırmasına,
zhparser
tarafından üretilen farklı türdeki token’ların (kelime türü etiketleri) hangi sözlükle işlem göreceğini belirtmeliyiz.zhparser
kelimeleri isim (n), fiil (v), sıfat (a) gibi farklı POS etiketleriyle işaretler. Burada, isim (n), fiil (v), sıfat (a), bağımsız kelime (i), duygusal kelime (e), sayı (l) gibi etiketli kelimelerisimple
sözlüğüne yönlendiriyoruz.simple
, kelimeleri doğrudan olduğu gibi kabul eden temel bir sözlüktür.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- İhtiyaca göre etiket/sözlük eşlemesini değiştirebilir ya da yenilerini ekleyebilirsiniz.
1
2Not:
zhparser
’ın desteklediği POS etiketleri standart NLP etiketlerinden farklı olabilir; yukarıda en yaygın olanlar listelenmiştir.
5. zhparser ile Tam Metin Arama Yapmak
Yapılandırmadan sonra, zhparser
ile Çince tam metin arama işlemlerine başlayabilirsiniz. Aşağıda temel kullanım adımları verilmiştir.
5.1 Örnek Tablo ve Veri Oluşturma
İlk olarak, Çince metin barındıracak örnek bir tablo oluşturup veri ekleyelim.
Tablo Oluşturun:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Örnek Veri Ekleyin:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理'), ('中文分词是文本处理的重要步骤'), ('zhparser 是一个很好的中文分词工具'), ('ServBay 让本地开发更便捷');
1
2
3
4
5
5.2 Tam Metin Arama İndeksi Oluşturma
Arama performansını özellikle büyük veri kümelerinde artırmak için, tam metin arama yapılacak sütunda indeks oluşturmanız tavsiye edilir. tsvector
türünde sütunlar için genellikle GIN (Genelleştirilmiş Ters Dizin) önerilir; bu tam metin sorguları için son derece etkilidir.
GIN İndeksi Oluşturun:
content
sütununda GIN endeksi oluşturuyoruz. Bu işlem sırasında,content
metninito_tsvector('chinese', content)
iletsvector
tipine dönüştürüyor ve daha önce oluşturduğunuz “chinese” yapılandırmasını (ve böylecezhparser
'ı) kullanıyoruz.sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 Tam Metin Arama Sorgusu
Artık anahtar kelimeleri to_tsquery
ile sorgu biçimine dönüştürüp, @@
işleciyle tsvector
tipindeki indeksli sütunda sorgulama yapabilirsiniz.
Arama Sorgusu: Örneğin, "中文" ve "分词" bulunan belgeleri aramak için:
sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- İsteğe bağlı: kesme sonucu inceleme FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5
6Bu sorgu, 2 ve 3 numaralı id'lere sahip belgeleri döndürür; çünkü içerikleri "中文" ve "分词" içerir.
Ayrıca farklı sorgular da deneyebilirsiniz:
- “ServBay” içeren belgeler:sql(Sonuç: id’si 4 olan kayıt)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1 - “自然语言处理” içeren belgeler:sql(Sonuç: id’si 1 olan kayıt. Burada, "自然语言处理" bir bütün olarak veya bölünebilir—bu, kesme modunuza ve sözlük yapılandırmanızdaki kayıtlara bağlıdır.)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');
1
- “ServBay” içeren belgeler:
6. ServBay’in Dahili scws Özelliğiyle Özel Sözlük Oluşturma
ServBay, scws
kütüphanesini entegre olarak sunar; zhparser
, scws sözlük dosyalarını ve sizin oluşturduğunuz özel sözlükleri kullanacak şekilde yapılandırılabilir. Bu özellikle alanınıza özgü terimler veya yeni kelimeler için daha iyi kelime ayrıştırma doğruluğu sağlar.
6.1 Özel Sözlük Dosyası Oluşturma
Özel Sözlük Dosyasını Oluşturun veya Düzenleyin: ServBay,
scws
özel sözlük dosyalarını/Applications/ServBay/etc/scws/
klasöründe bulundurmanızı önerir.custom_dict.txt
adında bir dosya oluşturun (varsa düzenleyin).bash# Terminalden dosya oluşturma veya düzenleme nano /Applications/ServBay/etc/scws/custom_dict.txt
1
2Kelime Ekleyin: Her satıra,
zhparser
'ın bağımsız kelime olarak algılamasını istediğiniz bir terim girin; örneğin:plaintext自然语言处理 中文分词 ServBay 本地开发环境
1
2
3
4Kaydedin ve dosyadan çıkın.
6.2 zhparser'ı Özel Sözlükle Yapılandırma
zhparser
'a bu özel sözlük dosyasını kullandırmalısınız.
zhparser.dict_path
Parametresini Ayarlayın: PostgreSQL oturumunuzda aşağıdaki komutla zhparser’ın sözlük yolunu tanımlayın:sqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- Yolun doğru ve PostgreSQL kullanıcısı için okunabilir olduğundan emin olun.
1
2Not:
SET
ile yapılan ayarlar yalnızca o oturumda etkilidir. Sürekli/tüm bağlantılarda kalıcı olması için PostgreSQL ayar dosyasıpostgresql.conf
’azhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
satırını ekleyip PostgreSQL’i yeniden başlatmalısınız (ServBay arayüzünden). Yerel geliştirme ve testteSET
kullanmak genellikle yeterlidir.
6.3 Sözlükleri Yeniden Yükleme
Sözlük dosyanızı düzenlediğinizde, değişikliğin aktif olabilmesi için zhparser’a sözlükleri yeniden yükletmeniz gerekir.
Yeniden Yükleme Fonksiyonunu Çağırın:
sqlSELECT zhprs_reload_dict();
1Bu fonksiyon çalıştıktan sonra, sonraki kelime ayrıştırma işlemleri yeni sözlükle yapılır.
7. Kelime Ayırma Modunu Ayarlama
zhparser
, kesme ayrıntısını belirleyen çeşitli modları destekler. En sık kullanılan kontrol parametresi zhparser.seg_with_duality
’dir.
7.1 Kesme Modunu Ayarlama
zhparser.seg_with_duality
Parametresini Ayarlayın:true
olarak ayarlanırsa: “İkili kelime ayırma” modu etkinleşir; bu, daha ince taneli kelime ayrışımı sağlar ve arama geri çağırma oranını (daha fazla eşleşen belge bulma olasılığı) yükseltir. Örneğin, "自然语言处理" "自然", "语言", "处理", "自然语言", "语言处理" gibi parçalara ayrılabilir.sqlSET zhparser.seg_with_duality = true;
1false
olarak ayarlanırsa: Sözlükteki en uzun eşleşmeye göre daha kaba (iri taneli) kelime ayrıştırma uygulanır ve arama doğruluğu artar. "自然语言处理", sözlükte varsa yalnızca tek kelime olarak algılanır.sqlSET zhparser.seg_with_duality = false;
1
postgresql.conf
üzerinden global olarak da değiştirebilirsiniz.
8. Sık Sorulan Sorular (SSS)
- S:
CREATE EXTENSION zhparser;
komutu uzantıyı bulamıyor, hata veriyor? C: ServBay’in PostgreSQL paketinin doğru şekilde kurulup çalıştığından emin olun. ServBay,zhparser
'ın kütüphane dosyalarını PostgreSQL’in eklenti dizinine otomatik olarak yerleştirir. Sorun sürerse, ServBay ve PostgreSQL kurulumunuzu gözden geçirin veya ServBay’i yeniden başlatın. - S: Özel sözlük çalışmıyor, etkili olmuyor? C: Şu noktaları kontrol edin:
zhparser.dict_path
parametresinin sözlük dosyası yolunu (/Applications/ServBay/etc/scws/custom_dict.txt
) doğru gösterdiğinden emin olun (yol büyük-küçük harfe duyarlıdır).zhparser.dict_path
ayarından sonraSELECT zhprs_reload_dict();
ile sözlüğü yeniden yüklediniz mi?- Sözlük dosyanızın formatı doğru mu? (Her satırda yalnızca bir kelime)
- Yeni veritabanı oturumu açtıysanız,
SET zhparser.dict_path = ...;
komutunu tekrar girdiniz mi veya ayarıpostgresql.conf
'a ekleyip PostgreSQL’i yeniden başlattınız mı? - PostgreSQL kullanıcısının sözlük dosyasını okuyabildiğinden emin olun.
- S: Tam metin arama sonuçları beklediğim gibi değil? C: Metin arama konfigürasyonunuzda (“chinese”) kelime türlerinin doğru sözlükle eşleştiğini kontrol edin.
zhparser.seg_with_duality
parametresini değiştirip farklı sonuçlar alıyor musunuz bakın. Sorguladığınız metnin nasıl ayrıştırıldığını görmek içinSELECT to_tsvector('chinese', 'Çince metniniz');
komutunu kullanın; bu, hata ayıklamaya yardımcı olur. Arama sorgunuzdaki anahtar kelime ve mantıksal operatörlerin (&
,|
,!
) doğru kullanıldığını gözden geçirin. - S: Tam metin arama hızı yavaş? C:
to_tsvector(...)
fonksiyonu ile indeks oluşturduğunuzdan (GIN indeksi) emin olun. Büyük veri kümelerinde PostgreSQL’in başka ayarlarını optimize etmeniz veya ilave indeksleme teknikleri kullanmanız gerekebilir.
9. Sonuç
ServBay sayesinde, PostgreSQL üzerinde zhparser
ile yüksek performanslı Çince tam metin aramalarını hızlı ve kolayca kurabilirsiniz. Birkaç basit adımda uzantıyı etkinleştirir, metin arama yapılandırmasını ayarlar ve ServBay’in dahili scws
desteğiyle özel sözlükler tanımlayabilirsiniz. zhparser
'ın temel işleyişini ve yapılandırmasını kavrarsanız, yerel geliştirme ortamınızda Çince metin işleme kabiliyetlerinizi ciddi biçimde geliştirir; Çince içerikli uygulamalarınızı sağlam bir zemin üzerine inşa edebilirsiniz.