import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.highlight.*; import org.wltea.analyzer.core.IKSegmenter; import org.wltea.analyzer.core.Lexeme; import org.wltea.analyzer.lucene.IKAnalyzer; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; /** * 搜索工具类 * User: Winter Lau * Date: 13-1-10 * Time: 上午11:54 */ public class SearchHelper { private final static Log log = LogFactory.getLog(SearchHelper.class); private final static IKAnalyzer analyzer = new IKAnalyzer(); private final static List<String> nowords = new ArrayList<String>(){{//可用可不用 try{ addAll(IOUtils.readLines(SearchHelper.class.getResourceAsStream("/stopword.dic"))); }catch(IOException e){ log.error("Unabled to read stopword file", e); } }}; /** * 关键字切分 * @param sentence 要分词的句子 * @return 返回分词结果 */ public static List<String> splitKeywords(String sentence) { List<String> keys = new ArrayList<String>(); if(StringUtils.isNotBlank(sentence)) { StringReader reader = new StringReader(sentence); IKSegmenter ikseg = new IKSegmenter(reader, true); try{ do{ Lexeme me = ikseg.next(); if(me == null) break; String term = me.getLexemeText(); if(StringUtils.isNumeric(StringUtils.remove(term,'.'))) continue; if(nowords.contains(term.toLowerCase())) continue; keys.add(term); }while(true); }catch(IOException e){ log.error("Unable to split keywords", e); } } return keys; } }
protected static void test_split(){ String text = "开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区。我们传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。"; long ct = System.currentTimeMillis(); for(String word : SearchHelper.splitKeywords(text)){ System.out.println(word); } System.out.printf("TIME %d\n", (System.currentTimeMillis() - ct)); }
相关推荐
IKAnalyzer中文分词,计算句子相似度
IKAnalyzer继承Lucene的Analyzer抽象类,使用IKAnalyzer和Lucene自带的分析器方法一样,将Analyzer测试代码改为IKAnalyzer测试中文分词效果。 如果使用中文分词器ik-analyzer,就需要在索引和搜索程序中使用一致的...
从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。 从 3.0 版本开始,IK 发展为面向 Java 的公用分词...
Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器 Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器
1、lucene-core-3.6.0.jar 2、IKAnalyzer2012.jar(主jar包) 3、IKAnalyzer.cfg.xml(分词器扩展配置文件) 4、stopword.dic(停止词典) 5、IkSegmentation.java(样例类)
IKAnalyzer非常易用的java分词工具。可以自定义扩展词汇。 这个是一个完整的java项目demo。直接可以用,不用再去google下载了。添加了几个自定义词汇,测试好用。 运行ika.java里的main方法即可
IKAnalyzer中文分词器,里面包含jar包和使用手册
1. 《IKAnalyzer中文分词器V3.X使用手册》 2. IKAnalyzer3.X.jar(主jar包) 3. IKAnalyzer.cfg.xml(分词器扩展配置文件) 4. ext_stopword.dic(扩展的stopword词典,3.2以上版本提供) 它的安装部署十分简单,...
IKAnalyzer中文分词器,里面包含jar包,html文档,pdf文档以及源码
IKAnalyzer中文分词器V3.1.1使用手册 IKAnalyzer中文分词器V3.1.1使用手册
IK-Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包,也就是可以将一串中文字符分割成一个个的词组或者字词 文件中包含分词工具 ikanalyzer-2012_u6.jar 中文分词配置 IKAnalyzer.cfg..xml
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer 已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文...
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。 采用了特有的“正向迭代最细粒度切分算法”,具有60万字/秒的高速处理能力。 采用了多子处理器分析模式,支持:英文字母(IP地址、Email、...
IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包
IkAnalyzer3.2的jar包 IK Analyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包。从2006 年12 月推出1.0 版开始, IKAnalyzer 已经推出了3 个大版本。最初,它是以开源项目 Luence 为应用主体的,结合...
提示:IKAnalyzer中文分词器支持Lucene6.0以上,IKAnalyzer中文分词器支持Lucene6.0以上。
IKAnalyzer 中文分词器V3.2使用手册 lucene
IK Analyzer 安装包 它的安装部署十分简单,将IKAnalyzer3.oGA.jar 部署于项目的lib目录中;
从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开 始,IK发展为面向Java的公用分词组件,独立于...