Difficulty with analyzer.py, returns KeyError: ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n'
Difficulty with analyzer.py, returns KeyError: ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n'
我的代码如下所示:
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'
我可以提示一下我做错了什么吗?真的很感激一些提示!谢谢!
问题是您正试图从集合中删除不存在的项目。您正在将 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"))
我的代码如下所示:
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'
我可以提示一下我做错了什么吗?真的很感激一些提示!谢谢!
问题是您正试图从集合中删除不存在的项目。您正在将 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"))