从单词列表中提取更多相似的单词

时间:2015-06-17 10:10:40

标签: python nlp

所以我有一个描述特定群体的单词列表。例如,一组基于宠物。

示例组宠物的词语如下:

[pets, pet, kitten, cat, cats, kitten, puppies, puppy, dog, dogs, dog walking, begging, catnip, lol, catshit, thug life, poop, lead, leads, bones, garden, mouse, bird, hamster, hamsters, rabbits, rabbit, german shepherd, moggie, mongrel, tomcat, lolcatz, bitch, icanhazcheeseburger, bichon frise, toy dog, poodle, terrier, russell, collie, lab, labrador, persian, siamese, rescue, Celia Hammond, RSPCA, battersea dogs home, rescue home, battersea cats home, animal rescue, vets, vet, supervet, Steve Irwin, pugs, collar, worming, fleas, ginger, maine coon, smelly cat, cat people, dog person, Calvin and Hobbes, Calvin & Hobbes, cat litter, catflap, cat flap, scratching post, chew toy, squeaky toy, pets at home, cruft's, crufts, corgi, best in show, animals, Manchester dogs' home, manchester dogs home, cocker spaniel, labradoodle, spaniel, sheepdog, Himalayan, chinchilla, tabby, bobcat, ragdoll, short hair, long hair, tabby cat, calico, tabbies, looking for a good home, neutring, missing, spayed, neutered, declawing, deworming, declawed, pet insurance, pet plan, guinea pig, guinea pigs, ferret, hedgehogs, minipigs, mastiff, leonburger, great dane, four-legged friend, walkies, goldfish, terrapin, whiskas, mr dog, sheba, iams]

现在我计划使用NLTK丰富这个列表。

首先,我可以获得每个单词的synset。如果我们采用cats,我们将获得:

Synset('cat.n.01')
Synset('guy.n.01')
Synset('cat.n.03')
Synset('kat.n.01')
Synset('cat-o'-nine-tails.n.01')
Synset('caterpillar.n.02')
Synset('big_cat.n.01')
Synset('computerized_tomography.n.01')
Synset('cat.v.01')
Synset('vomit.v.01')

为此,我们是用户nltk's wordnetfrom nltk.corpus import wordnet as wn

然后我们可以获得每个synset的引理。通过简单地添加这些引理,我会增加相当多的噪音,我怎么也添加了一些有趣的词。

但我想看的是减少噪音,并会欣赏上述任何建议或替代方法。

我想尝试的一个想法是查看“猫”这个词是否出现在同义词集名称或定义中,以包含或排除这些词条。

1 个答案:

答案 0 :(得分:2)

我建议在这里使用语义相似性与kNN的变体:对于每个候选词计算与所有金标准词的成对语义相似性,然后只保留k(尝试不同的k从5到100)最相似的金 - 标准词,计算与这些k个词的相似性的平均值(或总和),然后使用该值来丢弃候选噪声 - 通过排序和保持n最佳,或通过实验定义的阈值切断。

可以在WordNet的基础上计算语义相似度,参见related question,或者基于word2vec或类似技术学习的矢量模型,再次参见related question

实际上,您可以尝试将此技术用作所有单词作为候选,或者在特定于域的文本中出现的所有/某些单词 - 在最后一种情况下,该任务称为自动术语识别,并且方法可以直接用于您的问题或作为候选人的来源;在Google学者上搜索他们;例如,简要描述现有方法和调查链接,请参阅this paper

  

Fedorenko,D.,Astrakhantsev,N。,& Turdakov,D。(2013年)。自动   识别特定领域的术语:实验评估。在   SYRCoDIS(第15-23页)。