跳到主要内容

NGRAM_SEARCH

Description

DOUBLE ngram_search(VARCHAR text,VARCHAR pattern,INT gram_num)

计算 text 和 pattern 的 N-gram 相似度。相似度从 0 到 1,相似度越高证明两个字符串越相似。 其中patterngram_num必须为常量。 如果text或者pattern的长度小于gram_num,返回 0。

N-gram 相似度(N-gram similarity)是一种基于 N-gram(N 元语法)的文本相似度计算方法。N-gram 是指将一个文本串分成连续的 N 个字符或词语的集合。例如,对于字符串“text”,当 N=2 时,其二元组(bi-gram)为:{“te”, “ex”, “xt”}。

N-gram 相似度的计算为 2 * |Intersection| / (|text set| + |pattern set|)

其中|text set|,|pattern set|为 text 和 pattern 的 N-gram,Intersection为两个集合的交集。

注意,根据定义,相似度为 1 不代表两个字符串相同。

仅支持 ASCII 编码。

Syntax

DOUBLE ngram_search(VARCHAR text,VARCHAR pattern,INT gram_num)

Example

mysql> select ngram_search('123456789' , '12345' , 3);
+---------------------------------------+
| ngram_search('123456789', '12345', 3) |
+---------------------------------------+
| 0.6 |
+---------------------------------------+

mysql> select ngram_search("abababab","babababa",2);
+-----------------------------------------+
| ngram_search('abababab', 'babababa', 2) |
+-----------------------------------------+
| 1 |
+-----------------------------------------+

keywords

NGRAM_SEARCH,NGRAM,SEARCH