Nltk: Незакрытый файл в корпусе игнорируемых слов

Созданный на 3 янв. 2018  ·  11Комментарии  ·  Источник: nltk/nltk

/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28: ResourceWarning: незакрытый файл <_io.bufferedreader i = "4">
return concat ([self.open (f) .read () для f в идентификаторах файлов])

Это предупреждение, которое я обнаружил в режиме отладки. Я подумал, что, возможно, вы захотите исправить это до следующего выпуска.

bug corpus enhancement goodfirstbug pythonic

Самый полезный комментарий

Есть новости по этому поводу? Python 3.6 по-прежнему жалуется на NLTK 3.3 практически на всех ресурсах:

/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'>

Все 11 Комментарий

Привет, могу я заняться этим вопросом?

@iliaschalkidis @alvations Как воспроизвести предупреждение в linux?

@ sks4903440 Используя версию 3.2.5, вы можете попробовать запустить следующий скрипт в командной строке:

test.py

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

$ python test.py

У вас должно получиться:

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

Исправлено в # 1945

Хммм ... Наследование io.BufferedReader в StreamCorpusReader - интересное решение, но, возможно, закрытие файла должным образом с помощью контекстных менеджеров with scope могло бы быть лучшим решением.

И я думаю, что у Python3.6 есть некоторые особые требования к файлам, которые отличаются от предыдущих версий. Мы должны прочитать журнал изменений от CPython, чтобы убедиться, что то, что мы делаем, не просто бандаж =)

@alvations Использование with , несомненно, было бы хорошей идеей. Я бы попытался включить это. Поскольку в CPython сборщик мусора автоматически закрывает файл после нулевого счетчика ссылок, я этого не использовал. Также, чтобы оператор with работал, нам нужно будет использовать io.BufferedReader или реализовать методы __enter__ и __exit__ . Как думаете, лучше?

~ Я думаю, что нам не нужно реализовывать методы входа / выхода, поскольку мы не будем наследовать от BufferedReader, а будем использовать контекст для открытия и закрытия, а затем позволим модулю io обрабатывать gc (сборка мусора ). ~

Это сложно, io.BufferedReader уже имеет функцию seek() и когда SeekableUnicodeStreamReader наследуется от этого, не выполняя никаких супер __init__() , я не совсем уверен что он берет от BufferedReader.

И на самом деле мы не можем обернуть with внутри read() потому что это предотвратит работу функций поиска и распознавания, если мы не взломаем буфер в контексте with . Хм ...

Есть новости по этому поводу? Python 3.6 по-прежнему жалуется на NLTK 3.3 практически на всех ресурсах:

/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'>

Предлагаемое исправление: https://github.com/nltk/nltk/pull/2165

Еще один вопрос, который вроде бы решен, может быть, неплохо закрыть выпуск.

Спасибо всем за то, что подняли проблему, и @purificant за исправление!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

mwess picture mwess  ·  5Комментарии

Chris00 picture Chris00  ·  3Комментарии

chaseireland picture chaseireland  ·  3Комментарии

zdog234 picture zdog234  ·  3Комментарии

alvations picture alvations  ·  4Комментарии