ngram分词器?1、ngram分词器Elasticsearch实现模糊搜索 2、keyword忽略大小写 Controller Service 大小写兼容搜索,即字段内容为 alan ,搜索 alan 、 ALAN 、 Alan 都可以搜索出来。那么,ngram分词器?一起来了解一下吧。
看来没有高手啊,论坛高手都没人研究这东西,....必须稿滑来点激将备敬闹........PS一些常被设为高亮的作者.....得仿罩改一下题目
一种流行的自然语言处理库、自带语料库、具有分类,分词等很多功能,国外使用者居多,类似中文的jieba处理库
为单词序列分配概率的模型就叫做语言模型。
通俗来说, 语言模型就是这样一个模型:对于任意的词序列,它能够计算出这个序列是一句话的概率。或者说语言模型能预测单词序列的下一个词是什么。
**n-gram Language Models **
N-gram模型是一种典型的统计语言模型(Language Model,LM),统计语言模型是一个基于概率的判别模型.统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,统计语言模型赋予这个序列一个概率P(S),来衡量S 符合自然语言的语法和语义规则的置信度。用一句简单的话说,统计语言模型就是计算一个句子的概率大小的这种模型。
n-gram模型可以减轻单词序列没有在训练集中出现过而引起的问题,即数据稀疏问题
n-gram模型问题
对于n-gram模型的问题,这两页ppt说的很明白
N-gram模型基于这样一种假设,当前词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各散此液个词出现概率的乘积。
InnoDB的全文索引使用反向索引的设计。反向索引存储了一个单词(word)列表,对于每个单词,都有一个文档的列表,来标识这个单词出现的地方。为了支持临近搜索(proximity search),每个单词的位置信息也以字节偏移的方式存储。
当创建了InnoDB全文索引,一系列的索引表会一同被创建,见下面的例子:
最前面的六个表包含了反向索引,它们被称作附属索引表(auxiliary index table)。当输入的表被索引(tokenized)后,每个独立的单词(亦称作“tokens”)会被携带其DOC_ID和位置信息插入到索引表中。根据单词第一森梁旅个字符的字符集排序权重,在六个索引表中对单词进行完全排序和分区。
反向索引分区到六个附属索引表以支持并行的索引创建。默认有2个线程复制索引(Tokenize)、排序、插入单词和关联数据到索引表中。工作的线程的数量由innodb_ft_sort_pll_degree 配置项控制的。对于大表的全文索引,可以考虑增加线程数量。
如果主表创建在 xx表空间,索引表存储在它们自己的表空间中。反之,索引表存储于其索引的表空间中。
前面例子展示的另外一种索引表被称作通用索引表,它们被用于全文索引的“删除处理(deletion handing)”和存储内部状态。
SELECT
*
FROM
fulltext_sample
WHERE
copy
LIKE
\'%中文%\'OR
copy
LIKE
\'%没有回答慎燃%\'OR
copy
LIKE
\'%不让全文索引,我来模糊查询%\'OR
copy
LIKE
\'%这样变通%\'OR??copy
LIKE
\'%实宽谨虚际意义不大%\'OR
copy
LIKE
\'%效率和结果排序都是大问晌链题%\'OR
copy
LIKE
\'%继续ing,实在不行,把查询算法优化%\'
字段按一字一词的形式分词,再利用短语查询来搜索。
ES中,可以实现一字一词的的分词器是NGram。
Ngram分词的文档地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html
它其实是一个上下文相连续字符的分词,可以看文档中的例子。当我们将它 min_gram 和 max_gram 都设为1时,它会按一字一词的形式分词。比如“shinyke@189.cn”,分词的结果是["s" , "h" , "i" , "n" , "y" , "k" , "e" , "@" , "1" , "8" , "9" , "." , "c" , "n" ]。
/index_name/ {
"settings":{
"analysis":{
"analyzer":{
"charSplit":{
腊租"type":"custom",
"tokenizer":"ngram_tokenizer"
}
},
"tokenizer":{
"ngram_tokenizer":{
"type":"nGram",
"min_gram":"1",
"max_gram":"1",
"token_chars":[
"letter",
"digit",
"punctuation"
]
}
}
}
}
}
以上语句中,构建了一个名为“charSplit”的分析器。
以上就是ngram分词器的全部内容,第一,使用N_Gram方式建立数据库的全文检索,要求可以对导入句子进行全文检索方式的模糊查询。第二, 能够统计出检索内容所耗时间。第三, 支持中英,和英中两种方式的检索。第四, 支持导入句子功能。