【问题标题】:How to find semantic similarity between a list of words?如何找到单词列表之间的语义相似度?
【发布时间】:2020-09-27 05:50:18
【问题描述】:

输入:

listToStr = 'degeneration agents alpha alternative amd analysis angiogenesis anti anti vegf appears associated based best bevacizumab blindness blood'

我正在使用的代码:

simi = []
tokens = nlp(listToStr) 
length = len(tokens)

for i in range(length):
    #print(i)
    sim = tokens[i].similarity(tokens[i+1])
    simi.append(sim)
print(simi)

错误:

[E040] Attempt to access token at 17, max length 17.

如何消除此错误?

我正在使用 spacy。这是它的链接: https://www.geeksforgeeks.org/python-word-similarity-using-spacy/#:~:text=Python%20%7C%20Word%20Similarity%20using%20spaCy,simple%20method%20for%20this%20task.

【问题讨论】:

  • 您正在使用某种 nlp 库 - 不清楚是哪一个或它是如何工作的 - 错误看起来好像属于该库。如果您说明该库是什么,并可能链接到它的文档页面,将会很有帮助。
  • 请检查,添加详细信息。

标签: python spacy semantics similarity


【解决方案1】:

在for 循环内,作为tokens[i + 1] 操作的结果,创建了一个超出标记列表范围的索引。你可以这样做:

import spacy

nlp = spacy.load("en_core_web_sm")

listToStr = 'degeneration agents alpha alternative amd analysis angiogenesis anti anti vegf appears associated based best bevacizumab blindness blood'

simi = []
tokens = nlp(listToStr) 

for idx, tok in enumerate(tokens):
    sim = []
    for nextok in tokens[idx:]:
        sim.append(tok.similarity(nextok))
    simi.append(sim)

这会测试句子中每个单词与下一个单词的相似度,因此结果是一个列表列表。

【讨论】:

  • 感谢您的帮助。我还可以获取列表中计算相似度的单词对吗?
  • 没问题 :) 如果您不介意将其放在同一个列表中,您可以使用 sim.append([tok, nextok, tok.similarity(nextok)]) 实现最后一件事。
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 2019-08-05
  • 2016-12-14
  • 2014-11-19
  • 1970-01-01
  • 2018-05-20
  • 2011-01-03
  • 2017-03-19
相关资源
最近更新 更多