2016-10-26 3 views
0

У меня есть небольшая ошибка с ошибкой, но я не могу ее найти. Мое намерение - сравнить текстовый файл, содержащий эти слова.ZeroDivisionError, но я не могу найти ошибку

secondly 
pardon 
woods 
secondly 

Я написал сценарий для сравнения двух значений таким образом:

secondly, pardon 
secondly, woods 
secondly, secondly 
pardon, woods 
pardon, secondly 
woods, secondly 

Мой код выполняет следующие действия:

1) если слова такие же, это даст 1 балл в противном случае это оценка, рассчитанная векторной моделью gensim 2) есть счетчик, и счетчик сбрасывается, когда первый цикл цикла переходит к следующему слову. Например, во-вторых, помилование> во-вторых, леса> во-вторых, во-вторых (в этот момент счетчик равен 3)

Код

from __future__ import division 
import gensim 


textfile = 'businessCleanTxtUniqueWords' 
model = gensim.models.Word2Vec.load("businessSG") 
count = 0 # keep track of counter 
score = 0 
avgScore = 0 
SentenceScore = 0 
externalCount = 0 
totalAverageScore = 0 

with open(textfile, 'r+') as f1: 

    words_list = f1.readlines() 

    for each_word in words_list: 
     word = each_word.strip() 

     for each_word2 in words_list[words_list.index(each_word) + 1:]: 
      count = count + 1 

      try: 
       word2 = each_word2.strip() 
       print(word, word2) 
       # if words are the same 
       if (word == word2): 
        score = 1 
       else: 
        score = model.similarity(word,word2) # when words are not the same 
      # if word is not in vector model 
      except KeyError: 
       score = 0 
      # to keep track of the score 
      SentenceScore=SentenceScore + score 

      print("the score is: " + str(score)) 
      print("the count is: " + str(count)) 
     # average score 
     avgScore = round(SentenceScore/count,5) 

     print("the avg score: " + str(SentenceScore) + '/' + str(count) + '=' + str(avgScore)) 
     # reset counter and sentence score 
     count = 0 
     SentenceScore = 0 

Сообщение об ошибке:

Traceback (most recent call last): 
    File "C:/Users/User/Desktop/Complete2/Complete/TrainedTedModel/LatestJR.py", line 41, in <module> 
    avgScore = round(SentenceScore/count,5) 
ZeroDivisionError: division by zero 
('secondly', 'pardon') 
the score is: 0.180233083443 
the count is: 1 
('secondly', 'woods') 
the score is: 0.181432347816 
the count is: 2 
('secondly', 'secondly') 
the score is: 1 
the count is: 3 
the avg score: 1.36166543126/3=0.45389 
('pardon', 'woods') 
the score is: 0.405021005657 
the count is: 1 
('pardon', 'secondly') 
the score is: 0.180233083443 
the count is: 2 
the avg score: 0.5852540891/2=0.29263 
('woods', 'secondly') 
the score is: 0.181432347816 
the count is: 1 
the avg score: 0.181432347816/1=0.18143 

Я включил «from __future__ import division» для дивизии, но, похоже, не исправил его

Мои файлы можно найти в следующей ссылке:

Gensim модель:

https://entuedu-my.sharepoint.com/personal/jseng001_e_ntu_edu_sg/_layouts/15/guestaccess.aspx?guestaccesstoken=BlORQpsmI6RMIja55I%2bKO9oF456w5tBLR43XZdVCQIA%3d&docid=00459c024d33d48638508dd331cf73144&rev=1&expiration=2016-11-25T23%3a56%3a48.000Z

Textfile:

https://entuedu-my.sharepoint.com/personal/jseng001_e_ntu_edu_sg/_layouts/15/guestaccess.aspx?guestaccesstoken=7%2b8Nkm9BySPFR0zqD%2fdgUcYOaXREG3%2fycALnMFcv59A%3d&docid=08158c442c3f74970bc8090f253b499f8&rev=1&expiration=2016-11-25T23%3a56%3a01.000Z

Спасибо.

+2

'count', вероятно, равен нулю, потому что ваш первый' words_list [words_list.index (each_word) + 1:] ', вероятно, пуст. – kichik

+0

Привет, кичик, я действительно не понимаю. вы можете объяснить немного больше, пожалуйста. Спасибо – windboy

+0

Вы внимательно изучили свою ошибку? Он должен указать номер строки и фрагмент ошибочного кода. –

ответ

1

Это потому, что первый цикл for достиг последнего слова, а второй цикл for не будет выполнен, и поэтому count равен нулю (сбрасывается на ноль в последней итерации). Просто измените первый for цикл игнорировать последнее слово (так как это не является необходимым):

for each_word in words_list[:-1]: 
+0

Большое спасибо. Вы правы, вот в чем проблема. Еще раз спасибо. – windboy

1

линия, которая идет не так прямо сказано в сообщении об ошибке:

Traceback (most recent call last): 
    File "C:/Users/User/Desktop/Complete2/Complete/TrainedTedModel/LatestJR.py", line 41, in <module> 
    avgScore = round(SentenceScore/count,5) 
ZeroDivisionError: division by zero 

так что я будем считать, что SentenceScore/count является деление на вопрос, так что ясно, что count является 0, я хотел бы предложить прямо перед этой линии вы добавить что-то вроде:

print("SentenceScore is",SentenceScore, "and count is",count) 

, так что вы можете увидеть это для себя, теперь, так как внутренний цикл:

для each_word2 в words_list [words_list.index (each_word) + 1]: кол = кол + 1

это единственное, что добавляет к счету, и счетчик сбрасывается до нуля в конце каждой итерации внешнего цикла, что означает, что внутренний цикл в какой-то момент не выполняется вообще, а это означает, что words_list[words_list.index(each_word) + 1:] является пустой последовательностью.Это произойдет, когда each_word последнее слово в words_list.

+0

спасибо. – windboy

Смежные вопросы