Nltk: Archivo no cerrado en corpus de palabras vacías

Creado en 3 ene. 2018  ·  11Comentarios  ·  Fuente: nltk/nltk

/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28: ResourceWarning: archivo sin cerrar <_io.bufferedreader i = "4">
return concat ([self.open (f) .read () para f en fileids])

Esa es una advertencia que encontré en el modo de depuración. Pensé que tal vez te gustaría arreglar eso antes del próximo lanzamiento.

bug corpus enhancement goodfirstbug pythonic

Comentario más útil

¿Alguna noticia sobre esto? Python 3.6 todavía se queja de NLTK 3.3, en casi todos los recursos:

/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1107: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/lexnames'>
  for i, line in enumerate(self.open('lexnames')):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.adj'>
  for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.adv'>
  for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.noun'>
  for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.verb'>
  for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/adj.exc'>
  for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/adv.exc'>
  for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/noun.exc'>
  for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/verb.exc'>

Todos 11 comentarios

Hola, ¿puedo atender este problema?

@iliaschalkidis @alvations ¿Cómo puedo reproducir la advertencia en linux?

@ sks4903440 Con la versión 3.2.5, puede intentar ejecutar el siguiente script en su línea de comando:

test.py

import warnings
import nltk
warnings.filterwarnings('error', category=ResourceWarning)
stop_words = nltk.corpus.stopwords.words('english')

$ python test.py

Deberías conseguir:

ResourceWarning: unclosed file <_io.BufferedReader name='/Users/kiddo/nltk_data/corpora/stopwords/english'>

Corregido en # 1945

Hmmm .. Heredar el io.BufferedReader al StreamCorpusReader es una solución interesante, pero quizás cerrar el archivo correctamente con los administradores de contexto with scope podría ser una mejor solución.

Y creo que Python3.6 tiene algunos requisitos especiales para archivos que son diferentes de las versiones anteriores. Tenemos que leer el registro de cambios de CPython para estar seguros de que lo que estamos haciendo no es solo una curita =)

@alvations Usar with seguramente sería una buena idea. Intentaría incorporar eso. Dado que en CPython, el recolector de basura cierra automáticamente el archivo después de cero recuentos de referencias, no lo había usado. También para que funcione la instrucción with , tendremos que usar io.BufferedReader o implementar los métodos __enter__ y __exit__ . ¿Qué piensas que es mejor?

~ Creo que no tenemos que implementar los métodos de entrada / salida ya que no heredaremos del BufferedReader, sino que usaremos el contexto para abrir y cerrar y luego dejar que el módulo io maneje el gc (recolección de basura ). ~

Esto es complicado, el io.BufferedReader ya tiene la función seek() like y cuando SeekableUnicodeStreamReader hereda de eso sin hacer ningún super __init__() , no estoy exactamente seguro lo que está tomando de BufferedReader.

Y de hecho, no podemos realmente envolver el with dentro del read() porque eso evitará que las funciones de buscar y decir funcionen a menos que pirateemos el búfer dentro del contexto with . Mmmm ...

¿Alguna noticia sobre esto? Python 3.6 todavía se queja de NLTK 3.3, en casi todos los recursos:

/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1107: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/lexnames'>
  for i, line in enumerate(self.open('lexnames')):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.adj'>
  for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.adv'>
  for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.noun'>
  for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1159: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/index.verb'>
  for i, line in enumerate(self.open('index.%s' % suffix)):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/adj.exc'>
  for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/adv.exc'>
  for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/noun.exc'>
  for line in self.open('%s.exc' % suffix):
/home/user/py36/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py:1209: ResourceWarning: unclosed file <_io.BufferedReader name='/home/user/nltk_data/corpora/wordnet/verb.exc'>

Otro tema que parece que se ha completado, podría ser bueno cerrar el tema.

¡Gracias a todos por plantear el problema y a @purificant por la solución!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

BLKSerene picture BLKSerene  ·  4Comentarios

DavidNemeskey picture DavidNemeskey  ·  4Comentarios

talbaumel picture talbaumel  ·  4Comentarios

alvations picture alvations  ·  3Comentarios

stevenbird picture stevenbird  ·  3Comentarios