Сложность с analyzer.py, возвращает KeyError: ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \ п"
Вот как выглядит мой код:
import nltk
class Analyzer():
def __init__(self, positives, negatives):
self.positives = set()
self.negatives = set()
file = open(positives, "r")
for line in file:
self.positives.add(line.strip("\n"))
if line.startswith(";"):
self.positives.remove(line)
file.close()
file1 = open(negatives, "r")
for line in file1:
self.negatives.add(line.strip("\n"))
if line.startswith(";"):
self.negatives.remove(line)
file1.close()
def analyze(self, text):
with open("text") as texts:
for lines in texts:
# Get a list of words from the lines in text.
tokens = [self.tokenizer.tokenize(lines)]
# All the words in postive-words and negative-words are lowercased.
if tokens.lower() in self.positives:
return 1
elif tokens.lower() in self.negatives:
return -1
else:
return 0
К сожалению, это, похоже, не работает, и как бы я ни сдвигался по строкам кода, я продолжал получать:
Traceback (most recent call last):
File "./smile", line 32, in <module>
main()
File "./smile", line 20, in main
analyzer = Analyzer(positives, negatives)
File "/home/ubuntu/workspace/pset6/sentiments/analyzer.py", line 13, in __init__
self.positives.remove(line)
KeyError: ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n'
Могу ли я получить подсказку о том, что я делаю неправильно? Буду очень признателен за некоторые советы! Спасибо!
1 ответ
Проблема в том, что вы пытаетесь удалить элемент из набора, которого нет. Вы добавляете line.strip("\n")
к набору, но затем пытается удалить line
из того же набора. Чтобы убедиться, что вы всегда удаляете что-то, действительно присутствующее в наборе, вы можете сделать что-то вроде следующего:
entry = line.strip("\n")
self.positives.add(entry)
if line.startswith(";"):
self.positives.remove(entry)
В приведенном выше коде вы никогда не можете случайно попытаться удалить то, что не присутствует в словаре. Вам придется внести аналогичные изменения при работе с self.negatives
также, но это не должно быть слишком сложно.
В качестве альтернативы вы могли бы просто не добавлять запись в набор, если вы затем удалили бы ее, переставив что-то вроде следующего:
if not line.startswith(";"):
self.positives.add(line.strip("\n"))