我想知道是否有一种简单的方法可以在 wordnet 中获取名词的同义词。形容词的同义词似乎很容易得到。
for ss in wn.synsets('beautiful'):
print(ss)
for sim in ss.similar_tos():
print(' {}'.format(sim))
我从另一个 SO 问题中找到了上面的代码,它适用于形容词。但是当我的词是“汽油”或“火”时,结果很糟糕。理想情况下,我会得到一个与 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 问题中发现的。有没有更简单的方法来获取上面提供的链接中的名词同义词?
最佳答案
这是一种获取同义词的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'南极': 1,
u'arctic': 1,
你咬的:1,
你'苦':1,
你'暴雪':1,
你冷静:1,
你'冷':1,
你'寒心':1,
你很冷:1,
u'chunk': 1,
你冷:1,
你' Crystal ':1,
u'cube': 1,
你'钻石':1,
你干了':1,
你'浮':1,
你'卡住':1,
你很冷:1,
u'frigorific': 1,
u'frost-bound': 1,
你'冷淡':1,
你'卡住':1,
u'gelid': 1,
u'glacial': 1,
你'冰川':1,
你'耀眼':1,
你'釉':1,
你好:1,
u'冰雹': 1,
'冰':1,
你的冰山:1,
你'冰':1,
u'icicle': 1,
'冰':2,
u'永久冻土':1,
u'polar': 1,
你'生':1,
你'冷藏':1,
你'rimy':1,
你'颤抖':1,
你'颤抖':1,
你的雨夹雪:1,
你被雨夹雪了:1,
你很光滑': 1,
'雪':1,
你下雪了:1}
字典用于为我的特定应用程序的单词分配分数。
关于python - 在wordnet中查找名词的同义词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29113755/