postgres中的中文分詞zhparser
postgres中的中文分詞方法
基本查了下網絡,postgres的中文分詞大概有兩種方法:
- Bamboo
- zhparser
其中的Bamboo安裝和使用都比較復雜,所以我選擇的是zhparser
zhparse基於scws
scws是簡易中文分詞系統的縮寫,它的原理其實很簡單,基於詞典,將文本中的內容按照詞典進行分詞,提取關鍵字等。github上的地址在這里。它是xunsearch的核心分詞系統。
而zhparser是基於scws來做的postgres的擴展。
安裝
基本按照zhparser 中的步驟就可以了。
使用
在postgres.conf中你可以設置下面的參數:
zhparser.punctuation_ignore = f
zhparser.seg_with_duality = f
zhparser.dict_in_memory = f
zhparser.multi_short = f
zhparser.multi_duality = f
zhparser.multi_zmain = f
zhparser.multi_zall = f
還可以設置自有詞典
zhparser.extra_dicts = 'dict_extra.txt,mydict.xdb'
雖然項目文檔說用txt也是可以的,但是我自己嘗試過的時候,自有詞典只能使用xdb
sql使用
按照文檔說明
CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;
在這三步之后,你就創建了一個testzhcfg的解析器
to_tsvector, to_tsquery 其實都是有第一個參數的,第一個參數表示解析器是什么。比如你想要進行文本搜索,可以使用下面的語句:
SELECT id FROM question_view
WHERE to_tsvector('testzhcfg', content) @@ to_tsquery('testzhcfg', '寶馬') AND status = 1 ORDER BY id DESC
這個語句是基於視圖question_view的