生成名词的复数形式

新手上路,请多包涵

给定一个词,它可能是也可能不是单数形式的名词,你将如何生成它的复数形式?

基于这个 NLTK 教程 和这个关于复数规则的 非正式列表,我写了这个简单的函数:

 def plural(word):
    """
    Converts a word to its plural form.
    """
    if word in c.PLURALE_TANTUMS:
        # defective nouns, fish, deer, etc
        return word
    elif word in c.IRREGULAR_NOUNS:
        # foot->feet, person->people, etc
        return c.IRREGULAR_NOUNS[word]
    elif word.endswith('fe'):
        # wolf -> wolves
        return word[:-2] + 'ves'
    elif word.endswith('f'):
        # knife -> knives
        return word[:-1] + 'ves'
    elif word.endswith('o'):
        # potato -> potatoes
        return word + 'es'
    elif word.endswith('us'):
        # cactus -> cacti
        return word[:-2] + 'i'
    elif word.endswith('on'):
        # criterion -> criteria
        return word[:-2] + 'a'
    elif word.endswith('y'):
        # community -> communities
        return word[:-1] + 'ies'
    elif word[-1] in 'sx' or word[-2:] in ['sh', 'ch']:
        return word + 'es'
    elif word.endswith('an'):
        return word[:-2] + 'en'
    else:
        return word + 's'

但我认为这是不完整的。有一个更好的方法吗?

原文由 Cerin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 709
2 个回答

pattern-en 包提供 多元化

>>> import pattern.en
>>> pattern.en.pluralize("dog")
'dogs'
>>>

原文由 arturomp 发布,翻译遵循 CC BY-SA 4.0 许可协议

另一个支持 python 3 的选项是 Inflect

 import inflect
engine = inflect.engine()
plural = engine.plural(your_string)

原文由 alanc10n 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