【问题标题】:Python for loop not working inside user defined functionPython for 循环在用户定义的函数中不起作用
【发布时间】:2018-07-27 14:30:30
【问题描述】:

我有 gensim 预训练模型,我试图使用 model.most_similar('word') 找到最相似的词所以可以说,我有一个名为“政治”的词,所以我所做的是

for i,q in model.most_similar('politics'):
    print (i) 

这给了我一个单词列表的输出。但是,当我把它放在函数中时,同样的事情:

def taxonomy(word):
    for i,q in model.most_similar(word):
        print (i)

当我使用taxonomy('politics') 时,我收到错误:ValueError: cannot compute similarity with no input。是不是我做错了什么?

编辑:

如何将i 附加到与我的单词同名的空白数组中。即当前数组名称应该是politics,我已经这样做了,但没有工作

def taxonomy(word):
    word=[]
    for i,q in model.most_similar(word):
        word.append(i)
        return word

【问题讨论】:

  • taxonomy("politics")?
  • 您是否将politics 放在引号中?
  • 发生错误时变量word的值是多少?阅读ericlippert.com/2014/03/05/how-to-debug-small-programs 了解有关如何调试代码的一些提示。
  • @WStokvis 不,我已经写了我提到的。
  • 顺便说一下,for 循环末尾缺少冒号 :。您的代码引发了SyntaxError

标签: python python-3.x function gensim cosine-similarity


【解决方案1】:

查看您的最新编辑,有几处需要修正。 由于您希望将列表命名为与输入 word 相同,因此一种解决方案是使用全局变量并使用 politics 以这种方式创建列表。我调整了一些间距。例如,您在 for 循环中返回列表,而不是在之后。有关全局变量的信息,您可以找到文档here

def taxonomy(word):
    g = globals()
    g[word] = []
    for i, q in model.most_similar(word):
        g[word].append(i)
    return g[word]

相关示例:我使用enumerate 而不是model.most_similar 用于显示目的。您的函数返回您在函数中创建的列表并创建全局列表,以便您可以在其他地方使用而无需再次调用该函数。

def taxonomy(word):
    g = globals()
    g[word] = []
    for i, q in enumerate(word):
        g[word].append(i)
    return g[word]

taxonomy('politics')
[0, 1, 2, 3, 4, 5, 6, 7]

politics
[0, 1, 2, 3, 4, 5, 6, 7]

【讨论】:

  • def tax(word): politics=[] for i,q in wiki_model.most_similar(word): for j,k in wiki_model.most_similar(i): for a,b in wiki_model.most_similar(j): politics.append(a) return politics 中的 len(politics) 和 def tax(word): g = globals() g[word] = [] for i,q in wiki_model.most_similar(word): for j,k in wiki_model.most_similar(i): for a,b in wiki_model.most_similar(j): g[word].append(a) return g[word] 中的 len(politics) 是不同的。为什么会这样?
  • @Mavrick 很难从评论中的代码中看出问题所在。差异有多大?
【解决方案2】:

你可以这样做-

k = [i for i, j in model.most_similar(word)] 打印(k)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多