Я довольно новичок в Python, и я искал ответы на эту ошибку, но я недостаточно опыт, чтобы точно видеть, где я ошибаюсь - вероятно, что-то действительно основное.
Я работаю над проектом, чтобы идентифицировать авторов на основе слов, которые они используют в своих текстах. Я добавляю слова в словарь для каждого автора, со словом в качестве ключа, а значение - это количество раз, когда слово встречается в текстах этого автора. Я также создаю словарь всех слов всех авторов и использую их для вычисления вероятностей. Это работает отлично, изначально.
. Моя проблема возникает, когда я добавляю в k-fold cross validation, которую я использую, поскольку мой корпус не особо большой. Я перебираю список имен авторов, который соответствует имени, которое я присвоил их пустому словарю. Как только я извлечу нужные файлы, я хочу добавить очищенный/проанализированный текст в словарь, но я получаю вышеуказанную ошибку, которая ссылается на строку author [word] = 1 в моем словаре fn, что я вызовите вторую вторую строку кода ниже. Из моего чтения других ответов, это сделать, чтобы str была неизменной, но я просто не вижу, как применить ответы на мою проблему. ваша помощь очень ценится! Ps Я знаю, что есть библиотеки и т. Д., Которые могут выполнять всю эту работу, но вся идея проекта состоит в том, чтобы построить мою собственную модель и сравнить ее с другими моделями.Ошибка Python: объект 'str' не поддерживает назначение объектов
path = "C:\\......\The Letters\\"
#create an empty vocab set
vocab = set()
stop = stopwords.words('english')
snowball = SnowballStemmer('english')
#create empty dictionary for each author
AuthorA = {}
AuthorB = {}
AuthorC = {}
authorList = ["AuthorA","AuthorB","Authorc"]
#function to preprocess the words. Opens & reads file, removes non alphabet
#characters, converts to lowercase, and tokenizes
def cleanText(path,author,eachfile):
f= open(path+author+"\\"+eachfile, "r")
contents = f.read()
strip = re.sub('[^a-zA-Z]',' ',contents)
lowerCase = strip.lower()
allwords = lowerCase.split()
return allwords
#function to add words to the vocabulary set
def createVocab(allwords):
for word in allwords:
if len(word)>= 4:
vocab.update(allwords)
return
#function to add words to author dictionary and count occurrences of each word
def dictionary(allwords, author):
for word in allwords:
if len(word)>= 4:
if word in author:
author[word]= author[word]+1
else:
author[word]= 1
return
def main():
global authorList
global path
global vocab
global AuthorA
global AuthorB
global AuthorC
for author in authorList:
#filename and path
listing = os.listdir(path+author)
#specify parameters for k fold validation
#split into 10 folds and take a file form each fold
#repeat for until the entire directory has been split
folds = 10
subset_size = len(path+author)/folds
for i in range(folds):
#use these files to train the model
current_train = listing[:i*subset_size:]+listing[(i+1)*subset_size:]
#use these files to test the model
current_test = listing[i*subset_size:][:subset_size]
#iterate through the files selected by current_train variable
for eachfile in current_train:
#call function to parse text
allwords = cleanText(path,author,eachfile)
#call fn to add words to dictionary
dictionary(allwords, author)
#call fn to add words to vocab
createVocab(allwords)
На какой линии вы получаете сообщение об ошибке? –
Пожалуйста, ознакомьтесь с [Как задать хороший вопрос?] (Http://stackoverflow.com/help/how-to-ask) и [Как создать минимальный, полный и проверенный пример] (http: //stackoverflow.com/help/mcve). Вопрос, как заявлено сейчас, слишком широк для стандартов SO. Кроме того, позаботьтесь об углублении. В Python отступ является частью синтаксиса, а в вашем коде он выглядит подозрительно. –
ошибка, когда я вызываю функцию словаря на второй последней строке и ссылается на else: author [word] = 1. Я думаю, что D.Cam ответил, мне просто нужно выяснить коллекции сейчас! – magsw