我正在寻找一个 Python 库来帮助我识别两个单词或句子之间的相似性。
我将进行音频到文本的转换,这将导致一个英文字典或非字典单词(这可能是个人或公司名称)之后,我需要将其与一个或多个已知单词进行比较。
例子:
1) 文本转音频结果:感谢您致电 America Expansion 将与American Express进行比较。
这两个句子在某种程度上相似但不相同。
看起来我可能需要查看他们共享多少个字符。任何想法都会很棒。看起来像谷歌搜索“你的意思是”功能的功能。
我正在寻找一个 Python 库来帮助我识别两个单词或句子之间的相似性。
我将进行音频到文本的转换,这将导致一个英文字典或非字典单词(这可能是个人或公司名称)之后,我需要将其与一个或多个已知单词进行比较。
例子:
1) 文本转音频结果:感谢您致电 America Expansion 将与American Express进行比较。
这两个句子在某种程度上相似但不相同。
看起来我可能需要查看他们共享多少个字符。任何想法都会很棒。看起来像谷歌搜索“你的意思是”功能的功能。
最接近的是 Jan 在他的回答中提到的Levenstein 距离(也通常称为编辑距离)。
在信息论和计算机科学中,Levenshtein 距离是衡量两个序列之间差异的字符串度量。通俗地说,两个单词之间的 Levenshtein 距离是将一个单词更改为另一个单词所需的最小单字符编辑次数(即插入、删除或替换)。
它是识别相似词的一个非常常用的指标。Nltk 已经有一个编辑距离度量的实现,可以通过以下方式调用:
import nltk
nltk.edit_distance("humpty", "dumpty")
上面的代码会返回1
,因为两个单词之间只有一个字母不同。
除了这里得到很好的响应外,您还可以尝试 difflib python 库中的 SequenceMatcher。
https://docs.python.org/2/library/difflib.html
import difflib
a = 'Thanks for calling America Expansion'
b = 'Thanks for calling American Express'
seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 87.323943
现在考虑下面的代码:
a = 'Thanks for calling American Expansion'
b = 'Thanks for calling American Express'
seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 88.88888
现在您可以比较 d 值来评估相似度。
一种古老而著名的比较技术是Soundex算法。这个想法不是比较单词本身,而是比较它们发音的近似值。我不知道这实际上在多大程度上提高了结果的质量。
然而,将 Soundex 之类的东西应用到语音到文本识别引擎的结果中感觉有点奇怪。首先,您丢弃有关单词发音方式的信息,然后尝试再次将其添加回来。最好将这两个阶段结合起来。
因此,我希望该领域的最先进技术能够做到这一点,并且是某种形式的自适应分类,例如基于神经网络。谷歌确实返回了最近关于神经网络语音识别的研究。