zoukankan      html  css  js  c++  java
  • 中文分词 mmseg4j 在 lucene 中的使用示例

    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 运行,请看别一篇博客:中文分词 mmseg4j 1.7.2 版发布

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

  • 相关阅读:
    基础GIT命令
    初始继承和多态。
    Servlet随笔
    初识springboot
    HBase JavaAPI
    HBase安装
    使用Eclipse来操作HDFS的文件
    hadoop常用命令
    Eclipse集成Hadoop插件
    Hadoop集群测试wordcount程序
  • 原文地址:https://www.cnblogs.com/wycg1984/p/1567658.html
Copyright © 2011-2022 走看看