博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中文分词 mmseg4j 在 lucene 中的使用示例
阅读量:6713 次
发布时间:2019-06-25

本文共 3469 字,大约阅读时间需要 11 分钟。

原文出处:

mmseg4j 发布也有一段时间了,前些日子忙着发布新的版本,修正 bug 之类的。使用示例一直拖到现在,其实 svn 上的 test 有使用 lucene 例子。如果你了解 lucene ,就不用例子也可以很方便与它集成。

mmseg4j 有几个 analyzer:SimpleAnalyzer、ComplexAnalyzer、MaxWordAnalyzer、MMSegAnalyzer。前面三个都是继承 MMSegAnalyzer,MMSegAnalyzer 默认使用 max-word 方式分词。这些 analyzer 都有无参数的构造函数,还有一个带词库目录为参数的构造函数。怎么用也没多少可说的,看下 svn 里 test:

  1. package com.chenlb.mmseg4j.lucene;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import junit.framework.TestCase;  
  6.   
  7. import org.apache.lucene.analysis.Analyzer;  
  8. import org.apache.lucene.document.Document;  
  9. import org.apache.lucene.document.Field;  
  10. import org.apache.lucene.index.CorruptIndexException;  
  11. import org.apache.lucene.index.IndexWriter;  
  12. import org.apache.lucene.queryParser.ParseException;  
  13. import org.apache.lucene.queryParser.QueryParser;  
  14. import org.apache.lucene.search.IndexSearcher;  
  15. import org.apache.lucene.search.Query;  
  16. import org.apache.lucene.search.ScoreDoc;  
  17. import org.apache.lucene.search.TopDocs;  
  18. import org.apache.lucene.store.Directory;  
  19. import org.apache.lucene.store.RAMDirectory;  
  20.   
  21. import com.chenlb.mmseg4j.analysis.ComplexAnalyzer;  
  22. import com.chenlb.mmseg4j.analysis.MaxWordAnalyzer;  
  23. import com.chenlb.mmseg4j.analysis.SimpleAnalyzer;  
  24.   
  25. public class LuceneUseSimpleAnalyzerTest extends TestCase {  
  26.   
  27.     Directory dir;  
  28.     Analyzer analyzer;  
  29.   
  30.     @Override  
  31.     protected void setUp() throws Exception {  
  32.         String txt = "京华时报1月23日报道 昨天,受一股来自中西伯利亚的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度,同时伴有6到7级的偏北风。";  
  33.         //txt = "2008年底发了资金吗";  
  34.         analyzer = new SimpleAnalyzer();  
  35.         analyzer = new ComplexAnalyzer();  
  36.         //analyzer = new MaxWordAnalyzer();  
  37.         dir = new RAMDirectory();  
  38.         IndexWriter iw = new IndexWriter(dir, analyzer);  
  39.         Document doc = new Document();  
  40.         doc.add(new Field("txt", txt, Field.Store.YES, Field.Index.ANALYZED));  
  41.         iw.addDocument(doc);  
  42.         iw.commit();  
  43.         iw.optimize();  
  44.         iw.close();  
  45.     }  
  46.   
  47.     public void testSearch() {  
  48.         try {  
  49.             IndexSearcher searcher = new IndexSearcher(dir);  
  50.             QueryParser qp = new QueryParser("txt", analyzer);  
  51.             Query q = qp.parse("西伯利亚"); //2008年底  
  52.             System.out.println(q);  
  53.             TopDocs tds = searcher.search(q, 10);  
  54.             System.out.println("======size:"+tds.totalHits+"========");  
  55.             for(ScoreDoc sd : tds.scoreDocs) {  
  56.                 System.out.println(sd.score);  
  57.                 System.out.println(searcher.doc(sd.doc).get("txt"));  
  58.             }  
  59.         } catch (CorruptIndexException e) {  
  60.   
  61.             e.printStackTrace();  
  62.         } catch (IOException e) {  
  63.   
  64.             e.printStackTrace();  
  65.         } catch (ParseException e) {  
  66.   
  67.             e.printStackTrace();  
  68.         }  
  69.     }  
  70.   
  71. }  

运行结果:

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 运行,请看别一篇博客:

如果你想在 solr 中使用 mmseg4j,请看:

转载地址:http://gkelo.baihongyu.com/

你可能感兴趣的文章
CSS Hack整理
查看>>
leetcode 28. Implement strStr()
查看>>
nginx 服务器重启命令,关闭 (转)
查看>>
实用的正则表达式
查看>>
Hibernate中Criteria的完整用法
查看>>
LINUX创建用户的命令
查看>>
Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客
查看>>
POJ 2728 二分+最小生成树
查看>>
[LeetCode] Best Time to Buy and Sell Stock IV
查看>>
nuxt 2.0采坑计之 (引入静态文件css)
查看>>
I/O编程软件题(Java语言)
查看>>
时序逻辑、组合逻辑,我不再怕你了
查看>>
(三)mybatis之对Hibernate初了解
查看>>
git 分支( branch ) 的基本使用
查看>>
HDU 4334 Trouble
查看>>
nginx安装与配置
查看>>
Android 命令设置获取、IP地址、网关、dns
查看>>
弹性碰撞 poj 3684
查看>>
查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by...
查看>>
[SQL in Azure] Windows Azure Virtual Machine Readiness and Capacity Assessment
查看>>