有没有办法将 Spacy en_core_web_sm 应用于块中的数据?

Is there a way to apply Spacy en_core_web_sm to data in chunks?

我有这个包含 300.000 篇文章的庞大数据集,我想使用 Spacy 的 en_core_web_sm 来进行分词、词性标记、词形还原、语法依赖和 NER。但是我的电脑将 运行 保留在 RAM 之外。有没有一种方法可以更改我的代码以分块处理数据?

这是数据集:https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/ULHLCB

这就是我正在使用的:

df_2018 = pd.read_csv("2018_articles.csv")
import spacy
nlp_spacy_core_web_sm = spacy.load("en_core_web_sm")
df_18_salon["spacy_sm"] = df_18_salon["content"].apply(lambda x: nlp_spacy_core_web_sm(x))

大约 30 分钟后,我收到内存不足错误。

问题是您无法同时将所有文档(spaCy 输出)保存在内存中,因此您不能只将输出放在数据框的一列中。另请注意,这不是 spaCy 问题,这是编程问题。

你需要写一个for循环,把你的处理放在里面:

for text in texts:
    doc = nlp(text)
    ... do something with the doc ...

如果您这样做,那么该文档将在 for 循环的下一次迭代中被清理,因此它不会占用内存。

您可能还想查看 spaCy speed FAQ