次は私のコードです。コメントが見つからない場合は、コードを追加します。文字列の長さが '0'の理由が分かりません
filenames2 = ['BROWN1_L1.txt', 'BROWN1_M1.txt', 'BROWN1_N1.txt', 'BROWN1_P1.txt', 'BROWN1_R1.txt']
with open("C:/Python27/L1_R1_TRAINING.txt", 'w') as outfile:
for fname in filenames2:
with open(fname) as infile:
for line in infile:
outfile.write(line)
b = open("C:/Python27/L1_R1_TRAINING.txt", 'rU')
filenames3 =[]
for path, dirs, files in os.walk("C:/Python27/Reutertest"):
for file in files:
file = os.path.join(path, file)
filenames3.append(file)
with open("C:/Python27/REUTER.txt", 'w') as outfile:
for fname in filenames3:
with open(fname) as infile:
for line in infile:
outfile.write(line)
c = open("C:/Python27/REUTER.txt", 'rU')
def Cross_Entropy(x,y):
filecontents1 = x.read()
filecontents2 = y.read()
sentence1 = filecontents1.upper()
sentence2 = filecontents2.upper()
count_A1 = sentence1.count('A')
count_B1 = sentence1.count('B')
count_C1 = sentence1.count('C')
count_all1 = len(sentence1)
prob_A1 = count_A1/count_all1
prob_B1 = count_B1/count_all1
prob_C1 = count_C1/count_all1
count_A2 = sentence2.count('A')
count_B2 = sentence2.count('B')
count_C2 = sentence2.count('C')
count_all2 = len(sentence2)
prob_A2 = count_A2/count_all2
prob_B2 = count_B2/count_all2
prob_C2 = count_C2/count_all2
Cross_Entropy = -(prob_A1 * math.log(prob_A2, 2) + prob_B1 * math.log(prob_B2, 2) + prob_C1 * math.log(prob_C2, 2)
Cross_Entropy(b, c)
はい。今。私はエラー"prob_A1 = count_A1/count_all1 ZeroDivisionError: division by zero"
を持っています。私のコードに何が問題なの?私の正書法は間違っていますか?
あなたのインデントは意味がありません。また、Pythonでは(Visual Basicとは異なり)関数名に代入することで値を返さないので、 'Cross_Entropy = - (prob_A1')で始まる行は、あなたがしたいことをしません。 - (prob_A1 ... ' –
もう一つのアイデア:デザインの観点からは、' Cross_Entropy'を2つの文字列(2つのファイルハンドルではなく)を必要とする関数にして、ファイルを読み込むロジックを分離することができますクロスエントロピー(それが何であれ)を計算するロジックからです。一般的に、関数は1つだけを実行しようとします。その関数は2つの無関係なものを実行しようとしています。 –
3行目から最後の行それを上書きする。 –