Nltk: Nicht geschlossene Datei in Stoppwortkorpora

Erstellt am 3. Jan. 2018  ·  11Kommentare  ·  Quelle: nltk/nltk

/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28: ResourceWarning: nicht geschlossene Datei <_io.bufferedreader i = "4">
return concat ([self.open (f) .read () für f in fileids])

Das ist eine Warnung, die ich im Debugging-Modus gefunden habe. Ich dachte, dass Sie das vielleicht vor der nächsten Veröffentlichung beheben möchten.

bug corpus enhancement goodfirstbug pythonic

Hilfreichster Kommentar

Gibt es Neuigkeiten zu diesem Thema? Python 3.6 beschwert sich immer noch über NLTK 3.3 auf so ziemlich jeder Ressource:

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

Alle 11 Kommentare

Hallo, kann ich dieses Problem annehmen?

@iliaschalkidis @alvations Wie kann ich die Warnung unter Linux reproduzieren?

@ sks4903440 Mit Version 3.2.5 können Sie versuchen, das folgende Skript in Ihrer Befehlszeile auszuführen:

test.py

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

$ python test.py

Du solltest bekommen:

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

In # 1945 behoben

Hmmm .. Das Erben von io.BufferedReader an den StreamCorpusReader ist eine interessante Lösung, aber möglicherweise ist das Schließen der Datei mit Kontextmanagern with eine bessere Lösung.

Und ich denke, Python3.6 hat einige spezielle Anforderungen für Dateien, die sich von früheren Versionen unterscheiden. Wir müssen das Änderungsprotokoll von CPython lesen, um sicherzugehen, dass wir nicht nur ein Bandaid sind =)

@alvations Die Verwendung von with wäre sicherlich eine gute Idee. Ich würde versuchen, das zu berücksichtigen. Da in CPython der Garbage Collector die Datei nach null Referenzzählungen automatisch schließt, hatte ich das nicht verwendet. Damit die Anweisung with funktioniert, müssen wir die Methoden io.BufferedReader oder die Methoden __enter__ und __exit__ implementieren. Was denkst du ist besser?

~ Ich denke, wir müssen die Enter / Exit-Methoden nicht implementieren, da wir nicht vom BufferedReader erben, sondern den Kontext zum Öffnen und Schließen verwenden und dann das Modul io die gc (Garbage Collection) behandeln lassen ). ~

Dies ist schwierig, das io.BufferedReader bereits die seek() -ähnliche Funktion, und wenn SeekableUnicodeStreamReader erbt, ohne Super __init__() zu tun, bin ich mir nicht ganz sicher was es von BufferedReader nimmt.

Und tatsächlich können wir die with nicht wirklich in die read() einwickeln, da dies verhindert, dass Such- und Tell-Funktionen funktionieren, es sei denn, wir hacken den Puffer im with -Kontext. Hmm ...

Gibt es Neuigkeiten zu diesem Thema? Python 3.6 beschwert sich immer noch über NLTK 3.3 auf so ziemlich jeder Ressource:

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

Vorgeschlagene Lösung: https://github.com/nltk/nltk/pull/2165

Ein weiteres Problem, das anscheinend abgeschlossen wurde, ist möglicherweise sinnvoll, um das Problem zu schließen.

Vielen Dank an alle, die das Problem angesprochen haben, und an

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

goodmami picture goodmami  ·  4Kommentare

jeryini picture jeryini  ·  5Kommentare

alvations picture alvations  ·  4Kommentare

mwess picture mwess  ·  5Kommentare

stevenbird picture stevenbird  ·  4Kommentare