>> from nltk.stem import WordNetLemmatizer as lm1
>> from nltk import WordNetLemmatizer as lm2
>> from nltk.stem.wordnet import WordNetLemmatizer as lm3
私にとっては、3つの方法はすべて同じ方法ですが、確認するだけで何か違うものを提供していますか?なぜNLTKライブラリにLemmatizersがありますか?
>> from nltk.stem import WordNetLemmatizer as lm1
>> from nltk import WordNetLemmatizer as lm2
>> from nltk.stem.wordnet import WordNetLemmatizer as lm3
私にとっては、3つの方法はすべて同じ方法ですが、確認するだけで何か違うものを提供していますか?なぜNLTKライブラリにLemmatizersがありますか?
いいえ、違いはありません。すべて同じです。クラス(WordNetLemmatizer
)はoriganlly nltk.stem.wordnetで書かれている
はそうあなたもそうNLTK __init__.py fileにインポートされfrom nltk.stem.wordnet import WordNetLemmatizer as lm3
あなたの操作を行うことができますので、なぜこれが起こっているeripによって修正したよう
from nltk.stem import WordNetLemmatizer as lm1
from nltk import WordNetLemmatizer as lm2
from nltk.stem.wordnet import WordNetLemmatizer as lm3
lm1 == lm2
>>> True
lm2 == lm3
>>> True
lm1 == lm3
>>> True
ですできるかfrom nltk import WordNetLemmatizer as lm2
また、__init__.py nltk.stemモジュールにインポートされますので、from nltk.stem import WordNetLemmatizer as lm1
回答:これらはすべて同じです。
inspect
役立つツールはオブジェクトが同じ
>>> import inspect
>>> from nltk.stem import WordNetLemmatizer as wnl1
>>> from nltk.stem.wordnet import WordNetLemmatizer as wnl2
>>> inspect.getfile(wnl1)
'/Library/Python/2.7/site-packages/nltk/stem/wordnet.pyc'
# They come from the same file:
>>> inspect.getfile(wnl1) == inspect.getfile(wnl2)
True
>>> print inspect.getdoc(wnl1)
WordNet Lemmatizer
Lemmatize using WordNet's built-in morphy function.
Returns the input word unchanged if it cannot be found in WordNet.
>>> from nltk.stem import WordNetLemmatizer
>>> wnl = WordNetLemmatizer()
>>> print(wnl.lemmatize('dogs'))
dog
>>> print(wnl.lemmatize('churches'))
church
>>> print(wnl.lemmatize('aardwolves'))
aardwolf
>>> print(wnl.lemmatize('abaci'))
abacus
>>> print(wnl.lemmatize('hardrock'))
hardrock
あなたはあまりにもソースコードを確認することができているかどうかを確認する:
>>> print inspect.getsource(wnl1)
class WordNetLemmatizer(object):
"""
WordNet Lemmatizer
Lemmatize using WordNet's built-in morphy function.
Returns the input word unchanged if it cannot be found in WordNet.
>>> from nltk.stem import WordNetLemmatizer
>>> wnl = WordNetLemmatizer()
>>> print(wnl.lemmatize('dogs'))
dog
>>> print(wnl.lemmatize('churches'))
church
>>> print(wnl.lemmatize('aardwolves'))
aardwolf
>>> print(wnl.lemmatize('abaci'))
abacus
>>> print(wnl.lemmatize('hardrock'))
hardrock
"""
def __init__(self):
pass
def lemmatize(self, word, pos=NOUN):
lemmas = wordnet._morphy(word, pos)
return min(lemmas, key=len) if lemmas else word
def __repr__(self):
return '<WordNetLemmatizer>'
# They have the same source code too:
>>> print inspect.getsource(wnl1) == inspect.getsource(wnl2)
True
WordNetLemmatizer
ためNLTKでの輸入の構造は次のようになります。
\nltk
__init__.py
\stem.
__init__.py
wordnet.py # This is where WordNetLemmatizer code resides.
from nltk.stem.wordnet import WordNetLemmatizer
をnltk.stemから:あなたが行うことができますのでWordNetLemmatizer
は、nltk.stem.wordnet.py
https://github.com/nltk/nltk/blob/develop/nltk/stem/wordnet.py#L15にどこにある最低。 のinitの.py、我々はあなたが我々が見るnltk.__init__.py
から
from nltk.stem import WordNetLemmatizer
を行うことができるようにnltk.stem
は、WordNetLemmatizerにアクセスすることを可能にするhttps://github.com/nltk/nltk/blob/develop/nltk/stem/init.py#L30で上記のインポートを参照してください。
from nltk.stem import *
を最上位レベルnltk
を可能にしますnltk.stem
にアクセスできるすべてのものにアクセスするためにインポートします。だから、トップレベルnltk
で、我々は行うことができます。しかし、注意すべき
from nltk import WordNetLemmatizer
一つのことを、それは常に同じ名前を持つオブジェクト/モジュールがNLTKで同じオブジェクトを参照する場合ませです、例えば:
>>> from nltk.corpus import wordnet as wn1
>>> from nltk.corpus.reader import wordnet as wn2
>>> wn1 == wn2
False
>>> wn1.synsets('dog')
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]
>>> wn2.synsets('dog')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'synsets'
最初のWordNet wn1
はnltk_data
でWordNetのファイルを開きますLazyCorpusLoader
オブジェクトであり、それはあなたがのsynsetにアクセスすることができます:https://github.com/nltk/nltk/blob/develop/nltk/corpus/init.py#L246
二wn2
はnltk.corpus.wordnet.py
に常駐wordnet.py
ファイルそのものであります:https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py
それも、よりトリッキー取得するとき:
>>> from nltk.corpus import wordnet as wn1
>>> from nltk.corpus.reader import wordnet as wn2
>>> from nltk.stem import wordnet as wn3
>>> wn3 == wn1
False
>>> wn3 == wn2
False
wn3
の場合はnltk.stem.wordnet.py
というファイルにはWordNetLemmatizer
が含まれており、wordnet corpusオブジェクトやwordnetのコーパスリーダーとは関係ありません。
最後の点は間違っています。 NLTKはこれを隠すために '__init __。py'を使います。言語のインポートメカニズムの効率とは何の関係もありません。 [ここ](https://github.com/nltk/nltk/blob/develop/nltk/__init__.py#L137)、[ここ](https://github.com/nltk/nltk/blob/develop/)を参照してください。 nltk/stem/__ init __。py#L30)、[ここ](https://github.com/nltk/nltk/blob/develop/nltk/stem/wordnet.py#L15)を参照してください。 – erip
Thanks @eripが答えを更新しました。 – harshil9968