ES之5:分词器

摘要:
它提供基于语法的标记化,适用于大多数语言的POST。分析{“analyzer”:“standard”,“text”:“LikeX国庆假期”}运行结果2)配置标准分析器以接受以下参数:max_token_Length:最大标记长度。默认值为255个停止词:预定义的停止词列表,例如_ english_或包含停止词列表的数组,默认值为_ none_ stopwwords_Path:包含停止词PUTnew_索引的文件路径{“settings”:{“analysis”:{“analyzer”:{“my_english_analyzer”:}“type”:“standard”,#将分词符设置为标准“max_token_length”:5,#将最大分词符设置成5个“stopwwords”:“_english_”#设置过滤词}}}}}2,SimpleAnalyzer解析器在遇到非字母字符时将文本解析为术语,并且所有术语都是小写的。

一、分词器概念

1、Analysis 和 Analyzer

Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词。Analysis是通过Analyzer来实现的

当一个文档被索引时,每个Field都可能会创建一个倒排索引(Mapping可以设置不索引该Field)。

倒排索引的过程就是将文档通过Analyzer分成一个一个的Term,每一个Term都指向包含这个Term的文档集合。

当查询query时,Elasticsearch会根据搜索类型决定是否对query进行analyze,然后和倒排索引中的term进行相关性查询,匹配相应的文档。

2 、Analyzer组成

分析器(analyzer)都由三种构件块组成的:character filters , tokenizers , token filters

1) character filter 字符过滤器

在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(<span>hello<span> --> hello),& --> and(I&you --> I and you)

2) tokenizers 分词器

英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词。

3) Token filters Token过滤器

将切分的单词进行加工。大小写转换(例将“Quick”转为小写),去掉词(例如停用词像“a”、“and”、“the”等等),或者增加词(例如同义词像“jump”和“leap”)。

三者顺序Character Filters--->Tokenizer--->Token Filter

三者个数analyzer = CharFilters(0个或多个) + Tokenizer(恰好一个) + TokenFilters(0个或多个)

3、Elasticsearch的内置分词器

  • Standard Analyzer - 默认分词器,按词切分,小写处理

  • Simple Analyzer - 按照非字母切分(符号被过滤), 小写处理

  • Stop Analyzer - 小写处理,停用词过滤(the,a,is)

  • Whitespace Analyzer - 按照空格切分,不转小写

  • Keyword Analyzer - 不分词,直接将输入当作输出

  • Patter Analyzer - 正则表达式,默认W+(非字符分割)

  • Language - 提供了30多种常见语言的分词器

  • Customer Analyzer 自定义分词器

4、创建索引时设置分词器

PUT new_index
{
	"settings": {
		"analysis": {
			"analyzer": {
				"std_folded": {
					"type": "custom",
					"tokenizer": "standard",
					"filter": [
						"lowercase",
						"asciifolding"
					]
				}
			}
		}
	},
	"mappings": {
		"properties": {
			"title": {
				"type": "text",
				"analyzer": "std_folded" #指定分词器
			},
			"content": {
				"type": "text",
				"analyzer": "whitespace" #指定分词器
			}
		}
	}
}

二、ES内置分词器

这里讲解下常见的几个分词器:Standard AnalyzerSimple Analyzerwhitespace Analyzer

1、Standard Analyzer(默认)

1)示例

standard 是默认的分析器。它提供了基于语法的标记化(基于Unicode文本分割算法),适用于大多数语言

POST _analyze
{
  "analyzer": "standard",
  "text":     "Like X 国庆放假的"
}

运行结果

ES之5:分词器第1张

2)配置

标准分析器接受下列参数:

  • max_token_length : 最大token长度,默认255
  • stopwords : 预定义的停止词列表,如_english_或 包含停止词列表的数组,默认是 _none_
  • stopwords_path : 包含停止词的文件路径
PUT new_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_english_analyzer": {
          "type": "standard",       #设置分词器为standard
          "max_token_length": 5,    #设置分词最大为5
          "stopwords": "_english_"  #设置过滤词
        }
      }
    }
  }
}

2、Simple Analyzer

simple 分析器当它遇到只要不是字母的字符,就将文本解析成term,而且所有的term都是小写的。

