-1

私はNLTK&から始めましたが、コーパスの構造Pythonに本当に混乱しています。NLTK例えば

  1. nltk.corpus モジュールに単語を 2 回追加する必要がある理由を理解できません。

    wordlist=[w for w in nltk.corpus.words.words('en') if w.islower()]

  2. また、nltk.corpus.words と nltk.corpus.words.words ではキープの型が異なります。なぜそうなのですか?

    type(nltk.corpus) nltk.corpus type(nltk.corpus.words) nltk.corpus.words type(nltk.corpus.words.words) nltk.corpus.words.words C:\\Documents and Settings\\Administrator\ \nltk_data\\corpora\\words'>>

  3. nltk.corpus第三に、単語リストを生成するために単語を 2 回追加する必要があることをどのように知ることができますか。nltk.corpus.words電話との違いは何nltk.corpus.words.wordsですか?

誰か詳しく教えてください。現在、NLTK本の第3章を進めるのが難しくなっています。

ありがとうございます

4

1 に答える 1

2

本当に簡単wordsです。含まれているクラス インスタンスの名前nltk.corpus、関連するコードは次のとおりです。

words = LazyCorpusLoader('words', WordListCorpusReader, r'(?!README|\.).*')

これが言っているのは、それwordsが のインスタンスであるということだけですLazyCorpusLoader

だからあなたはnltk.corpus.wordsそれへの参照として取得します。

ちょっと待って!

のコードを見ると、もLazyCorpusLoader呼び出します。LazyCorpusLoaderWordListCorpusReader

WordListCorpusReaderという名前のメソッドがありwords、次のようになります。

def words(self, fileids=None):
    return line_tokenize(self.raw(fileids)) 

そしてLazyCorpusLoader、これを行いますcorpus = self.__reader_cls(root, *self.__args, **self.__kwargs)

基本的に、それが行うのは(独自のwordsメソッドを持つ)self.__reader__clsのインスタンスを作成することです。WordListCorpusReader

次に、これを行います。

self.__dict__ = corpus.__dict__ 
self.__class__ = corpus.__class__ 

Python docs によると__dict__ is the module’s namespace as a dictionary object。したがって、名前空間を の名前空間に変更していますcorpus。同様に__class__、ドキュメントでは と言う__class__ is the instance’s classので、クラスも変更されます。そのnltk.corpus.words.wordsため、 という名前のインスタンスに含まれるインスタンス メソッド ワードを参照しますwords。それは理にかなっていますか?次のコードは、同じ動作を示しています。

class Bar(object):
    def foo(self):
        return "I am a method of Bar"

class Foo(object):
    def __init__(self, newcls):
        newcls = newcls()
        self.__class__ = newcls.__class__
        self.__dict__ = newcls.__dict__

foo = Foo(Bar)
print foo.foo()

また、ソースへのリンクもありますので、自分で確認してください。

http://nltk.googlecode.com/svn/trunk/doc/api/nltk.corpus-pysrc.html

http://nltk.googlecode.com/svn/trunk/doc/api/nltk.corpus.reader.wordlist-pysrc.html#WordListCorpusReader

于 2013-05-31T06:44:08.803 に答える