2013-10-14 49 views
5

我试图获得使用wordnet包的单词的反义词。这适用于某些单词,同时返回一个我并没有真正得到的错误。该函数基本上就是封装在函数中的封装文档的使用示例。使用R 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. 

我在这里的目标是有,我可以为了lapply词向量来得到他们的反义词作为输出,就像由包提供的同义词功能的功能。

感谢您的任何想法:)

编辑: 我在: OSX 10.8.5, 共发现包(以R)wordnet_0.1-9和共发现3.0_3(系统范围的MacPorts通过) , rJava 0.9-4, R版本3.0.1(2013-05-16)。

回答

2

你的问题是很好没有直接的反义词。如果你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)) 
} 
+1

谢谢你这么多!如果我进一步完善功能,我会发布,但这无疑是一个很好的开始。 – Matthias