1

私のプログラムにはclass Wordsdefaultdict(int)namedt_e_fがオブジェクトとして作成される場所とmain()、辞書't_e_f'の値を使用して他の計算を計算する関数へのポインターを含む関数があります。't_e_f'は、キーとして単語のタプルを持ち、値として浮動小数点数を持つ辞書です。私のプログラムは次のようになります。

class Words:
     def __init__(init):
       self.t_e_f=Words.set_t_e_f(self)
     def set_t_e_f(self):
        raw_text_e=open_file('toyen')
        raw_text_f=open_file('toyde')

        tokens_e=raw_text_e.split()
        tokens_f=raw_text_f.split()+['NULL'] 

        tef_dict=collections.defaultdict(int)           
        for word_e in tokens_e_set:
            for word_f in tokens_f_set:
                tef_dict[(word_e,word_f)]=1/len(tokens_e_set)
        return tef_dict

     def get_t_e_f(self):
        return self.t_e_f
def main():
     words=Words()
     t_e_f=words.get_t_e_f()
     s_total_e=normalization(t_e_f)

次に、それnormalizationt_e_f使用して、正規化関数で作成された別のディクショナリの値の計算を計算する関数がありs_total_eます。

def normalization(t_e_f):
    s_total_e=collections.defaultdict(int)

    words_sent_e=['the','big','book']
    words_sent_de=['das','grosse','buch']
    for item in words_sent_e:
         s_total_e[item]
    for item in words_sent_e:
        for item_2 in words_sent_de:
             s_total_e[item]+=t_e_f[(item,item_2)]

問題は、t_e_f正規化に渡されると、すべての値が0に設定されるため、wordsオブジェクトが作成されたときに設定された初期値が失われることです。何が起こっているのか、そしてこの問題をどのように解決するのか疑問に思いました。ありがとうございました。

4

1 に答える 1

1

tef_dict変数はインスタンスに保存されておらず、返されていません。次の行を追加しset_t_e_f()ます:

return tef_dict

また、欠落しているキーを検索または検査するだけの場合でも、defaultdictは自動的にゼロエントリを追加することに注意してください。

collections.Counter()代わりに使用したほうがよい場合があります。defaultdictとは異なり、欠落しているキーに対してゼロを返しますが、基になるディクショナリにそれらを追加しません。

于 2013-01-27T03:22:24.267 に答える