2017-05-29 49 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