Python 语篇中句子间的语义相似性
我使用了论坛上的材料和上一个页面为一个程序编写了一些代码,该程序将自动计算全文中连续句子之间的语义相似度。在这里 第一部分的代码是从第一个链接复制粘贴的,然后我把这些东西放在245行之后。我删除了第245行之后的所有多余部分Python 语篇中句子间的语义相似性,python,vector,tf-idf,sentence-similarity,latent-semantic-analysis,Python,Vector,Tf Idf,Sentence Similarity,Latent Semantic Analysis,我使用了论坛上的材料和上一个页面为一个程序编写了一些代码,该程序将自动计算全文中连续句子之间的语义相似度。在这里 第一部分的代码是从第一个链接复制粘贴的,然后我把这些东西放在245行之后。我删除了第245行之后的所有多余部分 with open ("File_Name", "r") as sentence_file: while x and y: x = sentence_file.readline() y = sentence_file.readline
with open ("File_Name", "r") as sentence_file:
while x and y:
x = sentence_file.readline()
y = sentence_file.readline()
similarity(x, y, true)
#boolean set to false or true
x = y
y = sentence_file.readline()
我的文本文件格式如下
["Red alcoholic drink.", "Fresh orange juice.", 0.611],
["Fresh orange juice.", "An English dictionary.", 0.0]
["An English dictionary.", "The Yellow Wallpaper.", 0.5]
if norm(vec_1) > 0 and if norm(vec_2) > 0:
return np.dot(vec_1, vec_2.T) / (np.linalg.norm(vec_1)* np.linalg.norm(vec_2))
elif norm(vec_1) < 0 and if norm(vec_2) < 0:
???Move On???
红色酒精饮料。新鲜橙汁。一本英语词典。这个
黄色墙纸
最后,我想显示所有相邻相似的连续句子对,如下所示
["Red alcoholic drink.", "Fresh orange juice.", 0.611],
["Fresh orange juice.", "An English dictionary.", 0.0]
["An English dictionary.", "The Yellow Wallpaper.", 0.5]
if norm(vec_1) > 0 and if norm(vec_2) > 0:
return np.dot(vec_1, vec_2.T) / (np.linalg.norm(vec_1)* np.linalg.norm(vec_2))
elif norm(vec_1) < 0 and if norm(vec_2) < 0:
???Move On???
[“红色酒精饮料”,“新鲜橙汁”,0.611],
[《新鲜橙汁》,《英语词典》,0.0]
[《英语词典》,《黄色墙纸》,0.5]
如果范数(vec_1)>0,如果范数(vec_2)>0:
返回np.dot(vec_1,vec_2.T)/(np.linalg.norm(vec_1)*np.linalg.norm(vec_2))
elif范数(vec_1)<0和if范数(vec_2)<0:
继续???
这应该行得通。评论中有几点需要注意。基本上,您可以循环文件中的行,并在运行时存储结果。一次处理两行的一种方法是设置一个“无限循环”,并检查我们读取的最后一行是否已到达末尾(readline()
将在文件末尾返回None
)
编辑:对于从
similarity()
中得到的问题,如果您只想忽略导致这些错误的行对(不深入查看源代码,我真的不知道发生了什么),可以在调用similarity()
的周围添加try,catch
这应该行得通。评论中有几点需要注意。基本上,您可以循环文件中的行,并在运行时存储结果。一次处理两行的一种方法是设置一个“无限循环”,并检查我们读取的最后一行是否已到达末尾(readline()
将在文件末尾返回None
)
编辑:对于从
similarity()
中得到的问题,如果您只想忽略导致这些错误的行对(不深入查看源代码,我真的不知道发生了什么),可以在调用similarity()
的周围添加try,catch
您好,我添加了代码,但我得到了这些错误(写在问题中)您好,我添加了代码,但我得到了这些错误(写在问题中),我怀疑这是由某处除以零引起的。。。此外,SciPy中内置了余弦相似性:在计算余弦相似性之前,检查以确保vec_1
和vec_2
都不是零向量(即长度为零)。只要使用if
/else
…即如果向量的范数都是正的,那么你就可以走了,否则…好吧,跳过这一对,或者抛出一个异常,或者…做你想做的。那么,如果在计算余弦相似性时遇到范数为零的向量,你想做什么?抛出错误并退出?静默地继续下一对(假设您正在为循环的某个中计算这些,可能是这样,也可能不是这样)?这不是我能回答的问题。你必须决定代码的逻辑流程。你也可以让警告抛出,然后处理输出中的nan
值。顺便说一句,我不知道你在用什么编写代码,但你可能想使用IDE(集成开发环境)或具有指出简单语法错误能力的文本编辑器。我推荐PyCharm:(有一个免费版,而不是免费版…免费版对于你想做的事情来说已经足够了)。我怀疑这是由某处除以零造成的。。。此外,SciPy中内置了余弦相似性:在计算余弦相似性之前,检查以确保vec_1
和vec_2
都不是零向量(即长度为零)。只要使用if
/else
…即如果向量的范数都是正的,那么你就可以走了,否则…好吧,跳过这一对,或者抛出一个异常,或者…做你想做的。那么,如果在计算余弦相似性时遇到范数为零的向量,你想做什么?抛出错误并退出?静默地继续下一对(假设您正在为
循环的某个中计算这些,可能是这样,也可能不是这样)?这不是我能回答的问题。你必须决定代码的逻辑流程。你也可以让警告抛出,然后处理输出中的nan
值。顺便说一句,我不知道你在用什么编写代码,但你可能想使用IDE(集成开发环境)或具有指出简单语法错误能力的文本编辑器。我推荐PyCharm:(有一个免费版,而不是免费版……免费版对于您正在尝试的内容来说已经足够了)。