Следуя руководству StackAbuse, но оно не работает

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

Я следую этому руководству по сети, генерирующей текст rnn, используя tensorflow и numpy. Я следовал руководству почти слово в слово, но 23 и 26 он обнаружил ошибку из-за «ошибки типа: может присоединиться только к interable». Я не уверен, что это может означать, поскольку я в значительной степени копировал руководство. У кого-нибудь есть идея относительно того, в чем может быть проблема? код:

 import numpy
import sys
from nltk.tokenize import RegexpTokenizer
from nltk.corpus import stopwords
from keras.models import Sequential
from keras.layers import Dense, Dropout, LSTM
from keras.utils import np_utils
from keras.callbacks import ModelCheckpoint

file = open("C:/Users/alpha/Desktop/coding/pickles.txt").read()


def tokenizeWords(input):
    # lowercase everything to standardize
    input = input.lower()

    # instantiate the tokenizer
    tokenizer = RegexpTokenizer(r'w ')
    tokens = tokenizer.tokenize(input)

    # if the created token isn't in the stop words, make it part of "filtered"
    filtered = filter(lambda token: token not in stopwords.words('english'), tokens)
    return "".join(filter)


processed_inputs = tokenizeWords(file)

chars = sorted(list(set(processed_inputs)))
char_to_num = dict((c, i) for i, c in enumerate(chars))
input_len = len(processed_inputs)
vocab_len = len(chars)
print("Total number of characters", input_len)
print("Total vocab", vocab_len)
 

Ответ №1:

Ошибка говорит о том, что join() метод требует итерации, такой как list etc. но вы передаете filter() метод, который неверен. Строка

 return "".join(filter)
 

неверно. Вы хотите использовать отфильтрованный список, а не filter метод

 return "".join(filtered)
 

Комментарии:

1. конечно, мое падение — это опечатка, спасибо! Я не уловил этого в проверке различий

2. Рад, что смог помочь. Пожалуйста, отметьте ответ как правильный, чтобы кто-то другой мог извлечь выгоду из ответа

3. На самом деле, этот вопрос следует закрыть, поскольку он был вызван опечаткой, и маловероятно, что кто-либо еще выиграет от этого.