一、 ik-analyzer分词
1、下载
“IK Analyzer 2012FF_hf1.zip”包: http://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012FF_hf1.zip
源码: https://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012FF_hf1_source.rar
官网:https://code.google.com/p/ik-analyzer/
2、源码拷入eclipse,添加IKTokenizerFactory类,拷贝出ext.dic、IKAnalyzer.cfg.xml、stopword.dic后删除, 打成ik-solr4.6.jar包。
自定义IKTokenizerFactory类 为了支持solr4.6可以加同义词,这个类写法参考: http://thinkjet.me/solr-lucene-tokenizer-filter.html
package org.wltea.analyzer.lucene;
import java.io.Reader;
import java.util.Map;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.AttributeSource.AttributeFactory;
public class IKTokenizerFactory extends TokenizerFactory{
private boolean useSmart;
public boolean useSmart() {
return useSmart;
}
public void setUseSmart(boolean useSmart) {
this.useSmart = useSmart;
}
public IKTokenizerFactory(Map<String, String> args) {
super(args);
assureMatchVersion();
this.setUseSmart("true".equals(args.get("useSmart")));
}
@Override
public Tokenizer create(AttributeFactory factory, Reader input) {
Tokenizer _IKTokenizer = new IKTokenizer(input , this.useSmart);
return _IKTokenizer;
}
}
3、将ik-solr4.6.jar拷贝到tomcat/webapps/solr/WEB-INF/lib ,拷贝出的IKAnalyzer.cfg.xml、ext.dic、stopword.dic 放到 tomcat/webapps/solr/WEB-INF/classes目录(创建)
<!-- IKAnalyzer.cfg.xml-- >
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
<!--ext.dic-- >
荧光海滩
我爱中国
<!--stopword.dic-->
with
也
了
4、schema.xml添加配置
<field name="content" type="text_ik" indexed="true" stored="true" multiValued="false" />
<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
<!--提取词干filter ,解决英语时态的问题-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!--同义词-->
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
5、solr\collection1\conf下添加synonyms.txt、stopwords.txt文件。
添加中文后,需要用ue另存为 无BOM 的 UTF-8 编码,否则启动tomcat报错java.nio.charset.MalformedInputException: Input length = 1。
synonyms.txt内容:
无数,许多
蓝色,浅蓝色
stopwords.txt
上
6、测试
分词内容:Bunnies i'm coding 2014无数浮游生物随着浪花冲在沙滩上形成了荧光海滩
在query页面搜索:
索引后,搜索code codes bunny 各时态,荧光海滩 扩展词 ,许多 同义词 可以搜出内容。
搜索“了” “上”停用词 查不出结果。说明web 工程和solr 部署目录下的停用词都起了作用。
7、名称说明
同义词:
synonyms.txt一行为单位配置格式:
Gifts,gift
ideapad,ideacenter,lenovo,联想
原1,原2,...=>目标1,目标2 (原可以多个,目标也可以多个)
即当输入搜索词原1的时候,最后以 目标1,目标2当个词搜索。
如果expand为true,等同于
ideapad,ideacenter,lenovo,联想 =>ideapad,ideacenter,lenovo,联想
参考:http://my.oschina.net/baowenke/blog/104019
停用词:
为节省存储空间和提高搜索效率,搜索引擎在索引页面或处理搜索请求时会自动忽略某些字或词,这些字或词即被称为Stop Words(停用词)。
应用十分广泛的词。语气助词、副词、介词、连接词等,通常自身 并无明确的意义,只有将其放入一个完整的句子中才有一定作用,如常见的“的”、“在”之类。
在网页Title中避免出现Stop Words往往能够让我们优化的关键词更突出。
如果没有指定analyzer的type,则表明index与query阶段用的是同样的analyzer。
BOM: Byte Order MarkUTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。
8、ik源码中的demo
/** * IK 中文分词 版本 5.0.1 * IK Analyzer release 5.0.1 * 源代码由林良益(linliangyi2005@gmail.com)提供 * 版权声明 2012,乌龙茶工作室 * provided by Linliangyi and copyright 2012 by Oolong studio * * */ package org.wltea.analyzer.sample; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.tokenattributes.TypeAttribute; import org.wltea.analyzer.lucene.IKAnalyzer; /** * 使用IKAnalyzer进行分词的演示 * 2012-10-22 * */ public class IKAnalzyerDemo { public static void main(String[] args){ //构建IK分词器,使用smart分词模式 // useSmart 为true,使用智能分词策略。非智能分词:细粒度输出所有可能的切分结果 。智能分词: 合并数词和量词,对分词结果进行歧义判断 Analyzer analyzer = new IKAnalyzer(true); //获取Lucene的TokenStream对象 TokenStream ts = null; try { ts = analyzer.tokenStream("myfield", new StringReader("这是一个中文分词的例子,你可以直接运行它!IKAnalyer can analysis english text too")); //获取词元位置属性 OffsetAttribute offset = ts.addAttribute(OffsetAttribute.class); //获取词元文本属性 CharTermAttribute term = ts.addAttribute(CharTermAttribute.class); //获取词元文本属性 TypeAttribute type = ts.addAttribute(TypeAttribute.class); //重置TokenStream(重置StringReader) ts.reset(); //迭代获取分词结果 while (ts.incrementToken()) { System.out.println(offset.startOffset() + " - " + offset.endOffset() + " : " + term.toString() + " | " + type.type()); } //关闭TokenStream(关闭StringReader) ts.end(); // Perform end-of-stream operations, e.g. set the final offset. } catch (IOException e) { e.printStackTrace(); } finally { //释放TokenStream的所有资源 if(ts != null){ try { ts.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
相关推荐
**IK分词器详解** IK分词器是针对Elasticsearch(ES)的一款热门中文分词插件,其全称为“Intelligent Chinese Analyzer for Elasticsearch”。它由Java编写,旨在为中文文档提供高效、准确的分词处理。版本7.10.2...
**ik分词器7.17.10详解** 在中文搜索引擎和数据分析领域,分词器扮演着至关重要的角色。ik分词器是为Elasticsearch(ES)设计的一款高效、可扩展的中文分词工具,它能有效地将中文文本拆分成一个个独立的词语,便于...
**IK分词器详解** IK分词器是针对Elasticsearch设计的一款强大的中文分词插件,其全称为"elasticsearch-analysis-ik"。在Elasticsearch中,分词器的作用至关重要,它负责将用户输入的文本进行词汇切分,以便进行...
IK分词是中文自然语言处理领域中广泛应用的一种分词工具,尤其在搜索引擎和文本分析系统中,它的作用至关重要。Solr则是一个强大的、开源的企业级全文搜索引擎,它提供了高效的索引和查询功能,广泛用于大数据量的...
**Elasticsearch 7.8.0 版本的 IK 分词器** Elasticsearch 是一个功能强大的开源全文搜索引擎,广泛应用于数据检索、数据分析和实时分析等场景。在中文处理方面,IK (Intelligent Chinese) 分词器是 Elasticsearch ...
"Maven 构建好的 IK 分词器,可直接使用" 这个标题告诉我们,这里提供的是一个已经使用 Maven 构建完成的 IK 分词器,专为 Elasticsearch 2.2 版本设计。IK 分词器是针对中文文本进行分词处理的工具,通常用于提高...
IK分词器是Java开发的一款高效、灵活的中文分词工具,主要应用于全文检索和自然语言处理领域。在Solr中,IK分词器作为重要的插件被广泛使用,用于对中文文本进行精确且高效的分词,从而提高搜索质量和效率。 标题中...
### Elasticsearch 安装 IK 分词器详解 #### 一、背景及需求分析 Elasticsearch 是一款基于 Lucene 的搜索引擎,广泛应用于日志处理、全文检索等场景。它提供了多种内置分词器来处理文本数据,但在实际应用过程中...
IK分词器是一款广泛应用于Java环境中的中文分词工具,主要为了解决中文文本处理中的分词问题。在中文自然语言处理(NLP)领域,分词是预处理的重要步骤,它将连续的汉字序列切分成有意义的词汇,以便进行后续的分析...
Solr是中国最流行的全文搜索引擎框架Apache Lucene的一个扩展,它提供了高级的搜索功能,而IK分词器则是Solr在处理中文文本时的关键组件。"solr ik分词器 6.6.1版本"指的是该分词器的一个特定稳定版本,针对的是Solr...
**Elasticsearch 7.17.4 版本中的中文 IK 分词器** Elasticsearch 是一个流行的、开源的全文搜索引擎,它基于 Lucene 库,并提供了分布式、实时、可扩展的搜索和分析功能。在处理中文文本时,一个合适的分词器是至...
type: ik_max_word # 使用IK分词器的全模式 dictionary: my_dict # 自定义词典路径 ``` **依赖库** 在提供的文件列表中,我们看到有如下几个依赖库: - `httpclient-4.5.2.jar`:Apache HttpClient,用于 HTTP ...
标题和描述提到的是针对Solr 5.5和Solr 6.0版本的IK分词器支持的相关资料,这意味着这些资源可能包括配置文件、文档、示例代码或者更新日志,帮助用户在这些特定版本的Solr中集成和优化IK分词器。 首先,让我们来看...
《多个版本ik分词器源码》 在中文信息处理领域,分词是至关重要的一步,它直接影响到后续的文本分析、搜索引擎优化、情感分析等任务的精度。IK Analyzer(以下简称IK)是一款针对中文的开源分词器,以其高效、灵活...
本教程将详细解释如何在Solr中安装和使用IK分词器。 首先,让我们理解一下什么是分词器。在文本检索和自然语言处理领域,分词是将连续的文本分解成有意义的词语单元(如单词或短语)的过程。对于中文,由于没有明显...
IK分词常用停止词库约1500个 elasticsearch analysis ik分词器常用停止词库
IK分词器是一款广泛应用于Java环境中的开源中文分词组件,尤其在搜索引擎和文本分析领域中有着重要地位。它的全称是"Intelligent Chinese Analyzer for Java",由Lucene项目衍生而来,专为提高中文分词效率和准确性...
《Ik分词器5.5.1:Elasticsearch中的高效中文分词工具》 Ik分词器,全称为“Internet Keywords”分词器,是一款针对中文文本处理的开源分词组件,广泛应用于搜索引擎、信息检索系统等领域。Ik分词器以其高效的性能...
IK分词器是一款广泛应用于Java开发中的中文分词工具,主要为搜索引擎和其他需要处理中文文本的应用提供服务。它最初由尹吉团队开发,因此命名为"尹吉分词器"(IK Analyzer)。在本压缩包文件`ik-analyzer-solr6-...
### ElasticSearch 安装 ik 分词插件 #### 背景介绍 ElasticSearch 是一个基于 Lucene 的搜索引擎,提供了分布式、实时的全文搜索功能。在处理中文文本时,通常需要借助第三方分词工具来提高搜索效果。ik 分词器...