NLP - 在段落中查找 Similar/Phonetic 个单词并计算分数

NLP - Find Similar/Phonetic word and calculate score in a paragraph

我正在开发一个简单的 NLP 项目,我们在其中给出了一组单词并从文本中找到 similar/phonetically 相似的单词。我找到了很多算法,但没有找到示例应用程序。

还应该通过比较关键字和找到的词来给出相似度分数。

谁能帮帮我?

    def word2vec(word):
    from collections import Counter
    from math import sqrt

    cw = Counter(word)
    sw = set(cw)
    lw = sqrt(sum(c*c for c in cw.values()))
    return cw, sw, lw

def cosdis(v1, v2):
    common = v1[1].intersection(v2[1])
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2]

list_A = ['e-commerce', 'ecomme', 'e-commercy', 'ecomacy', 'E-Commerce']
list_B = ['E-Commerce']

for word in list_A:
    for key in list_B:
            res = cosdis(word2vec(word), word2vec(key))
            print(res)

此代码仅进行字词比较。

谁能帮帮我?

我想你指的是像 API 这样的东西,它可以首先将单词转换成 IPA 符号(一种形式注音符号),然后比较 IPA 符号。

from collections import Counter
from math import sqrt
import eng_to_ipa as ipa

def word2vec(word):
    cw = Counter(word)
    sw = set(cw)
    lw = sqrt(sum(c*c for c in cw.values()))
    return cw, sw, lw

def cosdis(v1, v2):
    common = v1[1].intersection(v2[1])
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2]

list_A = ['e-commerce', 'ecomme', 'e-commercy', 'ecomacy', 'E-Commerce']
list_B = ['E-Commerce']

IPA_list_a = []
IPA_list_b = []
for each in list_A:
    IPA_list_a.append(ipa.convert(each))
for each in list_B:
    IPA_list_b.append(ipa.convert(each))

for word in IPA_list_a:
    for key in IPA_list_b:
            res = cosdis(word2vec(word), word2vec(key))
            print(res)

看看这个:[https://github.com/mphilli/English-to-IPA][1]

>>> import eng_to_ipa as ipa
>>> ipa.convert("The quick brown fox jumped over the lazy dog.")
'ðə kwɪk braʊn fɑks ʤəmpt ˈoʊvər ðə ˈleɪzi dɔg.'

例子由上面github link.

余弦相似度主要用于字符串,而不是将一个词与另一个词进行比较。我宁愿推荐你使用 Levenshteien Distance(也称为编辑距离)之类的东西。

编辑距离(a.k.a.Levenshtein 距离)是对称为源字符串和目标字符串的两个字符串之间的相似性的度量。字符串之间的距离被描述为将源转换为目标所需的最少编辑操作(删除、插入或替换)次数。所以,距离越近,它们非常相似的可能性就越高。

您可以通过 Python 的 nltk 库以这种方式使用它:

import nltk

w1 = 'mapping'
w2 = 'mappings'

nltk.edit_distance(w1, w2)

在这种情况下,输出返回为 1,因为 w1 和 w2 之间存在单个字母差异