nltk pos_tag を使用して、単語が単数形か複数形かを取得しようとしています。しかし、結果は正確ではありません。
では、単語が単数形か複数形かを調べる方法が必要ですか? さらに、pythonパッケージを使用せずに必要です。
nltk pos_tag を使用して、単語が単数形か複数形かを取得しようとしています。しかし、結果は正確ではありません。
では、単語が単数形か複数形かを調べる方法が必要ですか? さらに、pythonパッケージを使用せずに必要です。
英語の場合、すべての単語には、デフォルトの複数形が単数形である語根レンマが必要です。
リストに名詞しかないと仮定すると、これを試すことができます:
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
ます。
英語のソリューションが必要であると仮定すると、 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 にない (そして英語の単語ではない) からです。