POST _analyze
{
  "analyzer": "simple",
  "text":     "Like X 国庆放假 的"
}

运行结果

ES之5:分词器第2张

3、Whitespace Analyzer

POST _analyze
{
  "analyzer": "whitespace",
  "text":     "Like X 国庆放假 的"
}

返回

ES之5:分词器第3张

三、中文分词

中文的分词器现在大家比较推荐的就是 IK分词器,当然也有些其它的比如 smartCNHanLP

这里只讲如何使用IK做为中文分词。

1、IK分词器安装

开源分词器 Ik 的github:https://github.com/medcl/elasticsearch-analysis-ik

注意 IK分词器的版本要你安装ES的版本一致,我这边是7.1.0那么就在github找到对应版本,然后启动命令

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip

运行结果

ES之5:分词器第4张

注意 安装完插件后需重启Es,才能生效。

2、IK使用

IK有两种颗粒度的拆分:

ik_smart: 会做最粗粒度的拆分

ik_max_word: 会将文本做最细粒度的拆分

1) ik_smart 拆分

GET /_analyze
{
  "text":"中华人民共和国国徽",
  "analyzer":"ik_smart"
}

运行结果

ES之5:分词器第5张

2)ik_max_word 拆分

GET /_analyze
{
  "text":"中华人民共和国国徽",
  "analyzer":"ik_max_word"
}

运行结果

ES之5:分词器第6张

参考

1、Elasticsearch Analyzers

2、Elasticsearch 分词器

3、Elasticsearch拼音分词和IK分词的安装及使用

免责声明:文章转载自《ES之5:分词器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JS案例之8——从一个数组中随机取数Docker基础知识点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

几种开源分词工具的比較

  搜集了一些资料,与同学一起进行了简单的測试,总结例如以下。 分词工  具       特点    支持语言     原理 词典及扩展性 StandardAnalyzer 中文、英文(unicode) 中文:单字符切分 英文:依据空格切分 ChineseAnalyzer 中文,不支持中文和英文及数字混合的文本分词  按字分词,与S...

开源中文分词工具探析(四):THULAC

THULAC是一款相当不错的中文分词工具,准确率高、分词速度蛮快的;并且在工程上做了很多优化,比如:用DAT存储训练特征(压缩训练模型),加入了标点符号的特征(提高分词准确率)等。 【开源中文分词工具探析】系列: 开源中文分词工具探析(一):ICTCLAS (NLPIR) 开源中文分词工具探析(二):Jieba 开源中文分词工具探析(三):Ansj 开...

自然语言处理中的分词问题总结

众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。本文转载自明略研究院的技术经理牟小峰老师讲授的语言处理中的分词问题。 如何界定分词   中文分词指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新...

Sphinx中文入门指南——新手可先看此文

文主要介绍Sphinx的入门使用,新手观看,老鸟指正! * 1、简介 * 1.1.Sphinx是什么 * 1.2.Sphinx的特性 * 1.3.Sphinx中文分词 * 2、安装配置实例 * 2.1 在GNU/Linux/unix系统上安装 o 2.1.1 sphinx安装 o 2.1.2.sfc安装(见另文) o 2.1.3.coreseek安装(见另文...

自然语言中的词法分析、语法分析、句法分析

1.词法分析 词是自然语言中能够独立运用的最小单位,是自然语言处理的基本单位。词法分析就是利用计算机对自然语言的形态 (morphology) 进行分析,判断词的结构和类别等。 词法分析的主要任务是:①:能正确的把一串连续的字符切分成一个一个的词 ②:能正确地判断每个词的词性,以便于后续的句法分析的实现。 常见的中文分词算法:(分为三类,1.基于字符串匹配...

中文分词:双向匹配最大算法(BI-MM)

中文分词:双向匹配最大算法(BI-MM) 启发式规则: 1.如果正反向分词结果词数不同,则取分词数量较少的那个 2.如果分词结果词数相同 a. 分词结果相同,就说明没有歧义,可返回任意一个 b. 分词结果不同,返回其中单字较少的那个 代码实现 #使用双向最大匹配算法实现中文分词 words_dic = [] import BMM #引入逆向匹配算...