2017-05-29 66 views
0

我目前正在与R(我正在使用RStudio for Windows(64位))中使用wordnet)并创建了一个data.frame包含synset_offset,ss_typeword从data.x文件(其中x是名词,adj,等)的wordnet数据库。检索使用wordnet的单词的同义词为R

样品可以这样来创建:使用共发现包时得到,我想添加作为附加列同义词列表

wnet <- data.frame(
     "synset_offset" = c(02370954,02371120,02371337), 
     "ss_type" = c("VERB","VERB","VERB"), 
     "word" = c("fill", "depute", "substitute") 
    ) 

我的问题发生。

library(wordnet) 
wnet$synonyms <- synonyms(wnet$word,wnet$ss_type) 

我收到以下错误。

Error in .jnew(paste("com.nexagis.jawbone.filter", type, sep = "."), word, : 
    java.lang.NoSuchMethodError: <init> 

如果我将该函数与定义的值一起使用,它将起作用。

> synonyms("fill","VERB") 
[1] "fill"  "fill up" "fulfil" "fulfill" "make full" "meet"  "occupy" "replete" "sate"  "satiate" "satisfy" 
[12] "take" 

任何建议来解决我的问题是值得欢迎的。

回答

1

由于某种原因,我无法在我的计算机上安装wordnet软件包,但似乎您在给同义词函数数组参数,而您不能,您应该可以使用apply来解决它。

syn_list <- apply(wnet,by=1,function(row){synonyms(row["word"],row["ss_type"])}) 

将返回同义词函数的输出为WNET data.frame的每一行

目前还不清楚你想要做什么:

wnet$synonyms <- synonyms(wnet$word,wnet$ss_type) 

作为每一行您将拥有一组同义词,它们不适合data.frame的3行。

也许这样的事情会为你工作:

wnet$synonyms <- sapply(syn_list,paste,collapse=", ") 

编辑 - 这是一个可行的解决方案上面的问题。

wnet$synset <- mapply(synonyms, as.character(wnet$word), as.character(wnet$ss_type)) 
+0

谢谢@Moody_Mudskipper,我自己解决了这个问题,但是你的建议指向了正确的方向。使用'wnet $ synset < - mapply(同义词,as.character(wnet $ word),as.character(wnet $ ss_type))'这个技巧,但是性能非常糟糕(因为rJava?) – conidium