我想知道是否有一种简单的方法可以在wordnet中获取名词的同义词。似乎形容词的同义词很容易获得。
for ss in wn.synsets('beautiful'):
print(ss)
for sim in ss.similar_tos():
print(' {}'.format(sim))
我从另一个SO问题中找到了上面的代码,它适用于形容词。但是,当我的话是“汽油”时。或者' fire'结果很可怕。理想情况下,我会得到一个与this网站非常相似的单词列表。
我尝试过的其他方法效果很好,但速度极慢:
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问题也发现了这个问题。是否有更简单的方法来获取名词的同义词,如上面提供的链接?
答案 0 :(得分:2)
这是一种获取同义词的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)
返回: {u'algific':1, u'antarctic':1, u'arctic':1, u'biting':1, u'bitter':1, u'blizzard':1, 你好':1, u'chilled':1, u'chilling':1, u'chilly':1, 你好':1, 你好':1, u'crystal':1, u'cube':1, u'diamonds':1, u'dry':1, u'floe':1, u'freezing':1, u'frigid':1, u'frigorific':1, u'frost-bound':1, u'frosty':1, u'frozen':1, u'gelid':1, u'glacial':1, u'glacier':1, u'glaring':1, u'glaze':1, u'hail':1, u'hailstone':1, '冰':1, u'iceberg':1, u'iced':1, u'icicle':1, '冰冷':2, u'permafrost':1, u'polar':1, u'raw':1, 你好吗':1, u'rimy':1, 你的'hivering':1, 你的':'1, u'sleet':1, u'sleeted':1, 你顺利':1, '雪':1, u'snowfall':1}
dict用于为我的特定应用程序分配单词分数。
答案 1 :(得分:0)
无论您是处理名词,动词还是形容词:您始终可以通过Synset.lemma()
获取同义词的同义词,例如wn.synsets('gasoline')[0].lemmas()