前言
Analysis:文本分析是把全文本转换成一系列单词(term/token)的过程,也叫分词。Analysis 是通过 Analyzer 来实现的,可以使用 ES 内置的分析器,也可使用定制的分析器。在写入数据和查询数据的时候,都需要用相同的分析器对语句进行分析。
Analyzer
Analyzer 分词器是专门处理分词的组件,由三部分组成:Character Filters(处理原始文本,例如去除html、特殊字符)、Tokenizer(按照规则切分为单词)、Token Filters(将切分的单词加工,小写、删除 stopwords(停用词),增加同义词)。
1
2
3
Character Filters
Tokenizer
Token Filters
使用 _analyzer API,直接指定分词器进行测试
PUT products
{
"mappings": {
"properties": {
"company": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"comment": {
"type": "text",
"fields": {
"english_comment": {
"type": "text",
"analyzer": "english",
"search_analyzer": "english"
}
}
}
}
}
}
ES 里面的内置分词器见下表:
| |
---|
Standard Analyzer | 默认分词器,按词切分,小写处理 | Simple Analyzer | 按照非字母切分(符号被过滤),小写处理 | Stop Analyzer | 小写处理,停用词过滤(the, a, is) | Whitespace Analyzer | 按照空格切分,不转小写 | Keyword Analyzer | 不分词,直接将输入当作输出 | Patter Analyzer | 正则表达式,默认\W+(非字符分隔) | Language | 提供了30多种常见语言的分词器 | Customer Analyzer | 自定义分词器 |
-
Standard Analyzer:默认分词器–>按词切分–>小写处理 -
Simple Analyzer:按照非字母切分,非字母的都被去除–>小写处理 -
Whitespace Analyzer:按照空格切分 -
Stop Analyzer:按照非字母切分,非字母的去除–>小写处理–>去除停用词(the,a,is 等修饰性词去掉) -
Keyword Analyzer:不分词,直接将输入当输出 -
Pattern Analyzer:通过正则表达式进行分词,默认是\W+,非字符的符号进行分隔–>小写处理–>去除停用词 -
Language Analyzer:多种语言分词器 -
Customer Analyzer:例如 ICU-Analyzer 提供了 Unicode 支持,更好的支持亚洲语言,使用时需要自行安装插件。使用命令Elasticsearch-plugin install analysis-icu 进行安装,安装成功后可以指定为自定义分词器 POST _analyze
{
"analyzer":"icu_analyzer",
"text":"他说的确实在理"
}
更多中文分词器
- IK:支持自定义词库,支持热更新分词字典,gitHub 地址
- THULAC:清华大学自然语言处理和社会人文计算实验室的中文分词器,gitHub 地址
总结
中文分词的分词器相比于其它分词器的难点在于,中文句子要切分成一个个词,而不是一个个字。英文中单词有自然的空格作为分隔,而中文是没有的。一句中文,在不同的上下文,有着不同的含义。
|