2017-05-01 9 views
2

:何ですかNLTK - 私はコーパスを作成したいgzip圧縮されたファイルとフォルダを考えるとgzip圧縮されたファイルのコーパス

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/anaconda3/lib/python3.6/site-packages/nltk/collections.py", line 225, in __repr__ 
    for elt in self: 
    File "/anaconda3/lib/python3.6/site-packages/nltk/corpus/reader/util.py", line 296, in iterate_from 
    tokens = self.read_block(self._stream) 
    File "/anaconda3/lib/python3.6/site-packages/nltk/corpus/reader/plaintext.py", line 122, in _read_word_block 
    words.extend(self._word_tokenizer.tokenize(stream.readline())) 
    File "/anaconda3/lib/python3.6/site-packages/nltk/data.py", line 1142, in readline 
    new_chars = self._read(readsize) 
    File "/anaconda3/lib/python3.6/site-packages/nltk/data.py", line 1374, in _read 
    chars, bytes_decoded = self._incr_decode(bytes) 
    File "/anaconda3/lib/python3.6/site-packages/nltk/data.py", line 1405, in _incr_decode 
    return self.decode(bytes, 'strict') 
    File "/anaconda3/lib/python3.6/encodings/utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte 

次は

from nltk.corpus import PlaintextCorpusReader 
wordlists = PlaintextCorpusReader('.', '.*') 
wordlists.words('a.txt.gz') 

エラーメッセージがあるの失敗これを行う正しい方法は?

私はNLTK 3.2.2

+0

ファイルを解凍していますか?それは人生を楽にするでしょう。 – alexis

+0

いいえスペースを節約するためにそれらをgzip形式で使用したいと思います。 –

答えて

1

NLTKの読者は、ファイルのzip形式のアーカイブとして保存されたコーパスを扱うことができるとのpython 3.6を使用しています。あなたはgzip形式のファイルでいっぱいの通常のディレクトリを持っていますが、nltkはそのままでは扱えません。とにかく、1つの大きなアーカイブは通常、複数の小さなアーカイブよりもコンパクトであるため、単一の圧縮アーカイブに切り替えることで問題を解決できます。

私はこのようになりますzip圧縮(gzip圧縮されていない)アーカイブ読み取るためにNLTKを得ることができた:すなわち、コーパスファイルはサブディレクトリにあるべき

% unzip -l big-corpus.zip 
    Archive: big-corpus.zip 
     Length  Date Time Name 
    -------- ---- ---- ---- 
      0 05-08-14 00:34 big-corpus/ 
     5258 05-08-14 00:34 big-corpus/austen-emma.txt 
     5391 05-08-14 00:34 big-corpus/austen-persuasion.txt 
     ... 

を。何らかの理由で、トップレベルのファイル(サブディレクトリなし)を含むアーカイブを読者に受け入れることができませんでした。あなたのコーパスを含むフォルダbig-corpusを持っている、とあなたはbig-corpusを含むディレクトリで次のコマンドを実行している場合、この構造を得るための一つの方法は次のとおりです。

% zip -r big-corpus.zip big-corpus 

あなたがこれを持っていたら、ちょうどリーダーを初期化するには、次の構文を使用します。 :

corpus = PlaintextCorpusReader("big-corpus.zip/big-corpus/", r".*\.txt") 
関連する問題