0

ストップワードを使用してPythonで自動言語検出を行っています

しかし、コードをテストしようとすると KeyError が発生します。これがコードです

import nltk
from nltk.corpus import stopwords

def scoreFunction(wholetext):
    dictiolist={}
    scorelist={}
    NLTKlanguage = ["dutch","finnish","german","italian","portuguese","spanish","turkish","danish","english"," french","hungarian","norwegian","russian","swedish"]
    FREElanguages = [""]
    languages= NLTKlanguages + FREElanguages
    for lang in NLTKlanguages:
        dictiolist[lang]=stopwords.words(lang)
        tokens=nltk.tokenize.word_tokenize(wholetext)
        tokens=[t.lower() for t in tokens]
        freq_dist=nltk.FreqDist(tokens)
    for lang in languages:
        scorelist[lang]=0
    for word in freq_dist.keys()[0:20]:
        if word in dictiolist[lang]:
            scorelist[lang]+=1
    return scorelist

def whichLanguage(scorelist):
    maximum=0
    for item in scorelist:
        value = scorelist[item]
        if maximum<value:
            maximum = value
            lang = item
    return lang

実行すると、scoreFunction("hillo my name is osfar and i'm genius") というエラーが表示されます Traceback (most recent call last): File "", line 1, in

scoreFunction("hello my name is osfar and i'm very genius") 
File "C:/Users/osama1/Desktop
/fun-test", line 17, in scoreFunction 
if word in dictiolist[lang]:
KeyError: ''
4

1 に答える 1

1

問題は次のコード ブロックにあります。

for word in freq_dist.keys()[0:20]:
    if word in dictiolist[lang]:
    scorelist[lang]+=1

この for ループで変数を使用してlangいますが、どこにも定義していません。つまり、その値は未定義です。たまたま、その値は "" (空の文字列) です。これは、前の for ループでの最後の値であるためです。

あなたが明らかに意図したことは次のとおりです。

for word in freq_dist.keys()[0:20]:
    for lang in languages:
        if word in dictiolist[lang]:
        scorelist[lang]+=1

ところで、あなたがしようとしていることをより簡単に行う方法があります: カウンターを使用します。詳細については、 http://docs.python.org/2.7/library/collections.html#counter-objectsを参照してください。

于 2013-04-24T08:56:09.773 に答える