séparateur de phrase python spacy

Sep 23 2020

Je voudrais utiliser spacypour extraire les phrases d'un texte.

nlp = English()  # just the language with no model
sentencizer = nlp.create_pipe("sentencizer")
nlp.add_pipe(sentencizer)
doc = nlp("This is a sentence. This is another sentence.")
for sent in doc.sents:
    print(sent.text)

Est-il possible d'augmenter la fiabilité des règles de contournement du séparateur de phrases, car par exemple, ne divise jamais une phrase après un acronyme comme "non".

Imaginez bien sûr que j'ai un tas d'acronymes très techniques et particuliers.
Comment procéderiez-vous?

Réponses

3 thorntonc Sep 23 2020 at 22:36

Vous pouvez écrire une fonction personnalisée qui modifie le comportement par défaut en utilisant une approche basée sur des règles de fractionnement sur des phrases. Par exemple:

import spacy

text = "The formula is no. 45. This num. represents the chemical properties."

nlp = spacy.load("en_core_web_sm")
doc = nlp(text)
print("Before:", [sent.text for sent in doc.sents])

def set_custom_boundaries(doc):
    pattern_a = ['no', 'num']
    for token in doc[:-1]:
        if token.text in pattern_a and doc[token.i + 1].text == '.':
            doc[token.i + 2].is_sent_start = False
    return doc

nlp.add_pipe(set_custom_boundaries, before="parser")
doc = nlp(text)
print("After:", [sent.text for sent in doc.sents])

Cela vous donnera la séparation de phrase souhaitée.

Before: ['The formula is no.', '45.', 'This num.', 'represents the chemical properties.']
After: ['The formula is no. 45.', 'This num. represents the chemical properties.']