无论时态或形式如何,我如何匹配单词?

时间:2012-06-01 14:17:04

标签: python nlp nltk string-matching

我目前正在编写一个运行文档的脚本,提取所有关键字,然后尝试将这些关键字与其他文档中的关键字进行匹配。有一些细节使这个问题复杂化,但它们与我的问题不太相关。基本上我希望能够匹配单词而不管它们出现的时态。

例如:如果给出字符串“游泳”,“游泳”和“游泳”,我想要一个程序可以识别这些都是相同的单词,不管它是否会将单词存储为游泳,游泳或游泳对我来说并不重要。

我知道这个问题可以通过包含所有这些单词形式的字典来解决,但是我并不知道任何以这种方式映射的字典对此有用。我更喜欢与Python兼容的解决方案或库,因为这是我目前用于此脚本的内容,但我可以使用几乎任何语言的解决方案(除了haskell或eiffel或类似的模糊/难以与...合作

3 个答案:

答案 0 :(得分:5)

查看pywordnet

>>> N['dog']
dog(n.)
>>> N['dog'].getSenses()
('dog' in {noun: dog, domestic dog, Canis familiaris},
 'dog' in {noun: frump, dog}, 'dog' in {noun: dog},
 'dog' in {noun: cad, bounder, blackguard, dog, hound, heel},
 'dog' in {noun: pawl, detent, click, dog},
 'dog' in {noun: andiron, firedog, dog, dogiron})

答案 1 :(得分:1)

从您的问题来看,这听起来像是在寻找一种词干词形推理算法,它基本上将每个词映射到词典形式。一种众所周知的这种算法是Porter Stemming算法,该算法已经存在了三十年,并且已经实现了多种语言,包括Python。您可以在http://tartarus.org/martin/PorterStemmer/找到这些实施的列表。

尽管Porter的干扰器已经存在很长时间并且由于比较原因而有用,但Spaceghost正确地指出这不一定是最好的系统。 Snowball应该比Porter词干算法更好。

答案 2 :(得分:0)

你描述的这个问题似乎是一个Stemming问题,它们是像porter stemmer那样有用的词干。更具体地说,尝试使用适用于Python的nltk工具包来实现它,如果我没有弄错的话,它会带有一个porter stemmer。