`
newspringwork
  • 浏览: 101667 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

第七章、文本分析器(Analyzer)&分词器(Tokenizer)

    博客分类:
  • Solr
 
阅读更多

一、简介

分析器是solr中一个很重要的组件,在建立索引、搜索出想要的结果时,发挥了非常大的作用,这是solr已经定义好的一段包含分析器的fieldType示例

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
	<analyzer type="index">
		<tokenizer class="solr.StandardTokenizerFactory"/>
		<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
		<filter class="solr.LowerCaseFilterFactory"/>
		<filter class="solr.EnglishPossessiveFilterFactory"/>
		<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
		<filter class="solr.PorterStemFilterFactory"/>
	</analyzer>
	<analyzer type="query">
		<tokenizer class="solr.StandardTokenizerFactory"/>
		<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
		<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
		<filter class="solr.LowerCaseFilterFactory"/>
		<filter class="solr.EnglishPossessiveFilterFactory"/>
		<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
		<filter class="solr.PorterStemFilterFactory"/>
	</analyzer>
</fieldType>

  

1.分析器(Analyzer)

告诉Solr在建立索引和搜索的时候,如何处理文档内容,类型(type)一般为index或query

 

2.分词器(Tokenizer):

如何将一段完整的内容拆分成单独的词或词组,solr中定义了很多带分析器的文本类型,但中文的需要自己定义,目前有很多优秀的中文分词器(mmseg4j、IK等)

 

3.过滤器(Filter)

进过Tokenizer处理后,后续处理的组件,比如全转成小写等

 

4. Why?

为什么要用分词,以查询一段文字“詹姆斯:NBA巨星,首轮状元秀,绰号小皇帝。”(对应的field未定义任何的分词器),我们如果查询“状元秀”,是查不到这条记录的,当然你说可以加通配符,但是如果我们还要做高亮显示查询的这个词呢?

这时如果我们将对应字段的类型加上index分词器,在建立索引时就会对内容进行合适的拆分,查询时也会对查询字符串进行分词拆分,这样即使我们查询“小皇帝状元秀”也可以获得我们想要的结果

 

二、分析器的配置(中文分词mmseg4j的配置)

这里我solr的版本是6.5.0,mmseg4j的版本是2.4.0

1. 常用中文分词介绍

paoding:支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载

mmseg4j:自带sogou词库,支持名为 wordsxxx.dic, utf8文本格式的用户自定义词库,一行一词。不支持自动检测。 -Dmmseg.dic.path

IK:支持api级的用户词库加载,和配置级的词库文件指定,无 BOM 的 UTF-8 编码,/r/n 分割。不支持自动检测。

 

2.mmseg4j分词器配置

将下载好的mmseg4j包导入到solr的WEB-INF/lib下,并在schema配置文件中添加以下内容: 

<fieldType name="text_mmseg4j_Complex" class="solr.TextField">  
	<analyzer>
		<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>
	</analyzer>
</fieldType>

 

将之前定义的core_test中short_desc字段定义为text_mmseg4j_Complex类型,重建索引后,我们查询"状元秀小皇帝",只返回了一条记录

{
	"responseHeader" : {
		"status" : 0,
		"QTime" : 2,
		"params" : {
			"q" : "short_desc:状元秀小皇帝",
			"indent" : "on",
			"wt" : "json",
			"_" : "1493135606415"
		}
	},
	"response" : {
		"numFound" : 1,
		"start" : 0,
		"docs" : [{
					"name" : "LeBron James",
					"id" : "12b3e4b030314f55a89006769b8b743a",
					"short_desc" : "NBA巨星,首轮状元秀,克里夫兰骑士队当家球星,3届总冠军得主,场上司职小前锋,绰号“小皇帝”",
					"age" : 32,
					"tags" : ["小皇帝", "吾皇"],
					"_version_" : 1565666158942617600
				}]
	}
}

 

用提供的分析器页面也可以看到分词的结果比原来用标准分词器(完全拆成了一个个的汉字,而忽了语义)更符合自然意义

//mmseg4j基于正向最大匹配,分词结果
MMST  状元  秀  小  皇帝

 

3.mmseg4j的三种模式区别

mmseg4j涉及到了Simple、Complex、max-word三种分词方法,前两个都是基于正向最大匹配,第三种是在Complex算法基础上实现的最多分词方法。

1)正向最大匹配:

就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子字符串与字典中的词进行匹配,如果匹配成功则进行下一轮匹配,直到所有字符串处理完毕,否则将子字符串从末尾去除一个字,再进行匹配,如此反复。

2)三种模式分词实例

原字符串:阿根廷足球巨星

Simple、Complex分词结果:阿根廷  足球巨星

Max-Word分词结果:阿  根  廷 足球  巨星

 

三.自定义词库

可能注意到前面tokenizer配置了dicPath属性(dic),这里是指定自定义词库的目录,可以是绝对路径也可以是现对路径,相对路径为"{solr.home}/core_name/词库目录",词库文件words开头并以".dic"结尾,如words-myown.dic。

注意,如果你的词库文件也是words.dic会覆盖对应solr-core.jar包中预定义的词库文件。

 

1.动态加载词库

通过一个简单的配置就可以让mmseg4j动态加载词库

首先在solrconfig.xml中配置一个requestHandler,其中dicPath和fieldType配置的dicPath属性值相同

<requestHandler name="/mmseg4j" class="com.chenlb.mmseg4j.solr.MMseg4jHandler" >  
    <lst name="defaults">
        <str name="dicPath">dic</str>
    </lst>
</requestHandler>

然后我们就可以通过URL(http://localhost:10001/solr/core_test/mmseg4j?reload=true)来通知其重新加载词库

 

返回目录

分享到:
评论

相关推荐

    ikanalyzer分词器

    ikanalyzer分词器是一款在Java环境下广泛使用的中文分词工具,尤其在搜索引擎和文本分析领域中扮演着重要角色。它的核心是ikanalyzer.jar类库,这个库包含了分词算法和其他必要的支持类,使得开发者能够轻松地集成到...

    IKAnalyzer中文分词器jar包

    在配置Solr以使用IKAnalyzer时,你需要在Solr的`solrconfig.xml`中指定分析器,并将上述文件放在正确的目录下。例如,你可以这样配置分词器: ```xml &lt;analyzer type="index"&gt; &lt;tokenizer class="org.wltea....

    ik-analyzer 中文分词器

    **ik-analyzer中文分词器详解** 在信息技术领域,尤其是搜索引擎和自然语言处理中,中文分词是一项至关重要的任务。由于中文句子没有明显的空格来区分词汇,因此需要专门的工具来实现分词,以便更好地理解和分析...

    IKAnalyzer分词器源码+可直接使用jar包

    **IKAnalyzer分词器**是Java开发的一款高性能的中文分词工具,主要应用于搜索引擎和文本分析领域。它的设计目标是提供一个轻量级、高效能的解决方案,支持自定义词典,可以方便地集成到各种系统中。在本资源中,我们...

    ik-analyzer-8.3.0分词插件.zip

    在构建和优化中文搜索引擎或文本分析系统时,中文分词是一个至关重要的环节。"ik-analyzer-8.3.0分词插件.zip" 文件提供了一个解决方案,它是一款专为Solr设计的中文分词插件,使得Solr能够处理中文文档的分词任务。...

    solr6.x的IKAnalyzer配置智能分词

    7. **实战应用**:IKAnalyzer在新闻网站、电子商务平台、社区论坛等需要处理大量中文文本的场景中广泛应用,通过精确的分词可以提升用户的搜索体验,增加用户满意度。 总之,配置IKAnalyzer智能分词对于提升Solr在...

    IKAnalyzer源码+配置+智能分词类

    IKAnalyzer是一款基于Java实现的开源中文分词器,主要应用于搜索引擎和文本分析领域。它是由尹国平(iK)发起并维护的项目,旨在提供一个高效且易用的中文分词解决方案。IKAnalyzer支持自定义扩展字典,允许用户根据...

    IKAnalyzer 分词源码

    **IKAnalyzer分词源码详解** IKAnalyzer是一款广泛使用的开源中文分词器,它主要针对Java平台设计,具有良好的性能和扩展性。该分词器适用于各种文本处理场景,如搜索引擎构建、信息检索、文本挖掘等。其核心在于...

    ikanalyzer-solr8.4.0_solr8_solr_ikanalyzer_中文分词_

    ikanalyzer 是一个专门为Java开发的中文分词器,它基于 Lucene 库,适用于各种文本处理和搜索引擎场景。在 Solr 环境中,ikanalyzer 的作用是为中文文档提供精确的分词服务,从而提升搜索质量和效率。Solr8.4.0 是 ...

    k-analyzer-solr solr分词器

    "ikanalyzer-solr5"看起来是一个针对Solr 5版本的IK Analyzer分词器。IK Analyzer是一款开源的、适用于Java环境的中文分词器,广泛应用于搜索引擎、日志分析等领域。它支持自定义词典和灵活的分词策略,能较好地处理...

    solr中文分词jar包ik-analyzer 含class配置 ik-analyzer-7.5.0

    标签中的"ik-ana"是Ik Analyzer的简称,"solr 中文分词"强调了这个分词器在Solr中的应用场景。文件列表中的"ik-analyzer-7.5.0.jar"即是我们需要集成到Solr中的核心组件。 总之,Ik Analyzer 7.5.0是Solr处理中文...

    IKAnalyzer中文分词器 jar包 + 使用文档 + 配置文件 + doc

    IKAnalyzer是一款针对中文处理的开源分词工具,广泛应用于搜索引擎、信息检索系统、文本挖掘等领域。它是基于Java语言开发的,能够很好地与Lucene、Solr等全文检索框架集成,提供高效的中文分词能力。 首先,我们要...

    分词器 ikanalyzer-solr6.5

    1. 在Solr的Schema.xml或managed-schema文件中,定义字段类型(fieldType)时,指定ikanalyzer作为分析器(analyzer): ```xml &lt;fieldType name="text_ikanalyzer" class="solr.TextField"&gt; &lt;analyzer type="index...

    solr6.0以上版本可以配置的IKAnalyzer分词器

    在Solr6.0及以上版本中,为了更好地支持中文分词,我们可以配置IKAnalyzer(智能中文分析器)。IKAnalyzer是一个专门针对中文的开源分词器,设计目标是提供一个灵活且易扩展的中文分词组件。 **IKAnalyzer简介** IK...

    Solr6.0集成IK-Analyzer分词器

    可以通过分析器预览分词结果。 - 根据实际需求调整IK Analyzer的配置,比如自定义词典、停用词等。 6. **监控和维护** - 对Solr的查询性能进行监控,观察分词效果和索引构建速度,根据实际情况进行调优。 集成IK...

    solr_5.0_tomcat7_IKAnalyzer中文分词安装及demo

    同时,需要在`solr/solrconfig.xml`中配置分析器为IKAnalyzer。 ```xml &lt;analyzer type="query"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/&gt; &lt;/analyzer&gt; &lt;analyzer type="index"&gt; ...

    solr分词器IKAnalyzer

    Solr中的IKAnalyzer分词器是处理中文文本的关键组件,它能有效提升搜索质量和效率。通过对`schema.xml`的配置,我们可以定制化分词策略,以满足具体业务的需求。IKAnalyzer 2012FF_hf1版本的出现,旨在提供更快更...

    ik_analyzer中文分析器solr6版及以下版本适用

    **ik_analyzer中文分析器** 是一款专门为处理中文文本而设计的开源分词工具,它在Solr和Elasticsearch等搜索引擎中广泛应用。这个标题提到的是适用于Solr 6版本及以下的ik_analyzer分析器,表明这个压缩包提供了一个...

    IK中文分词器

    在Solr的配置中,我们可以将IKAnalyzer作为默认的分析器,对输入的中文文本进行预处理,从而提高查询的精确度和召回率。 **配置过程:** 1. **下载与安装**:首先,从官方仓库或第三方资源获取ikanalyzer-solr5的...

    IK_Analyzer_source分词器源码2012ff.rar

    这款分词器以其灵活、高效的特性,成为了许多Java开发者处理中文文本的首选工具。本文将深入探讨IK Analyzer 2012FF_hf1_source的源码,揭示其工作原理与关键实现,帮助开发者更好地理解和定制分词器以适应特定业务...

Global site tag (gtag.js) - Google Analytics