如何匹配单词而不考虑时态或形式?

问题描述 投票:0回答:3

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

例如:如果给定字符串“swim”、“swam”和“swimming”,我想要一个程序能够识别这些都是同一个单词,尽管它是否会将单词存储为“swim”、“swam”或“swimming”对我来说并不重要。

我知道这个问题可以通过包含所有这些单词形式的字典来解决,但我不知道有任何字典以这种方式映射对此有用。我更喜欢与 Python 兼容的解决方案或库,因为这就是我目前用于此脚本的解决方案,但我对几乎任何语言的解决方案都很好(保存 haskell 或 eiffel 或类似晦涩/难以理解的东西)与)

python nlp nltk string-matching
3个回答
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})

编辑:该库于 2006 年并入 NLTK

后停产

1
投票

从你的问题来看,听起来你正在寻找一种 stemminglemmatization 算法,该算法本质上将每个单词映射到其字典形式。一种著名的此类算法是 Porter Stemming 算法,该算法已经存在了三十年,并且可以用多种语言(包括 Python)实现。您可以在 http://tartarus.org/martin/PorterStemmer/ 找到这些实现的列表。

虽然波特词干分析器已经存在很长时间并且出于比较原因可能很有用,但 Spaceghost 正确地指出这不一定是最好的系统。 Snowball 应该比 Porter 词干算法更好。


0
投票

您描述的这个问题似乎是一个词干问题,它们是一些有用的词干提取器,例如波特词干提取器。更具体地说,尝试使用 Python 的 nltk 工具包来实现它,如果我没记错的话,它附带了 porter 词干分析器。

© www.soinside.com 2019 - 2024. All rights reserved.