12

nltk pos_tag を使用して、単語が単数形か複数形かを取得しようとしています。しかし、結果は正確ではありません。

では、単語が単数形か複数形かを調べる方法が必要ですか? さらに、pythonパッケージを使用せずに必要です。

4

2 に答える 2

13

英語の場合、すべての単語には、デフォルトの複数形が単数形である語根レンマが必要です。

リストに名詞しかないと仮定すると、これを試すことができます:

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ます。

于 2013-09-20T10:04:06.537 に答える
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 にない (そして英語の単語ではない) からです。

于 2013-09-20T14:46:19.983 に答える