2016-11-09 3 views

답변

5

아니요 서로 다르지 않습니다. 모두 동일합니다.

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 

erip에 의해 수정으로이 일어나는 이유 때문입니다 :

이 클래스 ( WordNetLemmatizer가) origanlly nltk.stem.wordnet로 작성

그래서 당신이 할 수도 NLTK __init__.py file 그래서 당신이 수입되어 from nltk.stem.wordnet import WordNetLemmatizer as lm3

할 수있다 from nltk import WordNetLemmatizer as lm2

그리고 또한 __init__.py nltk.stem 모듈로 가져올 수 있습니다. from nltk.stem import WordNetLemmatizer as lm1

+3

마지막 요일이 잘못되었습니다. 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

+0

감사합니다. @erip이 답변을 업데이트했습니다. – harshil9968

1

답변 : 모두 동일합니다.

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. 

WordNetLemmatizernltk.stem.wordnet.pyhttps://github.com/nltk/nltk/blob/develop/nltk/stem/wordnet.py#L15에 상주하는 가장 낮은, 그래서 당신은 할 수 있습니다 : nltk.stem에서

from nltk.stem.wordnet import WordNetLemmatizer 

. 당신은 우리가 볼 수 nltk.__init__.py에서

from nltk.stem import WordNetLemmatizer 

을 할 수 있도록 초기화 평, 우리는 WordNetLemmatizer에 액세스 할 수 nltk.stem 수 있습니다 https://github.com/nltk/nltk/blob/develop/nltk/stem/init.py#L30에서 위의 가져 오기를 참조하십시오

최상위 수준을 허용
from nltk.stem import * 

nltknltk.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' 

첫 번째 워드 넷은 wn1nltk_data의 워드 넷 파일을 열 것입니다 LazyCorpusLoader 객체이고 그것을 당신이 synset을 액세스 할 수 있습니다 : https://github.com/nltk/nltk/blob/develop/nltk/corpus/init.py#L246

두 번째 wn2nltk.corpus.wordnet.py에있는 wordnet.py 파일 자체입니다 : https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py

그것은 훨씬 더 까다로운 얻을 때 :

,294,846,

wn3의 경우 nltk.stem.wordnet.py 파일에 WordNetLemmatizer이 포함되어 있으며 wordnet corpus 객체 또는 wordnet에 대한 corpus reader와 아무 관련이 없습니다.