Lucene中文分析器的中文分詞準確性和效能比較

2021-08-29 21:32:58 字數 2294 閱讀 6647

lucene中文分析器的中文分詞準確性和效能比較

對幾種中文分析器,從分詞準確性和效率兩方面進行比較。分析器依次為:standardanalyzer、chineseanalyzer、cjkanalyzer、ik_canalyzer、mik_canalyzer、mmanalyzer(je分詞)、paodinganalyzer。

單純的中文分詞的實現一般為按字索引或者按詞索引。按字索引顧名思義,就是按單個字建立索引。按詞索引就是按詞嘍,根據詞庫中的詞,將文字進行切分。車東的交叉雙字分割或者叫二元分詞我覺得應該算是按字索引的改進,應該還是屬於字索引的範疇吧。

分詞準確性的評估比較難,很難有統一的標準,不同應用的要求也不同,這個統一以「2023年8月8日晚,舉世矚目的北京第二十九屆奧林匹克運動會開幕式在國家體育場隆重舉行。」為例說明。

分詞效率,統一使用《射鵰英雄傳》的全文文字為例說明。呵呵。對於按詞索引的分析器,使用統一的基本詞庫,詞彙量為227,719個。在開發環境下執行,效能不準確,但可比較相對值。

分析器:

按字standardanalyzer

lucene自帶的標準分析器。

chineseanalyzer

lucene contrib中附帶的分析器,與standardanalyzer類似。注意是類似啊,還是有區別的。

cjkanalyzer

lucene contrib中附帶的二元分詞

按詞ik_canalyzer、mik_canalyzer

使用版本為2.0.2

mmanalyzer

paodinganalyzer

庖丁解牛。使用版本為2.0.4beta。

分詞準確性:

standardanalyzer

2008/年/8/月/8/日/晚/舉/世/矚/目/的/北/京/第/二/十/九/屆/奧/林/匹/克/運/動/會/開/幕/式/在/國/家/體/育/場/隆/重/舉/行/

一元分詞,沒什麼好說的。

chineseanalyzer

年/月/日/晚/舉/世/矚/目/的/北/京/第/二/十/九/屆/奧/林/匹/克/運/動/會/開/幕/式/在/國/家/體/育/場/隆/重/舉/行/

還是有區別吧,這是因為chineseanalyzer只對character.lowercase_letter、character.uppercase_letter、和character.other_letter進行了處理,其他型別的都濾掉了。具體可以參見**。

cjkanalyzer

2008/年/8/月/8/日晚/舉世/世矚/矚目/目的/的北/北京/京第/第二/二十/十九/九屆/屆奧/奧林/林匹/匹克/克運/運動/動會/會開/開幕/幕式/式在/在國/國家/家體/體育/育場/場隆/隆重/重舉/舉行/

二元分詞,作為一元分詞的改進,建立的索引小於一元,查詢效率較好,能滿足一般的查詢要求。

paodinganalyzer

2008/年/8/月/8/日/晚/舉世/矚目/舉世矚目/目的/北京/二/第二/十/二十/第二十/九/十九/二十九/九屆/奧林/奧林匹克/運動/運動會/奧林匹克運動會/開幕/開幕式/國家/體育/體育場/隆重/舉行/隆重舉行/

細粒度全切分。對於不在詞典中的詞進行二元分詞。

ik_canalyzer

2023年/2008/年/8月/8/月/8日/8/晚/舉世矚目/舉世/矚目/目的/北京/第二十九屆/第二十九/第二十/第二/二十九/二十/十九/九屆/九/奧林匹克運動會/奧林匹克/奧林/運動會/運動/開幕式/開幕/在國/國家/國/體育場/體育/隆重舉行/隆重/舉行/行/

細粒度全切分。對於不在詞典中的詞進行二元分詞。

mik_canalyzer

2023年/8月/8日/晚/舉世矚目/目的/北京/第二十九屆/奧林匹克運動會/開幕式/在國/國家/體育場/隆重舉行/

最大匹配分詞。和細粒度全切分配合使用。

mmanalyzer

2008/年/8/月/8/日/晚/舉世矚目/北京/第二十/九屆/奧林匹克運動會/開幕式/國家/體育場/隆重舉行/

對於不在字典項的內容,進行一元分詞。

分詞效能(毫秒):

分析器第一次

第二次第三次

分詞數standardanalyzer

chineseanalyzer

cjkanalyzer

paodinganalyzer

ik_canalyzer

mik_canalyzer

mmanalyzer

需要說明的是,ik_canalyzer在效能上對於詞典的敏感度較高。

總結:對於一般性的應用,採用二元分詞法應該就可以滿足需求。如果需要分詞的話,從分詞效果、效能、擴充套件性、還是可維護性來綜合考慮,建議使用庖丁解牛。

Lucene系列 分析器

搜尋的基礎是對文字資訊進行分析,lucene的分析工具在org.apache.lucene.analysis包中。分析器負責對文字進行分詞 語言處理得到詞條,建索引和搜尋的時候都需要用到分析器,兩者應當是同乙個,否則沒法很好的匹配。lucene的分析器往往包括乙個分詞器 tokenizer 和多個過...

Lucene分析器的實現

public abstract class analyzer public int getpositionincrementgap string fieldname string content stringreader reader new stringreader content analyze...

lucene 同義詞分析器

這個分析器用synonymfilter過濾器對standardanalyzer類進行封裝,當向這個過濾器輸入各個項時,會對這些項進行緩衝,並使用棧儲存這些項的同義詞 public class synonymfilter extends tokenfilter publicstatic final s...