【问题标题】:How do I get the base of a synonym/plural of a word in python?如何在python中获得同义词/复数词的基础?
【发布时间】:2019-07-12 19:30:21
【问题描述】:

我想使用 python 将单词的所有同义词和复数形式转换为单词的基本版本。

例如婴儿会变成婴儿,婴儿和婴儿也会变成婴儿。

我尝试为根代码创建一个朴素的复数版本,但它的问题是它并不总是能正常工作并且无法检测到大量案例。

contents = ["buying", "stalls", "responsibilities"]
for token in contents:
    if token.endswith("ies"):
        token = token.replace('ies','y')
    elif token.endswith('s'):
        token = token[:-1]
    elif token.endswith("ed"):
        token = token[:-2]
    elif token.endswith("ing"):
        token = token[:-3]

print(contents)

【问题讨论】:

  • 这是大型团队花费数千小时工作的那种功能。你的解决方案应该在这里有多幼稚?
  • 这将是艰难的。你打算如何处理像“geese”或“cacti”这样的复数词?或者其他诸如“吊索”、“床”、“玻璃”之类的词?你应该专注于搜索外部语言库来做这件事,而不是试图自己制定一般规则。
  • @JacobIRR 我同意你们俩的观点。它主要是一个简单的实现,看看如何快速有效地把一些东西拼凑在一起会覆盖一些基础,并提供一个例子,它并不是真正的解决方案。

标签: python python-3.x dictionary linguistics plural


【解决方案1】:

我以前没有使用过这个库,所以对此持保留态度。但是,NodeBox Linguistics 似乎是一组合理的脚本,如果您在 MacOS 上,它们将完全满足您的需求。查看此处的链接:https://www.nodebox.net/code/index.php/Linguistics

根据他们的文档,您似乎可以使用这样的行:

print( en.noun.singular("people") )
>>> person

print( en.verb.infinitive("swimming") )
>>> swim

etc.

除了上面的例子,另一个需要考虑的是自然语言处理库,比如NLTK。我推荐使用外部库的原因是因为英语有很多例外。正如我在评论中提到的,请考虑以下词语:class、fling、red、geese 等,这会违反原始问题中提到的规则。

【讨论】:

  • 这似乎是一个很好的解决方案,谢谢。我现在会考虑实施它。有什么方法可以处理同义词吗?我还想将所有具有相同含义的单词转换为一个单词,例如婴儿和婴儿都会变成婴儿。不过,我现在将使用语言学来解决主要问题,谢谢。
  • 再说一次,我以前从未使用过那个库,但我在答案中分享的链接也有一个词汇表、同义词、反义词等部分。
  • 该库似乎仅适用于 MacOS,并且仅在 nodebox 环境中运行,因此不是很有用。
  • 抱歉,这不适合您的情况。不过,我想你明白我的意思。自己写这个很复杂,所以最好找一个外部库。用于自然语言处理的 NLTK 是另一种查找选项。它也依赖于 Wordnet 数据库,所以应该给出与我上面描述的相同的结果。
  • 我在pattern.en找到了我的解决方案,仅供大家日后参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2013-02-26
  • 2013-10-21
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多