我有一个字符串列表和一个看起来像这样的字符串:
mylist = ["the yam is sweet", "what is the best time to come", "who ate my food", "no empty food on the table", "what can I do to make you happy"] # about 20k data
myString1 = "Is yam a food" # String can be longer than this
myString2 = "should I give you a food"
myString3 = "I am not happy"
我想将每个myString与列表中的每个字符串进行比较,并收集三个不同列表中的相似性百分比。因此最终结果将如下所示:
similar_string1 = [70, 0.5, 50, 55, 2]
similar_string2 = [50, 0.5, 70, 85, 2]
similar_string3 = [20, 15, 0, 5, 80]
因此,将mystring1与mylist中的每个字符串进行比较,并计算相似度百分比。与myString2和myString3相同。然后将这些百分比中的每个百分比收集到上面的列表中。
我读到可以使用TF-IDF对mylist和mystring进行矢量化处理,然后使用余弦相似度进行比较,但是我以前从未尝试过类似的工作,如果有人有想法,过程或代码可以帮助我入门。
谢谢
答案 0 :(得分:0)
在Calculate cosine similarity given 2 sentence strings
中已经讨论了获得余弦相似性的python实现。您可以检查以上链接并使用以下代码段:
'''
vector1 = text_to_vector(myString1)
vector2 = text_to_vector(myString2)
vector3 = text_to_vector(myString3)
similar_string1 = []
similar_string2 = []
similar_string3 = []
for ele in mylist:
vector = text_to_vector(ele)
cosine = get_cosine(vector1, vector)
similar_string1.append(cosine)
cosine = get_cosine(vector2, vector)
similar_string2.append(cosine)
cosine = get_cosine(vector3, vector)
similar_string3.append(cosine)
print(similar_string1)
print(similar_string2)
print(similar_string3)
'''
变量名称与您在问题中提到的名称相同。显然,此代码可以根据您的要求进行优化。
如果您什么都不懂,请告诉我。