如何在R中使用wordnet获得单词层次结构(例如,上位词,下位词)

时间:2017-07-06 02:07:24

标签: r hierarchy wordnet hypernym

我想在R中使用wordnet包来获得这样的单词层次结构:" animal"是" cat"和" apple"的上位词。是"水果"的下位词。但我可以从R wordnet帮助文件中找到的代码如下所示,以识别反义词:

filter <- getTermFilter("ExactMatchFilter", "cold", TRUE)
terms <- getIndexTerms("ADJECTIVE", 5, filter)
synsets <- getSynsets(terms[[1]])
related <- getRelatedSynsets(synsets[[1]],"!")
sapply(related, getWord)

如何使用R wordnet包查找单词的上位词和下位词?感谢。

1 个答案:

答案 0 :(得分:0)

您可以在

中替换"!"(用于反义词)
related <- getRelatedSynsets(synsets[[1]],"!")

根据您的需要使用其他符号。

查看此链接: http://wordnet.princeton.edu/man/wnsearch.3WN.html#sect4

上位词将是"@"

对原始问题的扩展:

我刚开始使用WordNet,我正在寻找类似的东西。 对于'apple',我想要一个hypernym树给我

  • '水果'
    • '食物'
      • '固体物质'
        • '物理实体'
          • 等...

在WordNet上点击inherited hypernyms时可以看到 http://wordnetweb.princeton.edu/perl/webwn

但是,以下命令

filter <- getTermFilter(type="ExactMatchFilter", word="apple", ignoreCase=TRUE)
terms <- getIndexTerms("NOUN", 15, filter)
synsets <- getSynsets(terms[[1]])
related <- getRelatedSynsets(synsets[[1]], "@")
sapply(related, getWord)

只会给我

[[1]]
[1] "edible fruit"

[[2]]
[1] "pome"        "false fruit"
因此未能为我提供较低级别的上位词

攀登上层树的关键是递归使用getRelatedSynsets()

继续上面的例子,从apple的synset中提取同义词:

related_2 <- getRelatedSynsets(related[[1]], "@")

并收集相应的词语:

sapply(related_2, getWord)

将产生:

[[1]]
[1] "produce"         "green goods"     "green groceries" "garden truck"   

[[2]]
[1] "fruit"

继续前进:

related_3 <- getRelatedSynsets(related2[[1]], "@")

sapply(related_3, getWord)

将导致:

[,1]        
[1,] "food"      
[2,] "solid food"