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 之间存在单个字母差异
我正在开发一个简单的 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 之间存在单个字母差异