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.']