Python 语篇中句子间的语义相似性

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

我使用了论坛上的材料和上一个页面为一个程序编写了一些代码,该程序将自动计算全文中连续句子之间的语义相似度。在这里

第一部分的代码是从第一个链接复制粘贴的,然后我把这些东西放在245行之后。我删除了第245行之后的所有多余部分

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:(有一个免费版,而不是免费版……免费版对于您正在尝试的内容来说已经足够了)。