【发布时间】:2023-03-11 14:08:01
【问题描述】:
我正在尝试将财务文件拆分为句子。我有大约 50.000 个包含纯英文文本的文档。总文件大小约为 2.6 GB。
我将 NLTK 的 PunktSentenceTokenizer 与标准的英文泡菜文件一起使用。我还通过提供额外的缩写对其进行了调整,但结果仍然不够准确。
由于 NLTK PunktSentenceTokenizer 基于 Kiss & Strunk (2006) 的无监督算法,我正在尝试根据我的文档训练句子标记器,基于 training data format for nltk punkt。
import nltk.tokenize.punkt
import pickle
import codecs
tokenizer = nltk.tokenize.punkt.PunktSentenceTokenizer()
text = codecs.open("someplain.txt", "r", "utf8").read()
tokenizer.train(text)
out = open("someplain.pk", "wb")
pickle.dump(tokenizer, out)
out.close()
不幸的是,在运行代码时,我收到了一个错误,即内存不足。 (主要是因为我先把所有文件拼接成一个大文件。)
现在我的问题是:
- 如何批量训练算法,这样会降低内存消耗吗?
- 我可以使用标准的英语 pickle 文件并使用已训练的对象进行进一步训练吗?
我在 Core I7 2600K 和 16GB RAM 机器上的 Windows 10 上使用 Python 3.6 (Anaconda 5.2)。
【问题讨论】:
-
另外:最好使用
with-statement来打开文件,见docs。
标签: python nltk nltk-trainer