2012-04-03 20 views
-6
f=open('new.txt') 
var=f.read() 
var=var.lower() 
var = var.replace(';','') 
var = var.replace(',','') 
var = var.replace('.','') 
x=var.split() 
dict={} 
dictList=[] 
dict2={} 
for i in xrange(0,len(x)-1): 

    if dict.items(): 
     for k in dict.items(): 
      if x[i] not in k: 

       dict[x[i]]=dict2 
       dict2[x[i+1]]=1 

      else: 
       if dict[x[i]].keys(): 
        if x[i+1] in dict[x[i]].keys(): 
         dict[x[i]][x[i+1]]+=1 
        else: 
         dict[x[i]][x[i+1]]=1 
       else: 
        dict[x[i]][x[i+1]]=1 

    else: 

     dict[x[i]]=dict2 
     dict2[x[i+1]]=1 

print dict 

このコードでは、各単語のbigramカウントを出力する必要があります。私はdict2を不適切にインスタンシエートしたと確信しています。私はこれが素朴なエラーであると確信していますが、私は何とかそれを見逃しています。助言がありますか? :)このコードはどこが間違っていますか

+3

どのようなエラーが表示されますか? – PearsonArtPhoto

+3

"何か提案がありますか?"問題を示す最小の例を書いてください。 –

+0

「各単語のバイグラム数を印刷する」とはどういう意味ですか?あなたはnew.txtの例とその出力をどうすればいいのでしょうか? –

答えて

2

私はこのコードをリファクタリングする必要があった場合は、私が見たい:

  • 変数名dictのような名前は、コーダー/メンテナーに何も知らせません。 dictdict2の違いは何ですか?あなたは今日知っているかもしれませんが、明日は...おそらくない
  • /if/for/if/ifの場合はにネストされています。すべてのパスをたどり、起こりうるエラーがないことを確認することは非常に難しいです。別々の関数に分割して、独立してデバッグしてテストすることができます。
  • データ構造。彼らはしばしばプログラムの核心です。しかし、ここには何がありますか?私には分かりません。つまり、コードが何で/何故コードが何をするのかが明白でないことを意味します。
  • エラー処理。可能な/予想されるエラーは何ですか?どちらが処理/無視されますか?
+2

'dict'も、組み込みの辞書クラスと衝突する(上書きする)ため、使用しないでください。 – rplnt

+0

良い点。 'list'、' int'と同じです... –

+0

私はxrange(...)のために 'を追加します:'は物事のコレクションを処理する無名の方法ではありません。代わりに、コレクションを直接ループするか、処理しているアイテムのシーケンス番号を本当に知っていなければならない場合は、 'enumerate()'を使います。 –

関連する問題