在WordNet中查找名词的同义词

5

我想知道是否有一种简单的方法可以在WordNet中获取名词的同义词。似乎形容词的同义词很容易获得。

for ss in wn.synsets('beautiful'):
    print(ss)
    for sim in ss.similar_tos():
        print('    {}'.format(sim))

我在另一个SO问题中找到了上面的代码,它对形容词很有效。但是当我的单词是'gasoline'或'fire'时,结果很糟糕。理想情况下,我希望得到一个与这个网站非常相似的单词列表。

我尝试过的另一种方法效果很好,但非常缓慢:

def syn(word, lch_threshold=2.26):
for net1 in wn.all_synsets():
    try:
        lch = net1.lch_similarity(wn.synset(word))
    except:
        continue
    # The value to compare the LCH to was found empirically.
    # (The value is very application dependent. Experiment!)
    if lch >= lch_threshold:
        yield (net1, lch)

for x in syn('gasoline.n.1'):
    print  x

这也是从另一个SO问题中发现的。有没有一种更简单的方式来获取像上面链接中提供的名词的同义词?

2个回答

3
这是一种取得同义词的“hacky”方法。我尝试了一些词源API,但并没有得到我想要的完全相同的结果。
def get_syns(old_words):
    new_words = dict()
    for word, score in old_words.iteritems():
       new_words[word] = score
       for syn in get_web_syns(word):
           new_words[syn] = 1
    return new_words

def get_web_syns(word):
    req = requests.get('http://www.thesaurus.com/browse/' + word)
    soup = BeautifulSoup(req.text, 'html.parser')
    all_syns = soup.find('div', {'class' : 'relevancy-list'})
    syns = []
    for ul in all_syns.findAll('ul'):
        for li in ul.findAll('span', {'class':'text'}):
            syns.append(li.text.split()[0])
    return syns

cold = {'icy':2, 'ice':1, 'snow':1}
get_syns(cold)

这段文字包含了一个Python字典,其中列出了一系列与寒冷相关的词汇及其得分。在我的应用程序中,这些词汇将被用来做出相应的评估。


1
无论您处理名词、动词还是形容词:您总是通过 Synset.lemma() 获取 synset 的同义词,例如 wn.synsets('gasoline')[0].lemmas()

1
wn.synsets('word')单独给出同义词,但对于名词而言并不有趣。形容词仍需以上述第一种方法提供的额外步骤。使用该方法查询名词将得到空结果,使用您提供的引文同形还原词也是如此。我提供的第二种方法对名词效果很好(定义很重要),但会非常缓慢,因为需要遍历整个同义词集合。似乎通过网络爬虫获取所需信息更加容易。 - Ted Petrou
wn.synsets('word') 不会返回同义词!它会返回给定单词的不同语义概念。例如,wn.synsets('cat') 返回 [Synset('cat.n.01'), Synset('guy.n.01'), ... Synset('caterpillar.n.02'), ... Synset('vomit.v.01')] - char bugs
根据https://dev59.com/gmIk5IYBdhLWcg3wdd4l,synsets是同义词。 - Ted Petrou
可能有一些同义词集更相似或更不相似,但这并不意味着它们是同义词。看看上面的猫的例子,你会说“呕吐”和“毛毛虫”是同义词吗? - char bugs
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - char bugs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接