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]
After run, I am getting the error
features[w]= (w in words)
TypeError: list indices must be integers, not str
Please help me to solve it...
The Python "TypeError: list indices must be integers or slices, not str" occurs when we use a string instead of an integer to access a list at a specific index. To solve the error, use the int() class to convert the string to an integer, e.g. my_list[int(my_str)] .
The Python "TypeError: string indices must be integers" occurs when we use a non-integer value to access a string at an index. To solve the error, make sure to use an integer, e.g. my_str[2] or a slice, e.g. my_str[0:3] when accessing a string at a specific index.
The Python "TypeError: list indices must be integers or slices, not tuple" occurs when we pass a tuple between the square brackets when accessing a list at index. To solve the error, make sure to separate nested list elements with commas and correct the index accessor.
The typeerror: string indices must be integers indicates that we are attempting to access a value from an iterable using a string index rather than an integer index. The iterable objects are indexed using numbers. Therefore, an error will be returned when you try to obtain an iterable object using a string value.
Only change that needs to be made is that features must be initialized to a dict ({}) rather than a list ([]) and then you could populate it's contents.
The TypeError was because word_features is a list of strings which you were trying to index using a list and lists can't have string indices.
features={}
for w in word_features:
features[w] = (w in words)
Here, the elements present in word_features constitute the keys of dictionary, features holding boolean values, True based on whether the same element appears in words (which holds unique items due to calling of set()) and False for the vice-versa situation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With