2015-03-13 20 views
12

Sto usando nltk's PunkSentenceTokenizer per tokenizzare un testo in un insieme di frasi. Tuttavia, il tokenizer non sembra considerare un nuovo paragrafo o nuove righe come una nuova frase.tokenizer frase nltk, considera nuove righe come limite frase

>>> from nltk.tokenize.punkt import PunktSentenceTokenizer 
>>> tokenizer = PunktSentenceTokenizer() 
>>> tokenizer.tokenize('Sentence 1 \n Sentence 2. Sentence 3.') 
['Sentence 1 \n Sentence 2.', 'Sentence 3.'] 
>>> tokenizer.span_tokenize('Sentence 1 \n Sentence 2. Sentence 3.') 
[(0, 24), (25, 36)] 

Mi piacerebbe considerare anche le nuove linee come limiti di frasi. Ad ogni modo per fare questo (ho bisogno di salvare anche gli offset)?

risposta

9

Bene, ho avuto lo stesso problema e quello che ho fatto è stato dividere il testo in "\ n". Qualcosa del genere:

Questa è una versione semplificata di ciò che avevo in produzione, ma l'idea generale è la stessa. E, dispiace per i commenti e le docstring in portoghese, questo è stato fatto in 'scopi educativi' per il pubblico brasiliano

def paragraphs(self): 
    if self._paragraphs is not None: 
     for p in self._paragraphs: 
      yield p 
    else: 
     raw_paras = self.raw_text.split(self.paragraph_delimiter) 
     gen = (Paragraph(self, p) for p in raw_paras if p) 
     self._paragraphs = [] 
     for p in gen: 
      self._paragraphs.append(p) 
      yield p 

codice completo https://gitorious.org/restjor/restjor/source/4d684ea4f18f66b097be1e10cc8814736888dfb4:restjor/decomposition.py#Lundefined

+0

Nizza soluzione. Ma questo non funzionerà per il mio caso, dal momento che voglio anche salvare gli scostamenti dei punti di divisione per il testo originale con tokenizer.span_tokenize(). – CentAu

+0

Anche se penso di poter sostituire le newline con punti. Probabilmente funzionerebbe. – CentAu