TypeError:list indices必须是整数,而不是str(实际是boolean convertion)

Rok*_*pta 5 python find review movie

import nltk
import random
from nltk.corpus import movie_reviews

documents=[(list(movie_reviews.words(fileid)),category)
           for category in movie_reviews.categories()
           for fileid in movie_reviews.fileids(category)]

random.shuffle(documents)
#print(documents[1])

all_words=[]

for w in movie_reviews.words():
    all_words.append(w.lower())

all_words=nltk.FreqDist(all_words)

word_features = list(all_words.keys())[:3000]

def find_features(document):
    words = set(document)
    features=[]
    for w in word_features:
        features[w]= (w in words)

    return features

print((find_features(movie_reviews.words('neg/cv000_29416.txt'))))

featuresets = [(find_features(rev), category) for (rev,category) in documents]
Run Code Online (Sandbox Code Playgroud)

运行后,我收到错误

features[w]= (w in words)
TypeError: list indices must be integers, not str
Run Code Online (Sandbox Code Playgroud)

请帮我解决一下......

Nic*_*eli 9

只需要进行更改,features必须初始化为dict({})而不是list([]),然后您可以填充它的内容.

TypeError是,因为word_features是名单您所使用的名单,并列出不能有串指数试图索引.

features={}
for w in word_features:
    features[w] = (w in words)
Run Code Online (Sandbox Code Playgroud)

这里,存在的元素word_features构成keys字典,features保持布尔值,True基于是否出现相同的元素words(由于调用而保存唯一的项目set()),False反之亦然.


Mec*_*nic 5

您已尝试features使用字符串索引列表,但无法使用python.列表索引只能是整数.你需要的是一个dictionary.

尝试使用一种defaultdict含义即使在字典中找不到键,而不是KeyError被抛出,也会创建一个新条目

from collections import defaultdict

features = defaultdict()
for w in word_features:
    features[w] = [w in words]
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

43910 次

最近记录:

9 年,2 月 前