Mengaktifkan Carian Teks Penuh Cina PostgreSQL dalam ServBay Menggunakan pg_jieba
Pengenalan
Bagi bahasa seperti Inggeris, fungsi carian teks penuh terbina dalam PostgreSQL biasanya berfungsi dengan baik menggunakan analisis leksikal berdasarkan ruang kosong dan tanda baca. Namun, untuk teks Bahasa Cina yang tidak menggunakan ruang kosong sebagai pemisah semula jadi, alat segmentasi (Segmentation) khusus diperlukan bagi membahagikan rangkaian aksara Cina kepada perkataan yang bermakna.
pg_jieba
ialah ekstensi pihak ketiga untuk pangkalan data PostgreSQL yang mengintegrasikan pustaka segmentasi perkataan Cina yang popular, Jieba (结巴分词). Dengan pg_jieba
, anda dapat melaksanakan proses segmentasi perkataan Cina dengan cekap dan tepat terus dalam PostgreSQL, membolehkan anda membina keupayaan carian teks penuh Bahasa Cina yang mantap.
Sebagai persekitaran pembangunan web tempatan yang bersepadu, ServBay telah membekalkan ekstensi pg_jieba
secara pra-pemasangan. Ini menghapuskan keperluan proses pemasangan dan kompilasi yang rumit, membolehkan anda membangunkan dan menguji carian teks penuh Bahasa Cina secara tempatan dengan lebih pantas.
Dokumentasi ini menerangkan langkah demi langkah cara mengaktifkan, mengkonfigurasi, dan menggunakan ekstensi pg_jieba
dalam persekitaran ServBay.
Prasyarat
Sebelum menggunakan pg_jieba
, sila pastikan perkara berikut telah disiapkan:
- ServBay telah dipasang pada sistem macOS anda dan perkhidmatan PostgreSQL telah berjaya dijalankan.
- Anda memahami operasi asas PostgreSQL, termasuk cara untuk menyambung ke pangkalan data dan menjalankan arahan SQL.
Memasang dan Mengaktifkan pg_jieba
Ekstensi pg_jieba
telah dibekalkan bersama pemasangan PostgreSQL di dalam ServBay. Anda tidak perlu memuat turun atau kompilasi secara manual; hanya perlu melaksanakan arahan SQL yang mudah dalam pangkalan data sasaran untuk mengaktifkannya.
Langkah-langkah untuk mengaktifkan ekstensi pg_jieba
adalah seperti berikut:
Sambung ke Pangkalan Data PostgreSQL anda: Buka aplikasi Terminal dan gunakan alat baris perintah
psql
untuk menyambung ke pangkalan data PostgreSQL anda. Sila gantikanyour_username
dengan nama pengguna PostgreSQL anda, danyour_database
dengan nama pangkalan data yang anda guna. Secara lalai, pengguna dan pangkalan data untuk ServBay ialahservbay
ataupostgres
.bashpsql -U your_username -d your_database
1Sebagai contoh menggunakan pengguna dan pangkalan data lalai:
bashpsql -U servbay -d servbay
1Cipta dan Aktifkan Ekstensi
pg_jieba
: Dalam antara mukapsql
, jalankan arahan SQL berikut:sqlCREATE EXTENSION pg_jieba;
1Jika ekstensi telah diwujudkan sebelum ini, melaksanakan arahan ini sekali lagi mungkin akan menghasilkan mesej ralat. Ini adalah keadaan biasa.
Sahkan Ekstensi
pg_jieba
Telah Diaktifkan: Jalankan arahan berikut untuk menyenaraikan ekstensi yang telah dipasang dalam pangkalan data semasa:sql\dx
1Jika
pg_jieba
disenaraikan, bermakna ekstensi telah berjaya diaktifkan.
Mengkonfigurasi pg_jieba untuk Carian Teks Penuh Bahasa Cina
Selepas mengaktifkan ekstensi pg_jieba
, anda perlu mengkonfigurasi sistem carian teks PostgreSQL dengan menetapkan pg_jieba
sebagai pemapar perkataan (segmenter).
Menetapkan Konfigurasi Carian Teks (Text Search Configuration)
Konfigurasi carian teks mentakrifkan cara memproses dokumen untuk carian teks penuh, termasuk pemapar (parser) yang akan digunakan untuk segmentasi serta cara menangani pelbagai jenis token.
Cipta Konfigurasi Carian Teks Baharu: Cipta satu konfigurasi carian teks bernama
chinese
dan tetapkanpg_jieba
sebagai parser.sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = pg_jieba);
1Konfigurasi ini memberitahu PostgreSQL untuk menggunakan
pg_jieba
sebagai pemapar perkataan dalam pemprosesan teks carian.Menambah Mapping untuk Hasil Segmentasi: Parser
pg_jieba
menghasilkan pelbagai jenis token berasaskan penandaan tatabahasa (part of speech). Untuk membolehkan token-token ini diindeks dan dicari, anda perlu memetakan mereka ke kamus tertentu (dictionary). Dalam contoh ini, tag-tag utama seperti kata nama (n), kata kerja (v), kata adjektif (a) dan sebagainya dipetakan ke kamus terbina dalam PostgreSQL iaitusimple
. Kamussimple
tidak melakukan sebarang penukaran tambahan, sebaliknya menggunakan token asli yang dikeluarkan oleh parser (pg_jieba
).sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple;
1n,v,a,i,e,l
mewakili beberapa kod part of speech yang mungkin dikenalpasti olehpg_jieba
. Anda boleh menambah atau mengubah kod ini mengikut keperluan. Antara kod lazim termasuk:n
: Kata namav
: Kata kerjaa
: Kata adjektifi
: Idiome
: Kata serul
: Peribahasa/frasanr
: Nama orangns
: Nama tempatnt
: Organisasi/institusinz
: Nama khas lainm
: Nomborq
: Penentu/ukurant
: Kata masas
: Kata tempatf
: Kata arahp
: Preposisic
: Konjungsiu
: Partikel bantuxc
: Kata fungsi lainw
: Tanda bacaeng
: Bahasa Inggerisx
: Karakter non-morfonemik
Secara umumnya, anda hanya ingin mengindeks dan mencari perkataan yang benar-benar bermakna seperti kata nama, kata kerja, dan kata adjektif.
Contoh Carian Teks Penuh menggunakan pg_jieba
Setelah konfigurasi selesai, anda boleh menjalankan carian teks penuh Bahasa Cina menggunakan pg_jieba
. Berikut adalah contoh mudah:
Membina Jadual dan Data Contoh
Pertama, cipta satu jadual untuk menyimpan dokumen dan masukkan beberapa contoh teks Bahasa Cina.
Cipta Jadual:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Masukkan Data Contoh:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理技术'), ('中文分词是文本处理的重要步骤'), ('pg_jieba是一个很好的中文分词工具,它基于结巴分词库'), ('ServBay 让本地开发变得简单高效');
1
2
3
4
5
Membina Indeks Carian Teks Penuh
Untuk meningkatkan kecekapan carian, khususnya bagi data berskala besar, sangat disarankan membina indeks pada lajur yang digunakan untuk carian teks penuh. Jenis indeks GIN (Generalized Inverted Index) PostgreSQL sangat sesuai untuk tujuan ini.
Cipta Indeks GIN: Gunakan fungsi
to_tsvector
dengan konfigurasichinese
tadi pada lajurcontent
untuk membina indeks GIN.to_tsvector('chinese', content)
akan menukar kandungan lajur kepada jenis datatsvector
menggunakan peraturan segmentasipg_jieba
.sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
Menjalankan Query Carian Teks Penuh
Kini anda boleh menjalankan kueri carian teks penuh menggunakan fungsi to_tsquery
bersama operator @@
. to_tsquery('chinese', 'your query')
menukar frasa carian anda kepada jenis data tsquery
berdasarkan konfigurasi carian teks. Operator @@
bertugas menentukan padanan antara tsvector
dan tsquery
.
Jalankan Kueri Carian: Cari dokumen yang mengandungi kedua-dua perkataan “中文” dan “分词”.
sqlSELECT id, content FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5Simbol
&
dalamtsquery
bermaksud AND logik. Anda juga boleh menggunakan|
bagi OR logik dan!
bagi NOT logik.Sebagai contoh, mencari dokumen yang mengandungi mana-mana perkataan “ServBay” atau “开发”:
sqlSELECT id, content FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay | 开发');
1
2
3
4
5
Kamus Tersuai
pg_jieba
menggunakan kamus lalai pustaka Jieba untuk segmentasi. Dalam senario tertentu, anda mungkin mahu menambah kosa kata tersuai (misalnya istilah teknikal, nama produk, dll.) untuk meningkatkan ketepatan pemisahan perkataan.
Anda boleh membina fail kamus tersuai dan mengkonfigurasi pg_jieba
supaya menggunakannya.
Menambah Kosa Kata Tersuai
Cipta Fail Kamus Tersuai: Cipta fail teks contohnya:
plaintext/Applications/ServBay/etc/pg_jieba/custom_dict.txt
1Ini hanyalah contoh lokasi; anda boleh menyesuaikannya bergantung pada struktur pemasangan dan keutamaan anda.
Tambah Kosa Kata dalam Fail Kamus Tersuai: Gunakan editor teks untuk membuka
custom_dict.txt
, dan tambah satu entri perkataan pada setiap baris. Pilihan tambahan adalah kekerapan kemunculan (frequency) dan penandaan tata bahasa (tag), dipisahkan dengan ruang. Format:perkataan [kekerapan [tag]]
. Nilai kekerapan lebih tinggi akan mengutamakan pemisahan perkataan tersebut.plaintext自然语言处理 3 n ServBay 5 eng 结巴分词库 3 n
1
2
3Contohnya,
3 n
bermaksud "自然语言处理" diberi kekerapan 3 dan bertag nama kata (n).5 eng
bermaksud "ServBay" kekerapan 5, bertag Bahasa Inggeris (eng).Konfigurasikan
pg_jieba
untuk Menggunakan Kamus Tersuai: Dalam sesi PostgreSQL anda, tetapkan parameterpg_jieba.dict_path
ke direktori yang mengandungi fail kamus tersuai anda. Nota: Kebiasaannya,pg_jieba.dict_path
menunjuk ke direktori lokasi kamus, bukan kepada fail tunggal. Jika fail kamus tersuai diletakkan bersama-sama kamus utama, anda mungkin tidak perlu menukar parameter ini, atau konfigurasi dari pakej ServBay mungkin telah menentukannya. Rujuk dokumentasi ServBay atau ujian sendiri bagi memastikan seting yang betul.Jika konfigurasi ServBay membenarkan menetapkan fail kamus tersuai secara terus, atau jika fail tersebut telah diletakkan di direktori yang diimbas secara lalai oleh
pg_jieba
, maka arahanSET
berikut mungkin tidak diperlukan, ataupun sintaksnya berbeza. Arahan di bawah berdasarkan rujukan dari dokumentasi asal, sila sesuaikan mengikut konfigurasi ServBay anda:sqlSET pg_jieba.dict_path = '/Applications/ServBay/etc/pg_jieba/'; -- Anggapkan kamus utama terletak di direktori ini dan 'custom_dict.txt' juga diletakkan di sini
1Atau, jika
pg_jieba.dict_path
membenarkan penetapan fail tersuai secara langsung (perilaku ini bukan lalai, sila periksa dokumentasi ServBay):sqlSET pg_jieba.dict_path = '/Applications/ServBay/etc/pg_jieba/custom_dict.txt'; -- Gunakan dengan berhati-hati dan sahkan dengan konfigurasi semasa ServBay
1Penting: Arahan
SET
hanya berkuat kuasa untuk sesi pangkalan data semasa. Untuk menjadikannya kekal, ubah parameterpg_jieba.dict_path
dalam fail konfigurasi PostgreSQLpostgresql.conf
.
Memuat Semula Kamus
Selepas mengubah fail kamus tersuai atau seting pg_jieba.dict_path
, anda perlu memaklumkan pg_jieba
untuk memuat semula kamus agar perubahan berkuat kuasa.
Muat Semula Kamus: Jalankan fungsi SQL berikut:
sqlSELECT jieba_reload_dict();
1Setelah berjaya, operasi segmentasi perkataan berikutnya akan menggunakan kamus terkini.
Soalan Lazim (FAQ)
S: Apa yang perlu dilakukan jika mendapat ralat "extension "pg_jieba" is not available" semasa menjalankan
CREATE EXTENSION pg_jieba;
? J: Ini biasanya bermaksud fail ekstensipg_jieba
tidak dipasang dengan betul dalam direktori ekstensi PostgreSQL, atau PostgreSQL tidak menjumpainya. Dalam ServBay,pg_jieba
telah disertakan secara lalai. Pastikan anda menyambung ke instans PostgreSQL yang disediakan oleh ServBay serta pemasangan ServBay tidak rosak. Jika masalah berterusan, cuba mulakan semula ServBay atau semak fail log ServBay.S: Apa yang perlu dibuat jika kamus tersuai tidak berfungsi? J: Sila periksa perkara berikut:
- Pastikan laluan fail kamus tersuai adalah betul dan pengguna PostgreSQL mempunyai kebenaran membaca fail berkenaan.
- Format fail kamus tersuai adalah betul: satu perkataan setiap baris, pilihan kekerapan dan tag dipisah ruang.
- Anda telah menetapkan parameter
pg_jieba.dict_path
dengan betul. Ingat, arahanSET
hanya berkuat kuasa untuk sesi semasa; untuk kegunaan berterusan, ubah dalampostgresql.conf
. - Pastikan fungsi
SELECT jieba_reload_dict();
telah dipanggil bagi memuat semula kamus. - Jika telah mengubah
postgresql.conf
, mulakan semula perkhidmatan PostgreSQL.
S: Bagaimana jika hasil carian teks penuh tidak tepat? J: Ketepatan carian teks penuh berkait rapat dengan keberkesanan segmentasi dan pembinaan query.
- Semak mutu segmentasi: Gunakan fungsi
ts_debug('chinese', 'teks anda')
untuk melihat cara teks tertentu telah disegmentasikan oleh konfigurasichinese
. Ini membantu anda mengenal pasti sama adapg_jieba
dan kamus tersuai anda telah berfungsi dengan sewajarnya. - Optimumkan konfigurasi segmentasi: Laraskan jenis token dalam arahan
ALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR ... WITH simple;
untuk tidak memasukkan token yang tidak penting seperti partikel dan tanda baca. - Optimumkan query carian: Sahkan bahawa perkataan carian dan operator logik (
&
,|
,!
) dalamto_tsquery
telah dinyatakan dengan betul menurut niat carian anda.
- Semak mutu segmentasi: Gunakan fungsi
Rumusan
pg_jieba
ialah alat yang sangat berkuasa untuk merealisasikan carian teks penuh Bahasa Cina dalam PostgreSQL. Dengan bantuan ekstensi pg_jieba
sedia ada dalam ServBay, pembangun boleh mengaktifkan dan mengkonfigurasi fungsi segmentasi Bahasa Cina dalam persekitaran tempatan dengan mudah. Dengan mengikuti panduan ini, anda kini seharusnya tahu cara memasanpg_jieba` dalam ServBay, membina dan mengkonfigurasi carian teks, menjalankan query carian teks penuh, serta menggunakan kamus tersuai untuk mengoptimumkan proses segmentasi. Terapkan teknik-teknik ini dalam projek anda untuk meningkatkan keupayaan carian kandungan Bahasa Cina dengan ketara.