Добавьте исключение SpaCy Tokenizer: не разделяйте '>>' - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь добавить исключение, чтобы распознать '>>' и '>>' в качестве индикатора для начала нового предложения. Например,

import spacy

nlp = spacy.load('en_core_web_sm')
doc = nlp(u'>> We should. >>No.')

for sent in doc.sents:
    print (sent)

Распечатывает:

>> We should.
>
>
No.

Но я бы хотел распечатать:

>> We should.
>> No. 

Спасибо, что уделили время заранее!

1 Ответ

0 голосов
/ 11 сентября 2018

Вам необходимо создать пользовательский компонент . Примеры кода обеспечивают пользовательскую сегментацию предложений пример . Из документации пример делает следующее:

Пример добавления компонента конвейера для запрета границ предложений до определенных токенов.

Код (адаптирующий пример к вашим потребностям):

import spacy


def prevent_sentence_boundaries(doc):
    for token in doc:
        if not can_be_sentence_start(token):
            token.is_sent_start = False
    return doc


def can_be_sentence_start(token):
    if token.i > 0 and token.nbor(-1).text == '>':
        return False
    return True

nlp = spacy.load('en_core_web_sm')
nlp.add_pipe(prevent_sentence_boundaries, before='parser')

raw_text = u'>> We should. >> No.'
doc = nlp(raw_text)
sentences = [sent.string.strip() for sent in doc.sents]
for sentence in sentences:
    print(sentence)

выход

>> We should.
>> No.
...