2011-11-03 9 views
2

は以下の蘭語で何をするかわからない:NLTK lemmatizerは、アメリカ人は

from nltk import WordNetLemmatizer as wnl 
wnl().lemmatize("American") 
wnl().lemmatize("Americans") 

どちらも単にその引数を返します。私はアメリカ人がアメリカ人に減らすことを願っています。誰にもこれをどうやって起こらせるか考えていますか?

私はlemmatizerが使用している内部辞書を変更する必要があると仮定しました。これは正しいです?誰ももっと良い方法を知っていますか?

ありがとうございます!

+0

、それらの両方がAmerica' 'に見出し語化された場合、それは私にとってより自然に見えるでしょう。 – RoundTower

答えて

0

単語を小文字に変換してから字句解析ツールに渡してから、後で復元することができます。

は、私が過去にこのコードを使用しています

word = 'Americans' 
lemmatized = wnl().lemmatize(word.lower()) 
if word.istitle(): 
    word = lemmatized.capitalize() 
else: 
    word = lemmatized 
# word = 'American' 

これは私の場合も同様だった(「マイスペース」のような)言葉で複数の大文字のない場合は存在しないことを前提としていその時。複数の大文字の単語は固有名詞になる傾向があり、通常はそれらを部分集合化する必要はないため、これは一般的に真実だと思います。

あなたはすべて大文字の単語と懸念している場合は、そのケースを含めることができます。

word = 'AMERICANS' 
lemmatized = wnl().lemmatize(word.lower()) 
if word.istitle(): 
    word = lemmatized.capitalize() 
elif word.upper()==word: 
    word = lemmatized.upper() 
else: 
    word = lemmatized 
# word = 'AMERICAN' 
4

明らかにWordNetの場合は問題ですが、PorterStemmerも使用できます。

>>> wnl().lemmatize('americans') 
'american' 
>>> from nltk.stem import PorterStemmer as ps 
>>> ps().stem('Americans') 
'American' 
+2

お返事ありがとうございます。私はステマーを使用したくないのです。なぜなら、これらの表現可能な辞書の言葉が大部分のために必要であるからです(アメリカはテキストの段落にあります)。アメリカ人は形容詞でも名詞でもかまいません。 「アメリカ人は市場に行った」対「彼はアメリカ市場に行った」私は彼らがもう同じ語彙のすべてではないと言っていると思います。 – Maus