我试图从一个句子中获取三字母并将它们保存在字典中,并以它们的频率作为值。 我写了这个:
trigrams = {}
sentence = ["What", "is", "happening", "right", "now"]
for word in sentence:
if word != sentence[-1] or sentence[-2] and tuple((word, sentence[sentence.index(word) +1], sentence[sentence.index(word) +2])) not in trigrams:
trigrams.update({tuple((word, sentence[sentence.index(word) +1], sentence[sentence.index(word) +2])):1})
应该是这样的: ("什么""是""发生&#34):1 ("是""发生""右&#34):1 等
但是现在我一直在更新行中得到一个IndexError。
答案 0 :(得分:0)
您可以使用列表,因为元组的内容都是相同的数据类型(字符串)
这可能更容易:
trigrams = []
sentence = ["What", "is", "happening", "right", "now"]
for i in range(2,len(sentence)):
trigrams.append([sentence[i-2],sentence[i-1],sentence[i]])
答案 1 :(得分:0)
我猜if word != sentence[-1] or sentence[-2]
不是你想要的。您的意思是if word != sentence[-1] and word != sentence[-2]
,意味着word
不等于sentence[-1]
还是sentence[-2]
?
答案 2 :(得分:0)
鉴于您希望将代码结构与元组保持一致并最小化代码,您可以这样做(不要说这可能是解决您问题的好方法等):
trigrams = {}
sentence = ["What", "is", "happening", "right", "now"]
for index, word in enumerate(sentence):
print index, word # to understand how the iteration goes on
if index < len(sentence)-2:
if tuple((word, sentence[index+1], sentence[index+2])) not in trigrams:
trigrams.update({tuple((word, sentence[index+1], sentence[index+2])):1})
您收到索引错误,因为您正在访问tuple()中不存在的元素...因为您正在检查是否接近列表末尾(最后两个元素)的方式)做得不对。
您使用的代码:
if word != sentence[-1] or sentence[-2]
是不对的,你最终比较字符串而不是索引,这是重要的!比较索引,而不是那些位置的值。