Nltk: Arquivo não fechado no corpora de palavras irrelevantes

Criado em 3 jan. 2018  ·  11Comentários  ·  Fonte: nltk/nltk

/Users/kiddo/anaconda/lib/python3.6/site-packages/nltk/corpus/reader/wordlist.py:28: ResourceWarning: arquivo não fechado <_io.bufferedreader i = "4">
return concat ([self.open (f) .read () para f em fileids])

Esse é um aviso que encontrei no modo de depuração. Achei que você gostaria de consertar isso antes do próximo lançamento.

bug corpus enhancement goodfirstbug pythonic

Comentários muito úteis

Alguma novidade sobre isso? O Python 3.6 ainda reclama do NLTK 3.3 em praticamente todos os 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 comentários

Olá, posso resolver este problema?

@iliaschalkidis @alvations Como posso reproduzir o aviso no linux?

@ sks4903440 Usando a versão 3.2.5, você pode tentar executar o seguinte script em sua linha de comando:

test.py

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

$ python test.py

Voce deveria pegar:

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

Fixado em # 1945

Hmmm .. Herdar o io.BufferedReader para o StreamCorpusReader é uma solução interessante, mas talvez fechar o arquivo corretamente com os gerenciadores de contexto with escopo possa ser uma solução melhor.

E acho que o Python3.6 tem alguns requisitos especiais para arquivos que são diferentes das versões anteriores. Temos que ler o log de alterações do CPython para ter certeza de que o que estamos fazendo não é apenas um bandaid =)

@alvations Usar with certamente seria uma boa ideia. Eu tentaria incorporar isso. Como no CPython, o coletor de lixo fecha automaticamente o arquivo após zero contagens de referência, eu não tinha usado isso. Além disso, para que a instrução with funcione, teremos que usar io.BufferedReader ou implementar os métodos __enter__ e __exit__ . O que você acha que é melhor?

~ Acho que não temos que implementar os métodos de entrada / saída, pois não herdaremos do BufferedReader, mas usar o contexto para abrir e fechar e, em seguida, deixar o módulo io manipular o gc (coleta de lixo ). ~

Isso é complicado, o io.BufferedReader já tem a função seek() like e quando SeekableUnicodeStreamReader herda disso sem fazer nenhum super __init__() , não tenho certeza o que está tirando do BufferedReader.

E, na verdade, não podemos realmente envolver with dentro de read() porque isso impedirá que as funções de busca e indicação funcionem, a menos que hackemos o buffer dentro do contexto with . Hmm...

Alguma novidade sobre isso? O Python 3.6 ainda reclama do NLTK 3.3 em praticamente todos os 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'>

Outro problema que parece ter sido concluído, pode ser bom encerrar o problema.

Obrigado a todos por levantar o problema e @purificant pela correção!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

alvations picture alvations  ·  4Comentários

alvations picture alvations  ·  3Comentários

chaseireland picture chaseireland  ·  3Comentários

Chris00 picture Chris00  ·  3Comentários

mwess picture mwess  ·  5Comentários