Избегать анализа <sos>и <eos>Spacy - PullRequest
0 голосов
/ 26 мая 2019

Я застрял с основной вещью, но я не мог понять, как заставить это работать. Мои извинения, если это что-то супер базовое. Просто я очень новичок в 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>

Я не мог понять, как этого добиться. Любая помощь будет отличной.

Заранее спасибо

1 Ответ

3 голосов
/ 26 мая 2019

В spaCy токенизатор проверяет исключения перед разбиением текста.Вам нужно добавить исключение в токенизатор, чтобы ваши символы рассматривались как полные токены.

Ваш код должен выглядеть следующим образом:

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

...