2013-10-14 13 views
5

का उपयोग कर एंटोनिम्स प्राप्त करना मैं wordnet पैकेज का उपयोग कर शब्दों के एंटोनिम्स प्राप्त करने का प्रयास कर रहा हूं। यह त्रुटि लौटने पर कुछ शब्दों के लिए काम करता है, मैं वास्तव में दूसरों के लिए नहीं मिलता हूं। फ़ंक्शन मूल रूप से फ़ंक्शन में encapsulated पैकेज प्रलेखन से उपयोग उदाहरण है।आर वर्डनेट पैकेज

# 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 ज्यादा पैकेज द्वारा प्रदान की पर्यायवाची शब्द समारोह की तरह, उत्पादन के रूप में उनके विलोम प्राप्त करने के लिए कर सकते हैं के लिए है।

किसी भी विचार के लिए धन्यवाद :)

संपादित करें: मैं पर हूँ: (आर में) wordnet_0.1-9 और Wordnet 3.0_3 (macports के माध्यम से प्रणाली चौड़ा) OSX 10.8.5, Wordnet पैकेज , rJava 0.9-4, आर संस्करण 3.0.1 (2013-05-16)।

उत्तर

2

आपकी समस्या यह है कि महान में सीधे एंटोनyms नहीं हैं। यदि आप 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