【问题标题】:How to process a very long document in spaCy?如何在 spaCy 中处理很长的文档?
【发布时间】:2021-11-07 17:37:13
【问题描述】:

我正在尝试对西班牙语文本进行 NLP 分析。因此,为了进行词形还原,我使用 Spacy,因为 NLTK 没有用于词法的西班牙语版本。 Spacy 的问题是我可以通过 Lemmatizer 的单词数量受到限制:

ValueError: [E088] 长度为 6095095 的文本超过最大值 1000000。解析器和 NER 模型在输入中每 100,000 个字符需要大约 1GB 的临时内存。这意味着长文本可能 导致内存分配错误。如果您不使用解析器或 NER, 增加nlp.max_length 限制可能是安全的。极限 是字符数,因此您可以检查您的输入是否 检查len(text) 太长了。

我尝试使用 nlp.max_length= 6095095,但在使用所有可用 RAM 后会话崩溃。

有什么建议吗?

【问题讨论】:

  • 你的问题标题和你的问题内容没有关系?
  • (注意:我编辑了标题以匹配问题。我仍然不确定为什么会这样。)

标签: nlp spacy lemmatization


【解决方案1】:

您似乎在一次调用中将一个很长的文本传递给 spaCy。您可以将文本拆分为多个文档,而不是这样做。执行此操作的确切方法取决于您的数据,但通常您可以通过双换行符将内容拆分为段落。例如:

import spacy
nlp = spacy.load(... your model ...)

text = ... your text ...
texts = text.split("\n\n") # common way to split on paragraphs

for doc in nlp.pipe(texts):
    ... do something ...

【讨论】:

  • 词形还原不太依赖于上下文,因此将长文本分成较短的段应该没问题。你甚至可以下降到句子级别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2020-05-18
相关资源
最近更新 更多