0

(Python を使用して) コーパスで最も使用されている 10 の単語を見つけるために次の定義を使用した後、コーパスのさまざまなサブカテゴリでこれらの 10 の単語のコンテキストを比較する必要があります。

def meest_freq(mycorpus):
    import string
    woorden = mycorpus.words()
    zonderhoofdletters = [word.lower() for word in woorden]
    filtered = [word for word in zonderhoofdletters if word not in stopList]
    no_punct = [s.translate(None, string.punctuation) for s in filtered]
    word_counter = {}
    D = defaultdict(int)
    for word in no_punct:
        D[word] +=1
    popular_words = sorted(D, key = D.get, reverse = True)
    woord1 = popular_words[1]
    woord2 = popular_words[2]
    woord3 = popular_words[3]
    woord4 = popular_words[4]
    woord5 = popular_words[5]
    woord6 = popular_words[6]
    woord7 = popular_words[7]
    woord8 = popular_words[8]
    woord9 = popular_words[9]
    woord10 = popular_words[10]
    print "De 10 meest frequente woorden zijn: ", woord1, ",", woord2, ',', woord3, ',', woord4, ',', woord5, ',', woord6, ',', woord7, ',', woord8, ',', woord9, "en", woord10
    return popular_words

そのために次のコードを使用したかったのです。

def context(cat):
    words = popular_words[:10]
    context = words.concordance()
    print context

残念ながら、私は "AttributeError: 'str' object has no attribute 'concordance'' を取得し続けます 2 番目の定義でコードの最初のブロックの結果を使用できない理由を誰か知っていますか? return-statement を使用して、そうすべきだと思いました働くことができる。

4

1 に答える 1

1

最初のコードブロックの結果を2番目のdefで使用できない理由を誰かが知っていますか?returnステートメントを使用することで、機能するはずだと思いました。

関数は変数を返さないため、値を返します

あなたpopular_wordsが使用するものはから来てcontext いませんmeest_freq; それはどこかのグローバル変数から来ています。中meest_freqpopular_wordsは、地元の人がいます。globalこれはルールによるものです。関数内の名前に割り当てる場合、ステートメントで特に指定しない限り、それはローカルです。ではcontext、への割り当てがないpopular_wordsため、Pythonは代わりにその名前のグローバルを検索します。このグローバルには、おそらくインタープリターで関数をテストしているために、予期しないものが含まれています(おそらく、以前のバージョンの関数のテストと修正から取り残されている可能性があります...)。

このためにグローバル変数を使用しようとしないでください。関数から情報を取得する方法は戻り値を使用することであるというレッスンを正しく学習しました。これに対応するもの。関数に情報を取り込む方法は、パラメーターとして情報を渡すことです。meest_freqコーパスについて知っているのと同じ方法で(として渡したためmycorpus)、context人気のある単語に注意する必要があります。

どこかに、これらの関数の両方を呼び出すコードが必要です。そのコードは、コーパスをに渡したのと同じ方法で、から返されたmeest_freqを取得して、に渡す必要があります。contextmeest_freq

または、コーパスをに渡した場合は、contextそこで電話をかけることができます。あなたの名前のせいで、物事を整理する正しい方法が何であるかを知るのは難しいです。何catを意味するのか、何かと何の関係があるのか​​、この文脈でcontext何を意味するのか、私にはわかりません。concordance

于 2013-01-24T12:39:22.240 に答える