当前位置:首页 > 开发 > 编程语言 > 搜索 > 正文

使用Lucene3和IKAnalyzer对一段文本进行分词

发表于: 2010-12-23   作者:hotsunshine   来源:转载   浏览次数:
摘要: import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenSt
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
 * 对一段文字进行分词
 * @author Administrator
 */
public class IkAnalyzerWord {

  private String resource;
  private List<String> result = new ArrayList<String>();

  public IkAnalyzerWord(String resource) throws IOException {
    this.resource = resource;
    analyzer();
  }

  private void analyzer() throws IOException {
    Analyzer analyzer = new IKAnalyzer();
    TokenStream ts = analyzer.tokenStream("*", new StringReader(resource));
    ts.addAttribute(TermAttribute.class);
    //public <A extends Attribute> A addAttribute(Class<A> attClass)
    //The caller must pass in a Class<? extends Attribute> value.
    //This method first checks if an instance of that class is already in this AttributeSource and returns it.
    //Otherwise a new instance is created, added to this AttributeSource and returned.
    while (ts.incrementToken()) {
      TermAttribute ta = ts.getAttribute(TermAttribute.class);
      //public <A extends Attribute> A getAttribute(Class<A> attClass)
      //The caller must pass in a Class<? extends Attribute> value. 
      //Returns the instance of the passed in Attribute contained in this AttributeSource
      result.add(ta.term());
      //Returns the Token's term text.
    }
  }

  public List<String> getResult() {
    return this.result;
  }

  public static void main(String[] args) throws IOException {
    IkAnalyzerWord ik = new IkAnalyzerWord("今天的大风终于小了,但是又起雾了今天的大风终于小了,但是又起雾了");
    System.out.println(ik.getResult());
  }
}


输出结果(我设置了stopword词典)

[大风, 终于, 小了, 雾, 大风, 终于, 小了, 雾]

使用Lucene3和IKAnalyzer对一段文本进行分词

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
方案一: 基于配置的词典扩充 项目结构图如下: IK分词器还支持通过配置IKAnalyzer.cfg.xml文件来扩充
Luence使用IKAnalyzer分词实例 及 IKAnalyzer扩展词库 方案一: 基于配置的词典扩充 项目结构图如下:
一、配置 IKAnalyzer 中文分词器配置,简单,超简单。 IKAnalyzer 中文分词器下载,注意版本问题,
之前的示例中,使用的是默认的StandardAnalyzer分词器,不能有效的进行中文分词,下面演示下如何在L
之前的示例中,使用的是默认的StandardAnalyzer分词器,不能有效的进行中文分词,下面演示下如何在L
1、下载IK Analyzer中文分词器:http://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012FF_
下载列表:https://code.google.com/p/ik-analyzer/downloads/list 我下载的是:IKAnalyzer2012_u6.
Spring3.1, Hibernate3.6,Lucene3.0.3以及IKAnalyzer3.2.3, 数据库采用Mysql,连接池采用dbcp.主要Jar
前面说到solr+IKAnalyzer来配置中文分词;在实际中我们有些需求是需要将特定的词作为一个分词来处理
在solr中加入自己的扩展分词库方法: 参考文章: http://www.cnblogs.com/dennisit/archive/2013/04
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号