/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28: ResourceWarning: fichier non fermé <_io.bufferedreader i = "4">
return concat ([self.open (f) .read () pour f dans fileids])
C'est un avertissement que j'ai trouvé en mode débogage. J'ai pensé que vous aimeriez peut-être résoudre ce problème avant la prochaine version.
Bonjour, puis-je résoudre ce problème?
@iliaschalkidis @alvations Comment puis-je reproduire l'avertissement sous Linux?
@ sks4903440 En utilisant la version 3.2.5, vous pouvez essayer d'exécuter le script suivant dans votre ligne de commande:
test.py
import warnings
import nltk
warnings.filterwarnings('error', category=ResourceWarning)
stop_words = nltk.corpus.stopwords.words('english')
$ python test.py
Tu devrais obtenir:
ResourceWarning: unclosed file <_io.BufferedReader name='/Users/kiddo/nltk_data/corpora/stopwords/english'>
Corrigé dans # 1945
Hmmm .. Hériter du io.BufferedReader
dans StreamCorpusReader est une solution intéressante mais peut-être que fermer correctement le fichier avec les gestionnaires de contexte with
scope pourrait être une meilleure solution.
Et je pense que Python3.6 a des exigences particulières pour les fichiers qui sont différents des versions précédentes. Nous devons lire le journal des modifications de CPython pour être sûr que ce que nous faisons n'est pas simplement un pansement =)
@alvations Utiliser with
serait sûrement une bonne idée. J'essaierais d'incorporer cela. Puisque dans CPython, le garbage collector ferme automatiquement le fichier après zéro comptage de références, je n'avais pas utilisé cela. Aussi pour que l'instruction with
fonctionne, nous devrons utiliser io.BufferedReader
ou implémenter les méthodes __enter__
et __exit__
. Que pensez-vous est mieux?
~ Je pense que nous n'avons pas à implémenter les méthodes d'entrée / sortie car nous n'hériterons pas de BufferedReader mais utiliserons le contexte pour ouvrir et fermer, puis laisser gérer le module io
gérer le gc (garbage collection ). ~
C'est délicat, le io.BufferedReader
déjà la fonction seek()
comme et quand SeekableUnicodeStreamReader
hérite de cela sans faire de super __init__()
, je ne suis pas tout à fait sûr ce qu'il prend de BufferedReader.
Et en fait, nous ne pouvons pas vraiment envelopper le with
dans le read()
car cela empêchera les fonctions de recherche et de détection de fonctionner à moins que nous ne pirations le tampon dans le contexte with
. Hum ...
des nouvelles à ce sujet? Python 3.6 se plaint toujours de NLTK 3.3, sur à peu près toutes les ressources:
/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'>
Correction proposée: https://github.com/nltk/nltk/pull/2165
Un autre problème qui semble être terminé, il serait peut-être bon de fermer le problème.
Merci à tous d'avoir soulevé le problème et @purificant pour le correctif!
Commentaire le plus utile
des nouvelles à ce sujet? Python 3.6 se plaint toujours de NLTK 3.3, sur à peu près toutes les ressources: