/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28:ResourceWarning:閉じられていないファイル<_io.bufferedreader i = "4">
concat([self.open(f).read()for f in fileids])を返します
これは、デバッグモードで見つけた警告です。 次のリリースまでに修正したいと思いました。
こんにちは、私はこの問題を取ることができますか?
@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
スコープでファイルを適切に閉じる方が良い修正かもしれません。
また、Python3.6には、以前のバージョンとは異なるファイルに対していくつかの特別な要件があると思います。 CPythonから変更ログを読み取って、実行していることが単なる絆創膏ではないことを確認する必要があります=)
@alvations with
することは確かに良い考えです。 私はそれを取り入れようとします。 CPythonでは、ガベージコレクターは、参照カウントがゼロになるとファイルを自動的に閉じるため、これを使用していませんでした。 また、 with
ステートメントを機能させるには、 io.BufferedReader
を使用するか、 __enter__
および__exit__
メソッドを実装する必要があります。 何が良いと思いますか?
〜BufferedReaderから継承するのではなく、コンテキストを使用して開閉し、ハンドルio
モジュールにgc(ガベージコレクション)を処理させるため、enter / exitメソッドを実装する必要はないと思います)。〜
これは注意が必要です。 io.BufferedReader
すでにseek()
ような関数があり、 SeekableUnicodeStreamReader
スーパー__init__()
を実行せずにそれを継承する場合、正確にはわかりません。 BufferedReaderから取得しているもの。
実際、 with
をread()
with
内にラップすることはできません。これは、 with
コンテキスト内でバッファーをハックしない限り、seekおよびtell関数が機能しなくなるためです。 うーん...
これに関するニュースはありますか? Python 3.6は、ほとんどすべてのリソースで、NLTK3.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 :
完了したと思われる別の問題ですが、問題をクローズすることをお勧めします。
問題を提起してくれてありがとう、そして修正してくれて@purificant !
最も参考になるコメント
これに関するニュースはありますか? Python 3.6は、ほとんどすべてのリソースで、NLTK3.3について不平を言っています。