ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)(转)
本文地址,需转载请注明出处:
http://blog.csdn.net/hereiskxm/article/details/47441911
当我们使用中文分词器的时候,其实也希望它能够支持对于英文的分词。试想,任何一个存储文字的字段都有可能是中英文夹杂的。
我们的项目中使用IKAnalyzer作为中文分词器,它在处理文档过程中遇到英文时,利用空格和标点将英文单词取出来,同时也会对其转全小写处理。其实这和真正的英文分词已经很接近了,只有一墙之隔:词干提取。一个真正的英文分词器除了分割提取单词和全小写处理以外,还会把单词回溯成词根。
比如说有一个句子:
I like cats!
它的正确分词为:
[i, like, cat]
词根化是一个英文分词器需要具备的功能。IKAnalyzer正是缺少了这点,它对例句的处理结果会是:[i, like, cats],这显然不是我们想要的:我们希望用 “cat” 和“cats” 都能搜索出这个句子,而不是非得用“cats” 才能搜到。
分析一下analyzer的内部逻辑:
Analyzer 的内部就是一条流水线 Step 1 字符过滤(Character filter) Step 2 分词 (Tokenization) Step 3 Token 过滤(Token filtering) ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)
Elasticsearch 已经默认构造了 8个 Analyzer。若无法满足我们的需求,可以通过「Setting API」构造 Analyzer。
通过构造analyzer,我们可以对IK中文分词器做一些修改,让它实现回溯词根。
{"settings": {"analysis": {"analyzer": {"optimizeIK": {"type": "custom","tokenizer": "ik","filter": ["stemmer"]}}}}
}
我们新建了一个分析器,它使用ik作为分词器,使用stemmer作为过滤器。stemmer是elasticsearch自带的一个提取词干的算法,类似的还有snowball,都支持多种语言,有兴趣可以作比较。它将在ik对文档完成分词之后,将其中的英文单词做提取词干处理。
测试一下:
-POST {index_name}/_analyze?pretty&analyzer=optimizeIK
“I like cats”
返回结果:
{ “tokens”: [ { “token”: “i”, “start_offset”: 1, “end_offset”: 2, “type”: “ENGLISH”, “position”: 1 }, { “token”: “like”, “start_offset”: 3, “end_offset”: 7, “type”: “ENGLISH”, “position”: 2 }, { “token”: “cat”, “start_offset”: 8, “end_offset”: 12, “type”: “ENGLISH”, “position”: 3 } ] }
至此,optimizeIK分析器同时拥有了中文+外文分词的功能。
如果你想把这个分析器设成该index的默认分析器,给它的命名叫default即可。
ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)(转)相关推荐
- elasticsearch 处理中英文混合文档
我们在学习es过程中,难免会遇到一些们在学习es过程中,难免会遇到一些中国英文混合文档 这时我们如果使用ik ,虽然可以把英文分词,但是处理不了停用词(and ,is这种的),还有无法提取主干信息 比 ...
- ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)
本文地址,需转载请注明出处: http://blog.csdn.net/hereiskxm/article/details/47441911 当我们使用中文分词器的时候,其实也希望它能够支持对于英文的 ...
- java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号
java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号 介绍 数据库中很多字段都会限制长度,为了方便用户使用,在前端界面给出限制长度的提示,看网上很多写的获取字符串长度都没有 ...
- python结巴分词 词频统计_一个txt文档,已经用结巴分词分完词,怎么用python工具对这个分完词的文档进行计算统计词频,求脚本,非...
匿名用户 1级 2016-11-03 回答 #!/usr/bin/env python3 #-*- coding:utf-8 -*- import os,random #假设要读取文件名为aa,位于当 ...
- phpexcel 导出循环增加列数_基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)...
前言 在上一篇导出文档番外篇中,我们已经熟悉了怎样根据json数据导出word的文档,生成接口文档,而在这一篇,将对上一篇进行完善补充,增加多种导出方式,实现更加完善的导出功能. 回顾 1. 获取Sw ...
- devc中文注释显示问号_Python零基础入门-(如何让人读懂你的代码)文档注释
目标 注释的作用 单行注释(行注释) 多行注释(块注释) 01. 注释的作用 使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性 02. 单行注释(行注释) 以 # 开头,# 右边 ...
- vscode中文设置后重启还是英文解决(设置中文)Vetur插件
第一步:快捷键ctrl+shift+p 选择Configure Display Language 第二步:修改"locale"属性 重启还是英文是因为你没有安装中文插件 安装后再重 ...
- Elasticsearch - 文档分析,IK分词器;文档冲突(十二)
阅读本文前可先参考 Elasticsearch - Elasticsearch详解:安装部署(一)_MinggeQingchun的博客-CSDN博客 https://blog.csdn.net/Min ...
- 案例:用python将中文翻译的和英文原文合成新的word文档
案例:用python中文翻译的和英文原文合成新的word文档 一 问题的形成 需求的描述:一个英语翻译专业的研究生同学有一个期末作业.老师给了一个英文的文档,需要同学们翻译成中文.老师给的文档是格式如 ...
最新文章
- Social learning With Bayesian Agent and Random Decision Making
- 密码检验规则(字母数字和特殊字符组成的混合体)
- 圆锥破碎机常见故障_圆锥破碎机飞车危害大! 7种原因早知道早预防
- LambdaNetworks解读
- Linux基础查漏补缺
- 如何有效的使用对话框之二
- Django通过一个下拉框确定另外一个下拉框的值,并关联起来
- 有没有更好的方法在JavaScript中执行可选的函数参数? [重复]
- 导致Tomcat启动过程缓慢的原因及解决方法
- Careercup - Facebook面试题 - 4907555595747328
- 过期不候--具备生命周期的数据的技术实现方案
- php遍历桌面上的记事本,电脑桌面显示记事本便签内容要怎么设置一直锁定在桌面?...
- Mysql 纵表转换为横表
- android系统apk文件,如何安装apk文件 安卓手机apk文件安装方法
- AHU 2022 CTF新生赛web_writeup
- 解决打开word很慢
- 模具设计经典案例:汽车门板下本体模具的设计
- 65W氮化镓Switch底座扩展坞方案
- Racket编程指南——21 运行和创建可执行文件
- python风变编程能找工作_没有永远的工作,只有永远的“就业力”,风变编程Python走起...
热门文章
- 2016MDCC移动开发者大会总结
- 揭秘java虚拟机 kindle_Kindle有一个java虚拟机
- LeetCode不浪费原料的汉堡制作方案
- 用DevExpress.Xpo 直接维护后台的 数据表,在这四列中录入的数据,即时插入或更新到关联的数据表中
- [Android]从canDrawOverlays权限获取错误说起
- iPhone又爆Wi-Fi漏洞 中招Wi-Fi就废了
- 渗透测试--medium_socnet
- 国药集团获得美国默沙东公司新冠口服药“莫诺拉韦”经销权和独家进口权 | 美通社头条...
- Rinne Loves Study
- c语言用字符方式拚一个时钟,2012年3月份全国计算机等级考试二级c语言题库(机试) (1)...