我從來沒有嘗試過,但只要您準備好從源代碼編譯PostgreSQL,您應該可以創建一個捷克雪球詞幹分析器。
有一個在src/backend/snowball/README
一個解釋:
的文件下src/backend/snowball/libstemmer/
和 src/include/snowball/libstemmer/
都直接取自他們的libstemmer_c 分配,只有文件包含的一些小的調整。注意 大多數這些文件實際上是派生文件,而不是主源。 主要來源是Snowball語言,並可通過 與Snowball項目的Snowball-to-C編譯器一起使用。我們選擇 在PostgreSQL發行版中包含派生文件,因爲大多數 安裝不會提供可用的Snowball編譯器。
要更新一個新的雪球libstemmer_c
分佈PostgreSQL的來源:由"header.h"
複製*.c
文件libstemmer_c/src_c/
到src/backend/snowball/libstemmer
與更換"../runtime/header.h"
,例如
for f in libstemmer_c/src_c/*.c
do
sed 's|\.\./runtime/header\.h|header.h|' $f >libstemmer/`basename $f`
done
(或者,如果您從主Snowball重新生成stemmer文件個來源,只是省略從雪球編譯器開關"-r ../runtime"
。)
複製*.c
文件libstemmer_c/runtime/
到 src/backend/snowball/libstemmer
,並對其進行編輯,以去除直接夾雜系統頭的 如<stdio.h>
–他們應該只包括"header.h"
。 (這去除可以避免在某些平臺上,其中<stdio.h>
是largefile編譯選項敏感的可移植性問題。)
複製*.h
文件libstemmer_c/src_c/
和libstemmer_c/runtime/
至src/include/snowball/libstemmer
。在撰寫本文時,頭文件 不需要任何更改。
檢查是否添加或刪除了任何stemmer模塊。如果是這樣,編輯 的OBJS
列表Makefile
的#include
的在dict_snowball.c
列表,並在dict_snowball.c
的 stemmer_modules[]
表。
stopwords/
中的各種停用字詞文件必須單獨從snowball.tartarus.org網站上的頁面下載 。 小心這些文件必須以UTF-8編碼存儲。
現在有可用here捷克雪球詞幹,這是該項目做出了貢獻。沒有可用的停用詞字典,但我相信你可以找到一個或自己創建一個詞典。
真正的工作是安裝Snowball並使用Snowball-to-C編譯器創建C和頭文件以添加到PostgreSQL源文件中。 這些文件應該保持穩定,所以升級到新的PostgreSQL版本應該不會很困難。
如果您願意完成這項工作,但不想每次修補PostgreSQL並從源代碼構建它,那麼您也可以考慮向PostgreSQL提交補丁。只要stemmer運行良好,我不認爲你會有很大的阻力(但補丁提交過程仍然很乏味)。
感謝您的信息! – wilima
我按照指導原則做了這個提交(又名補丁):[postgres_snowball_czech](https://github.com/datlowe/postgres_snowball_czech/commit/4363325f719a463fce04c04cbcdcc7e625cdbca5)派生的'docker'圖像可以在這裏找到:https:// github .com/datlowe/postgres-pgq-tsearch-czech – dedek
https://wiki.postgresql.org/wiki/Submitting_a_Patch –