【问题标题】:How to run a Python gensim functions from R with reticulate如何使用 reticulate 从 R 运行 Python gensim 函数
【发布时间】:2018-04-26 15:18:50
【问题描述】:

我想使用 reticulate 包从 R 运行 gensim。我不确定我是否完全理解 reticulate 的语法,因为我可以让它与默认功能设置一起使用,但是当我尝试通过时它失败了更多的论点。

library(reticulate)
gensim <- import("gensim")

model<-gensim$models$Word2Vec$load("word2vec_gensim")

matrix(unlist(model$wv$most_similar("queen")),ncol=2,byrow=T)
      [,1]                           [,2]               
 [1,] "princess"                     "0.76466166973114" 
 [2,] "king"                         "0.728749990463257"
 [3,] "prince"                       "0.653270363807678"
 [4,] "lady"                         "0.611525416374207"
 [5,] "consort"                      "0.609499335289001"
 [6,] "duchess"                      "0.608054518699646"
 [7,] "monarch"                      "0.606827557086945"
 [8,] "lady-in-waiting"              "0.605596661567688"
 [9,] "empress"                      "0.602727890014648"
 [10,] "wiki/margrethe_ii_of_denmark" "0.59738427400589"

但是……

matrix(unlist(model$wv$most_similar("queen",topn = 25)),ncol=2,byrow=T)

Error in py_call_impl(callable, dots$args, dots$keywords) : 
TypeError: Partition index must be integer

这里的“word2vec_gensim”是一个预训练模型,我不能包含它,因为它是一个大文件,但选择你最喜欢的预训练模型。我认为我的问题在于我如何为 python 函数提供额外的参数。

编辑:我想通了

看起来 R 到 python 的通信没有按预期处理数字。

matrix(unlist(model$wv$most_similar("queen",topn = as.integer(25))),ncol=2,byrow=T)

作品

【问题讨论】:

    标签: python r gensim reticulate


    【解决方案1】:

    你是正确的,网状不处理自动类型转换。除非明确知道特定 Python 参数需要是整数还是浮点数然后进行调解,否则无法以编程方式确定这一点,这在 Python 中是不可能的,因为 Python 是一种无类型语言。

    您可以通过使用as.integer(25) 将参数显式转换为整数来绕过它,或者您可以使用25L 而不是25

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-27
      • 2018-12-09
      • 2022-01-02
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      相关资源
      最近更新 更多