spaCy 当使用senter时出现IndexError E040错误,

w51jfk4q  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(54)

如何复现行为

如页面建议的那样(https://spacy.io/models),我可以通过将"parser"替换为"senter"来更高效地检测句子边界。我这样做了,但在打印文档的各个名词短语时遇到了E040错误(在使用原始解析器时不会发生这种情况)。

复现代码:

nlp = spacy.load("en_core_web_sm")
nlp.disable_pipe('parser')
nlp.enable_pipe('senter')
doc = nlp(text)

for chunk in doc.noun_chunks:
    print(chunk)

错误信息:

File "spacy\tokens\token.pyx", line 609, in spacy.tokens.token.Token.left_edge.__get__
  File "spacy\tokens\doc.pyx", line 474, in spacy.tokens.doc.Doc.__getitem__
  File "spacy\tokens\token.pxd", line 23, in spacy.tokens.token.Token.cinit
IndexError: [E040] Attempt to access token at 10794, max length 10792.

您的环境

  • spaCy版本: 3.2.3
  • 平台: Windows-10-10.0.19042-SP0
  • Python版本: 3.9.7
  • Pipelines: en_core_web_lg (3.2.0), en_core_web_md (3.2.0), en_core_web_sm (3.2.0), en_core_web_trf (3.2.0)
ukqbszuj

ukqbszuj1#

这听起来确实像是一个bug,但我无法从上述信息中复现它。当你禁用解析器并尝试使用 noun_chunks 时,你应该会得到这个错误:

ValueError: [E029] `noun_chunks` requires the dependency parse, which requires a statistical model to be installed and loaded. For more info, see the documentation:
https://spacy.io/usage/models

你有包含失败文本的最小示例吗?请使用代码块格式化代码和错误消息,通过在代码前后各使用一行三个反引号: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks

dzjeubhm

dzjeubhm2#

以下是复现错误的代码,包括错误发生的文本片段(部分科学引用的章节):

text = "016/j. foodr es. 2017. 07. 018 (2017).\n\n 27.  Aluko, R."
nlp = spacy.load("en_core_web_sm")
nlp.disable_pipe('parser')
nlp.enable_pipe('senter')
doc = nlp(text)

for chunk in doc.noun_chunks:
    print(chunk)
kiz8lqtg

kiz8lqtg3#

啊,我假设名词短语没有发生变化,并在v3.3.0中进行了测试,这是有效的。
这与#10003有关,并且与处理空白标记的v3.2.0模型中的规则有关。
问题在于文本中的空白,v3.2.0模型(模型版本,而不是spacy版本)为SPACE标记添加了依赖项,如dep用于\n\n,然后名词短语功能会混淆是否已解析。这种部分解析导致了错误。
因此,升级到en_core_web_sm v3.3.0应该修复此文本中的特定问题,因为规则已经得到了改进。我们应该考虑如何处理在这里因部分解析而表现不佳的名词短语迭代器。

相关问题