1

ウィクショナリー ダンプを POS タグ付けの目的で使用します。ダウンロード時になぜか固まる。これが私のコードです:

import nltk
from urllib import urlopen
from collections import Counter
import gzip

url = 'http://dumps.wikimedia.org/enwiktionary/latest/enwiktionary-latest-all-titles-in-ns0.gz'
fStream = gzip.open(urlopen(url).read(), 'rb')
dictFile = fStream.read()
fStream.close()

text = nltk.Text(word.lower() for word in dictFile())
tokens = nltk.word_tokenize(text)

これが私が得るエラーです:

Traceback (most recent call last):
File "~/dir1/dir1/wikt.py", line 15, in <module>
fStream = gzip.open(urlopen(url).read(), 'rb')
File "/usr/lib/python2.7/gzip.py", line 34, in open
return GzipFile(filename, mode, compresslevel)
File "/usr/lib/python2.7/gzip.py", line 89, in __init__
fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb')
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
Process finished with exit code 1
4

1 に答える 1

6

ダウンロードしたデータをに渡しgzip.open()ています。これは、代わりにファイル名が渡されることを期待しています。

次に、コードは gzip されたデータによって指定されたファイル名を開こうとしますが、失敗します。

URL データをファイルに保存してから使用gzip.open()するzlib、代わりにモジュールを使用して gzip 圧縮されたデータを解凍します。StringIO.StringIO()データの「保存」は、メモリ内ファイル オブジェクトを使用するのと同じくらい簡単です。

from StringIO import StringIO
from urllib import urlopen
import gzip


url = 'http://dumps.wikimedia.org/enwiktionary/latest/enwiktionary-latest-all-titles-in-ns0.gz'
inmemory = StringIO(urlopen(url).read())
fStream = gzip.GzipFile(fileobj=inmemory, mode='rb')
于 2013-08-09T12:15:24.847 に答える