1、mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法( http://technology.chtsai.org/mmseg/ ?)實現的中文分詞器,并實現 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。
2、MMSeg 算法有兩種分詞方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四個規則過慮。官方說:詞語的正確識別率達到了 98.41%。mmseg4j 已經實現了這兩種分詞算法。
- 1.5版的分詞速度simple算法是 1100kb/s左右、complex算法是 700kb/s左右,(測試機:AMD athlon 64 2800+ 1G內存 xp)。
- 1.6版在complex基礎上實現了最多分詞(max-word)。“很好聽” -> "很好|好聽"; “中華人民共和國” -> "中華|華人|共和|國"; “中國人民銀行” -> "中國|人民|銀行"。
- 1.7-beta 版, 目前 complex 1200kb/s左右, simple 1900kb/s左右, 但內存開銷了50M左右. 上幾個版都是在10M左右.
作者博客: http://blog.chenlb.com/
因最近要做一個全文檢索的工具,在尋找中文分詞組件時,在庖丁解牛和mmseg4j中選擇了mmseg4j.
這個是根據java版本翻譯過來的.
欲正確運行lucene,需修改lucene2.9.2的源碼Lucene.Net.Index.ReusableStringReader中的Read()修改為:
int
r = -1;
|
???????????
if
(upto < s.Length)
|
???????????
{
|
???????????????
r = (
int
)s[upto];
|
???????????????
++upto;
|
???????????
}
|
???????????
return
r;
|
,否則在搜索時會找不到結果。
上圖是測試運行結果。
測試代碼如下:
?
String txt
=
"
京華時報1月23日報道 昨天,受一股來自中西伯利亞的強冷空氣影響,本市出現大風降溫天氣,白天最高氣溫只有零下7攝氏度,同時伴有6到7級的偏北風。
"
;
IndexWriter iw
=
new
IndexWriter(GetDir, GetAna);
Document doc
=
new
Document();
doc.Add(
new
Field(
"
txt
"
, txt, Field.Store.YES, Field.Index.ANALYZED));
iw.AddDocument(doc);
iw.Commit();
iw.Optimize();
iw.Close();
Console.WriteLine();
Console.WriteLine(
"
indexer ok.\r\n\r\n
"
);
IndexSearcher searcher
=
new
IndexSearcher(GetDir,
true
);
QueryParser qp
=
new
QueryParser(
"
txt
"
, GetAna);
Query q
=
qp.Parse(
"
冷空氣
"
);
//
2008年底
Console.WriteLine(
"
query>{0}
"
, q);
TopDocs tds
=
searcher.Search(q,
10
);
Console.WriteLine(
"
======size:
"
+
tds.totalHits
+
"
========
"
);
foreach
(ScoreDoc sd
in
tds.scoreDocs)
{
Console.WriteLine(sd.score);
Console.WriteLine(searcher.Doc(sd.doc).Get(
"
txt
"
));
}
Console.WriteLine(
"
ok.....
"
);
?
歡迎大家使用,我將繼續發布一些關于lucene構建全文檢索在應用方面的文章。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

