divisore di frasi python spacy
Sep 23 2020
Vorrei usare spacyper estrarre le frasi da un testo.
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)
È possibile aumentare l'affidabilità dello spezzatore di frasi aggirando le regole come ad esempio non divide mai una frase dopo un acronimo come "no.".
Immagina ovviamente che io abbia un sacco di acronimi molto tecnici e particolari.
Come procederesti?
Risposte
3 thorntonc Sep 23 2020 at 22:36
È possibile scrivere una funzione personalizzata che modifica il comportamento predefinito utilizzando un approccio basato su regole di suddivisione in frasi. Per esempio:
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])
Questo ti darà la divisione della frase desiderata.
Before: ['The formula is no.', '45.', 'This num.', 'represents the chemical properties.']
After: ['The formula is no. 45.', 'This num. represents the chemical properties.']