`
thrillerzw
  • 浏览: 143811 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ik分词

 
阅读更多

一、 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();
		      }
			}
	    }
		
	}

}

 

  • 大小: 192.2 KB
0
1
分享到:
评论

相关推荐

    ik分词器tar包 7.10.2

    **IK分词器详解** IK分词器是针对Elasticsearch(ES)的一款热门中文分词插件,其全称为“Intelligent Chinese Analyzer for Elasticsearch”。它由Java编写,旨在为中文文档提供高效、准确的分词处理。版本7.10.2...

    ik分词器7.17.10

    **ik分词器7.17.10详解** 在中文搜索引擎和数据分析领域,分词器扮演着至关重要的角色。ik分词器是为Elasticsearch(ES)设计的一款高效、可扩展的中文分词工具,它能有效地将中文文本拆分成一个个独立的词语,便于...

    IK分词器elasticsearch-analysis-ik-7.17.16

    **IK分词器详解** IK分词器是针对Elasticsearch设计的一款强大的中文分词插件,其全称为"elasticsearch-analysis-ik"。在Elasticsearch中,分词器的作用至关重要,它负责将用户输入的文本进行词汇切分,以便进行...

    IK分词solr5.0.0

    IK分词是中文自然语言处理领域中广泛应用的一种分词工具,尤其在搜索引擎和文本分析系统中,它的作用至关重要。Solr则是一个强大的、开源的企业级全文搜索引擎,它提供了高效的索引和查询功能,广泛用于大数据量的...

    elasticsearch7.8.0版本的IK分词器

    **Elasticsearch 7.8.0 版本的 IK 分词器** Elasticsearch 是一个功能强大的开源全文搜索引擎,广泛应用于数据检索、数据分析和实时分析等场景。在中文处理方面,IK (Intelligent Chinese) 分词器是 Elasticsearch ...

    maven 构建好的 IK 分词器,可直接使用

    "Maven 构建好的 IK 分词器,可直接使用" 这个标题告诉我们,这里提供的是一个已经使用 Maven 构建完成的 IK 分词器,专为 Elasticsearch 2.2 版本设计。IK 分词器是针对中文文本进行分词处理的工具,通常用于提高...

    ik分词器jar包.zip

    IK分词器是Java开发的一款高效、灵活的中文分词工具,主要应用于全文检索和自然语言处理领域。在Solr中,IK分词器作为重要的插件被广泛使用,用于对中文文本进行精确且高效的分词,从而提高搜索质量和效率。 标题中...

    es安装ik分词器

    ### Elasticsearch 安装 IK 分词器详解 #### 一、背景及需求分析 Elasticsearch 是一款基于 Lucene 的搜索引擎,广泛应用于日志处理、全文检索等场景。它提供了多种内置分词器来处理文本数据,但在实际应用过程中...

    ik分词器jar包,以及配置文件

    IK分词器是一款广泛应用于Java环境中的中文分词工具,主要为了解决中文文本处理中的分词问题。在中文自然语言处理(NLP)领域,分词是预处理的重要步骤,它将连续的汉字序列切分成有意义的词汇,以便进行后续的分析...

    solr ik分词器 6.6.1版本

    Solr是中国最流行的全文搜索引擎框架Apache Lucene的一个扩展,它提供了高级的搜索功能,而IK分词器则是Solr在处理中文文本时的关键组件。"solr ik分词器 6.6.1版本"指的是该分词器的一个特定稳定版本,针对的是Solr...

    elasticserach 7.17.4版本的中文 IK分词器

    **Elasticsearch 7.17.4 版本中的中文 IK 分词器** Elasticsearch 是一个流行的、开源的全文搜索引擎,它基于 Lucene 库,并提供了分布式、实时、可扩展的搜索和分析功能。在处理中文文本时,一个合适的分词器是至...

    elasticsearch-analysis-ik-7.4.0 ik分词器7.4.0

    type: ik_max_word # 使用IK分词器的全模式 dictionary: my_dict # 自定义词典路径 ``` **依赖库** 在提供的文件列表中,我们看到有如下几个依赖库: - `httpclient-4.5.2.jar`:Apache HttpClient,用于 HTTP ...

    支持solr5.5 solr6.0中IK分词需要的资料

    标题和描述提到的是针对Solr 5.5和Solr 6.0版本的IK分词器支持的相关资料,这意味着这些资源可能包括配置文件、文档、示例代码或者更新日志,帮助用户在这些特定版本的Solr中集成和优化IK分词器。 首先,让我们来看...

    多个版本ik分词器源码

    《多个版本ik分词器源码》 在中文信息处理领域,分词是至关重要的一步,它直接影响到后续的文本分析、搜索引擎优化、情感分析等任务的精度。IK Analyzer(以下简称IK)是一款针对中文的开源分词器,以其高效、灵活...

    solr ik分词器

    本教程将详细解释如何在Solr中安装和使用IK分词器。 首先,让我们理解一下什么是分词器。在文本检索和自然语言处理领域,分词是将连续的文本分解成有意义的词语单元(如单词或短语)的过程。对于中文,由于没有明显...

    IK分词常用停止词库约1500个

    IK分词常用停止词库约1500个 elasticsearch analysis ik分词器常用停止词库

    IK分词器完整资源包 有配置文件和jar包

    IK分词器是一款广泛应用于Java环境中的开源中文分词组件,尤其在搜索引擎和文本分析领域中有着重要地位。它的全称是"Intelligent Chinese Analyzer for Java",由Lucene项目衍生而来,专为提高中文分词效率和准确性...

    ik分词器5.5.1

    《Ik分词器5.5.1:Elasticsearch中的高效中文分词工具》 Ik分词器,全称为“Internet Keywords”分词器,是一款针对中文文本处理的开源分词组件,广泛应用于搜索引擎、信息检索系统等领域。Ik分词器以其高效的性能...

    IK分词器源码

    IK分词器是一款广泛应用于Java开发中的中文分词工具,主要为搜索引擎和其他需要处理中文文本的应用提供服务。它最初由尹吉团队开发,因此命名为"尹吉分词器"(IK Analyzer)。在本压缩包文件`ik-analyzer-solr6-...

    ElasticSearch安装ik分词插件.txt

    ### ElasticSearch 安装 ik 分词插件 #### 背景介绍 ElasticSearch 是一个基于 Lucene 的搜索引擎,提供了分布式、实时的全文搜索功能。在处理中文文本时,通常需要借助第三方分词工具来提高搜索效果。ik 分词器...

Global site tag (gtag.js) - Google Analytics