大きなテキストファイルから文章を抽出するには、nltk.sent_tokenize()
を使用する必要があります。ファイルのサイズは1MBから400MBまで様々です。そのため、メモリの制限のためにファイルを完全にロードすることはできません。nltk.sent_tokenize()
を使用してファイルを1行ずつ読み込むことはできません。大文字ファイルでnltkを使用した文のセグメンテーション
このタスクを実行するにはどうすればよいですか?
大きなテキストファイルから文章を抽出するには、nltk.sent_tokenize()
を使用する必要があります。ファイルのサイズは1MBから400MBまで様々です。そのため、メモリの制限のためにファイルを完全にロードすることはできません。nltk.sent_tokenize()
を使用してファイルを1行ずつ読み込むことはできません。大文字ファイルでnltkを使用した文のセグメンテーション
このタスクを実行するにはどうすればよいですか?
あなただけのリーダーを使用してみましたか? nltk
コーパスリーダーは、ファイル全体ではなく、場面の背後にあるディスクから大きなブロックを読み取って、段階的にテキストを配信するように設計されています。だから、PlaintextCorpusReader
をあなたのコーパス全体に開いてください。そして、それはあなたの全コーパスの文章を、何らかの無差別なことなしに文章で伝えなければなりません。例:
reader = nltk.corpus.reader.PlaintextCorpusReader("path/to/corpus", r".*\.txt")
for sent in reader.sents():
if "shenanigans" in sent:
print(" ".join(sent))
ファイルをストリームし、ファイルを1行ずつ読み込むときに処理します。
トークンを格納するメモリが問題の場合は、プロセストークンを1行ずつ、またはバッチで書き出します。ラインによって
ライン:バッチで
from __future__ import print_function
from nltk import word_tokenize
with open('input.txt', 'r') as fin, open('output.txt', 'w') as fout:
for line in fin:
tokenized_line = ' '.join(word_tokenize(line.strip()))
print(tokenized_line, end='\n', file=fout)
(1000):
from __future__ import print_function
from nltk import word_tokenize
with open('input.txt', 'r') as fin, open('output.txt', 'w') as fout:
processed_lines = []
for i, line in enumerate(fin):
tokenized_line = ' '.join(word_tokenize(line.strip()))
processed_lines.append(tokenized_line)
if i % 1000 = 0:
print('\n'.join(processed_lines), end='\n', file=fout)
processed_lines = []
ファイルを小さな塊に分割し、その穀粒で処理することができます。 –