避免 <sos> 和 <eos> 被 Spacy 解析

Avoiding <sos> and <eos> being parsed by Spacy

我被一个基本的东西困住了,但我不知道如何让它工作。如果这是超级基本的东西,我深表歉意。只是我对 Spacy 很陌生,不知道该怎么做。也无法在互联网上找到任何资源。

我有一堆这样的句子

a = "<sos> Hello There! <eos>"

我正在使用以下代码行使用 Spacy 对其进行标记化

import spacy
nlp = spacy.load('en_core_web_sm')
for token in nlp(a):
    print(token.text)

打印的内容是这样的

<
sos
>
Hello
There
!
<
eos
>

如您所见,它解析了 <sos><eos> 元标记。我怎样才能避免这种情况?我希望看到的输出类似于以下内容

<sos>
Hello
There
!
<eos>

我不知道如何做到这一点。任何帮助都会很棒。

提前致谢

在 spaCy 中,分词器会在拆分文本之前检查异常。 您需要向 tokenizer 添加一个例外,以将您的符号视为完整标记。

您的代码应如下所示:

import spacy
from spacy.attrs import ORTH, LEMMA

sent = "<sos> Hello There! <eos>"

nlp = spacy.load('en_core_web_sm')

nlp.tokenizer.add_special_case('<sos>', [{ORTH: "<sos>"}])
nlp.tokenizer.add_special_case('<eos>', [{ORTH: "<eos>"}])

for token in nlp(sent):
    print(token.text)

您可以在此处阅读更多相关信息: https://spacy.io/api/tokenizer#add_special_case