我正在尝试使用wordnet软件包获取单词的反义词。这适用于某些单词,同时返回错误,而其他错误我并没有真正得到。该函数基本上只是封装在函数中的软件包文档中的用法示例。
# The function:
antonyms <- function(x){
filter <- getTermFilter("ExactMatchFilter", x, TRUE)
terms <- getIndexTerms("ADJECTIVE", 5, filter)
synsets <- getSynsets(terms[[1]])
related <- getRelatedSynsets(synsets[[1]], "!")
sapply(related, getWord)
}
# Some words work while others return an error:
> antonyms("happy")
[1] "unhappy"
> antonyms("great")
Error in .jcall(l, "Ljava/util/Iterator;", "iterator") :
RcallMethod: invalid object parameter
# The Error is caused by the "related" step.
我的目标是要有一个函数,可以将单词的向量应用于其中,以获取其反义词作为输出,就像该程序包提供的同义词函数一样。
谢谢你的任何想法:)
编辑:
我上线了:
OSX 10.8.5,
wordnet程序包(在R中)wordnet_0.1-9和wordnet 3.0_3(通过macports在整个系统范围内),
rJava 0.9-4,
R版本3.0.1(2013-05-16)。
最佳答案
您的问题是great没有直接的反义词。如果您使用look up great in WordNet Search,您会看到所有反义词都是通过其他单词间接表达的。您必须首先浏览类似于关系的内容,然后在其中查找反义词。相反,happy has a direct antonym(相反)。
您可能需要使用tryCatch
捕获此特定错误:
antonyms <- function(x){
filter <- getTermFilter("ExactMatchFilter", x, TRUE)
terms <- getIndexTerms("ADJECTIVE", 5, filter)
synsets <- getSynsets(terms[[1]])
related <- tryCatch(
getRelatedSynsets(synsets[[1]], "!"),
error = function(condition) {
message("No direct antonym found")
if (condition$message == "RcallMethod: invalid object parameter")
message("No direct antonym found")
else
stop(condition)
return(NULL)
}
)
if (is.null(related))
return(NULL)
return(sapply(related, getWord))
}
关于r - 使用R Wordnet软件包获取反义词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19360107/