如何在python中测试一个单词是否是单数形式?

时间:2013-09-20 07:53:58

标签: python-2.7 nlp nltk wordnet

我试图通过使用nltk pos_tag来判断一个单词是单数形式还是复数形式。但结果并不准确。

所以,我需要一种方法来找到一个单词是单数形式还是复数形式?而且我需要它而不使用任何python包。

2 个答案:

答案 0 :(得分:10)

对于英语,每个单词都应该以某种方式具有根引理,其中默认的多数是单数。

假设你的名单中只有名词,你可以试试这个:

from nltk.stem import WordNetLemmatizer

wnl = WordNetLemmatizer()

def isplural(word):
    lemma = wnl.lemmatize(word, 'n')
    plural = True if word is not lemma else False
    return plural, lemma

nounls = ['geese', 'mice', 'bars', 'foos', 'foo', 
                'families', 'family', 'dog', 'dogs']

for nn in nounls:
    isp, lemma = isplural(nn)
    print nn, lemma, isp

当word不在wordnet 时,你会遇到问题,那么你必须在NLTK中使用更复杂的classifierfinite state machines

答案 1 :(得分:7)

假设您需要英语解决方案,您可以使用pattern-en更直接地执行与2er0解决方案类似的操作:

from pattern.en import singularize

def isplural(pluralForm):
     singularForm = singularize(pluralForm)
     plural = True if pluralForm is not singularForm else False
     return plural, singularForm

nounls = ['geese', 'mice', 'bars', 'foos', 'foo', 
            'families', 'family', 'dog', 'dogs']

for pluralForm in nounls:
    isp, singularForm = isplural(pluralForm)
    print pluralForm, singularForm, isp

输出

geese goose True
mice mouse True
bars bar True
foos foo True
foo foo False
families family True
family family False
dog dog False
dogs dog True

2er0解决方案之间输出的唯一区别是

foos foo True

因为他的解决方案输出False,因为他指出foos不在wordnet中(而不是英文单词)。