java mmseg4j 使用_中文分詞 mmseg4j 在 lucene 中的使用示例 | 學步園

mmseg4j 發布也有一段時間了,前些日子忙著發布新的版本,修正 bug 之類的。使用示例一直拖到現在,其實 svn 上的 test 有使用 lucene 例子。如果你了解 lucene ,就不用例子也可以很方便與它集成。

mmseg4j 有幾個 analyzer:SimpleAnalyzer、ComplexAnalyzer、MaxWordAnalyzer、MMSegAnalyzer。前面三個都是繼承 MMSegAnalyzer,MMSegAnalyzer 默認使用 max-word 方式分詞。這些 analyzer 都有無參數的構造函數,還有一個帶詞庫目錄為參數的構造函數。怎麼用也沒多少可說的,看下 svn 里 test:

package com.chenlb.mmseg4j.lucene;

import java.io.IOException;

import junit.framework.TestCase;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.CorruptIndexException;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.queryParser.ParseException;

import org.apache.lucene.queryParser.QueryParser;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.TopDocs;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.RAMDirectory;

import com.chenlb.mmseg4j.analysis.ComplexAnalyzer;

import com.chenlb.mmseg4j.analysis.MaxWordAnalyzer;

import com.chenlb.mmseg4j.analysis.SimpleAnalyzer;

public class LuceneUseSimpleAnalyzerTest extends TestCase {

Directory dir;

Analyzer analyzer;

@Override

protected void setUp() throws Exception {

String txt = "京華時報1月23日報道 昨天,受一股來自中西伯利亞的強冷空氣影響,本市出現大風降溫天氣,白天最高氣溫只有零下7攝氏度,同時伴有6到7級的偏北風。";

//txt = "2008年底發了資金嗎";

analyzer = new SimpleAnalyzer();

analyzer = new ComplexAnalyzer();

//analyzer = new MaxWordAnalyzer();

dir = new RAMDirectory();

IndexWriter iw = new IndexWriter(dir, analyzer);

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();

}

public void testSearch() {

try {

IndexSearcher searcher = new IndexSearcher(dir);

QueryParser qp = new QueryParser("txt", analyzer);

Query q = qp.parse("西伯利亞"); //2008年底

System.out.println(q);

TopDocs tds = searcher.search(q, 10);

System.out.println("======size:"+tds.totalHits+"========");

for(ScoreDoc sd : tds.scoreDocs) {

System.out.println(sd.score);

System.out.println(searcher.doc(sd.doc).get("txt"));

}

} catch (CorruptIndexException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (ParseException e) {

e.printStackTrace();

}

}

}

運行結果:

2009-4-26 22:41:02 com.chenlb.mmseg4j.Dictionary getDefalutPath

信息: look up in mmseg.dic.path=null

2009-4-26 22:41:02 com.chenlb.mmseg4j.Dictionary getDefalutPath

信息: look up in user.dir=M:\workspace\mmseg4j/data

2009-4-26 22:41:02 com.chenlb.mmseg4j.Dictionary loadDic

信息: chars loaded time=391ms, line=12638, on file=M:\workspace\mmseg4j\data\chars.dic

2009-4-26 22:41:02 com.chenlb.mmseg4j.Dictionary loadDic

信息: words loaded time=16ms, line=1, on file=M:\workspace\mmseg4j\data\words-my.dic

2009-4-26 22:41:06 com.chenlb.mmseg4j.Dictionary loadDic

信息: words loaded time=3406ms, line=157202, on file=M:\workspace\mmseg4j\data\words.dic

2009-4-26 22:41:06 com.chenlb.mmseg4j.Dictionary loadDic

信息: sort time=0ms

2009-4-26 22:41:06 com.chenlb.mmseg4j.Dictionary loadDic

信息: load dic use time=3844ms

2009-4-26 22:41:06 com.chenlb.mmseg4j.Dictionary loadUnit

信息: unit loaded time=16ms, line=22, on file=M:\workspace\mmseg4j\data\units.dic

txt:西伯利亞

======size:1========

0.047945753

京華時報1月23日報道 昨天,受一股來自中西伯利亞的強冷空氣影響,本市出現大風降溫天氣,白天最高氣溫只有零下7攝氏度,同時伴有6到7級的偏北風。

上面的運行環境是 lucene 2.4 的,如果你要再低版本的 lucene 運行,請看別一篇博客:中文分詞 mmseg4j 1.7.2 版發布

如果你想在 solr 中使用 mmseg4j,請看:solr 中文分詞 mmseg4j 使用例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值