word_tokenize TypeError: cadena esperada o búfer

Al llamar a word_tokenize me sale el siguiente error:

 File "C:\Python34\lib\site-packages\nltk\tokenize\punkt.py", line 1322, in _slices_from_text for match in self._lang_vars.period_context_re().finditer(text): TypeError: expected string or buffer 

Tengo un archivo de texto grande (1500.txt) del que quiero eliminar las palabras vacías. Mi código es el siguiente:

 from nltk.corpus import stopwords from nltk.tokenize import word_tokenize with open('E:\\Book\\1500.txt', "r", encoding='ISO-8859-1') as File_1500: stop_words = set(stopwords.words("english")) words = word_tokenize(File_1500) filtered_sentence = [w for w in words if not w in stop_words] print(filtered_sentence) 

La entrada para word_tokenize es una oración de flujo de documentos, es decir, una lista de cadenas, por ejemplo, ['this is sentence 1.', 'that's sentence 2!'] .

El File_1500 es un objeto File no una lista de cadenas, por eso no funciona.

Para obtener una lista de cadenas de oraciones, primero debe leer el archivo como un objeto de cadena fin.read() , luego use sent_tokenize para dividir la oración (supongo que su archivo de entrada no es tokenized de oraciones, solo un Archivo de texto).

Además, es mejor / más idiomático simbolizar un archivo de esta manera con NLTK:

 from nltk.corpus import stopwords from nltk.tokenize import word_tokenize, sent_tokenize stop_words = set(stopwords.words("english")) with open('E:\\Book\\1500.txt', "r", encoding='ISO-8859-1') as fin: for sent in sent_tokenize(fin.read()): words = word_tokenize(sent) filtered_sentence = [w for w in words if not w in stop_words] print(filtered_sentence)