lucene自定义停用词分词器和mmseg中文分词器

本文介绍如何在Lucene中创建自定义分词器MyStopAnalyzer,并演示了使用该分词器去除停用词的过程。此外,还展示了如何利用mmseg4j进行中文分词。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
  1. import java.io.Reader; 
  2. import java.util.Set; 
  3.  
  4. import org.apache.lucene.analysis.Analyzer; 
  5. import org.apache.lucene.analysis.LetterTokenizer; 
  6. import org.apache.lucene.analysis.LowerCaseFilter; 
  7. import org.apache.lucene.analysis.StopAnalyzer; 
  8. import org.apache.lucene.analysis.StopFilter; 
  9. import org.apache.lucene.analysis.TokenStream; 
  10. import org.apache.lucene.util.Version; 
  11. import org.junit.Test; 
  12.  
  13.  
  14. public class MyStopAnalyzer extends Analyzer { 
  15.  
  16.     private Set stops; 
  17.     public MyStopAnalyzer(){ 
  18.         //原来的停用词 
  19.         stops = StopAnalyzer.ENGLISH_STOP_WORDS_SET; 
  20.     } 
  21.     public MyStopAnalyzer(String[] sws){ 
  22.         //会自动将字符串数组转换为set 
  23.         stops = StopFilter.makeStopSet(Version.LUCENE_35, sws, true); 
  24.         //将原来的挺用词加入到现有的停用词集合 
  25.         stops.addAll(StopAnalyzer.ENGLISH_STOP_WORDS_SET); 
  26.     } 
  27.     @Override 
  28.     public TokenStream tokenStream(String fieldName, Reader reader) { 
  29.         return new StopFilter(Version.LUCENE_35,  
  30.                     new LowerCaseFilter(Version.LUCENE_35, 
  31.                         new LetterTokenizer(Version.LUCENE_35, reader)),stops); 
  32.     } 
  33.      

 

 
  1. import org.apache.lucene.analysis.Analyzer; 
  2. import org.junit.Test; 
  3.  
  4.  
  5. public class TestMyStopAnalyzer { 
  6.  
  7.  
  8.     @Test 
  9.     public void test04(){ 
  10.         Analyzer mya = new MyStopAnalyzer(new String[]{"I","you"}); 
  11.         String txt = "thank you ,how are you? i love you"
  12.         AnalyzerUtil.displayToken(txt, mya); 
  13.     } 
  14.      

 

 
  1. import java.io.IOException; 
  2. import java.io.StringReader; 
  3.  
  4. import javax.swing.text.AttributeSet.CharacterAttribute; 
  5.  
  6. import org.apache.lucene.analysis.Analyzer; 
  7. import org.apache.lucene.analysis.SimpleAnalyzer; 
  8. import org.apache.lucene.analysis.StopAnalyzer; 
  9. import org.apache.lucene.analysis.TokenStream; 
  10. import org.apache.lucene.analysis.WhitespaceAnalyzer; 
  11. import org.apache.lucene.analysis.standard.StandardAnalyzer; 
  12. import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; 
  13. import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; 
  14. import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute; 
  15. import org.apache.lucene.analysis.tokenattributes.TypeAttribute; 
  16. import org.apache.lucene.util.Version; 
  17. import org.junit.Test; 
  18.  
  19.  
  20. public class AnalyzerUtil { 
  21.     public static void displayToken(String txt,Analyzer a){ 
  22.         TokenStream ts = a.tokenStream("content"new StringReader(txt)); 
  23.         //位置增量的属性,存储词汇单元之间的距离 
  24.         PositionIncrementAttribute pia = ts.addAttribute(PositionIncrementAttribute.class); 
  25.         //每个词汇单元的位置偏移量 
  26.         OffsetAttribute oa = ts.addAttribute(OffsetAttribute.class); 
  27.         //存储每一个与会单元的信息(分词单元信息) 
  28.         CharTermAttribute ca = ts.addAttribute(CharTermAttribute.class); 
  29.         //是用的分词器的类型信息 
  30.         TypeAttribute ta = ts.addAttribute(TypeAttribute.class); 
  31.         try { 
  32.             while(ts.incrementToken()){ 
  33.                 System.out.println(ca.toString()+"  positionincrement:"+pia.getPositionIncrement()+"  "+"offset:"+oa.startOffset()+"-"+oa.endOffset()+"   type:"+ta.type()); 
  34.             } 
  35.         } catch (IOException e) { 
  36.             // TODO Auto-generated catch block 
  37.             e.printStackTrace(); 
  38.         } 
  39.         System.out.println("-----------"); 
  40.     } 
  41.      

mmseg中文分词器的使用,在这里我是用的分词器是1.8.5

 

 
  1. import java.io.StringReader; 
  2.  
  3. import org.apache.lucene.analysis.Analyzer; 
  4. import org.junit.Test; 
  5.  
  6. import com.chenlb.mmseg4j.analysis.MMSegAnalyzer; 
  7.  
  8.  
  9. public class TestMMsegAnalyzer { 
  10.     @Test 
  11.     public void test01(){ 
  12.         Analyzer msgA = new MMSegAnalyzer(); 
  13.         String txt = "白云山我来自中国,你好,我叫大工,"
  14.         AnalyzerUtil.displayToken(txt, msgA); 
  15.     } 

 

本文出自 “Kenan_ITBlog” 博客,请务必保留此出处http://soukenan.blog.51cto.com/5130995/1122724

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值