Tokenizer di formazione e parole non significative di filtraggio

Perché addestrare il proprio tokenizzatore di frasi?

Questa è una domanda molto importante che se abbiamo il tokenizer di frase predefinito di NLTK, perché dobbiamo addestrare un tokenizer di frase? La risposta a questa domanda sta nella qualità del tokenizer di frase predefinito di NLTK. Il tokenizer predefinito di NLTK è fondamentalmente un tokenizer generico. Sebbene funzioni molto bene, ma potrebbe non essere una buona scelta per il testo non standard, che forse lo è il nostro testo, o per un testo che ha una formattazione unica. Per tokenizzare tale testo e ottenere i migliori risultati, dovremmo addestrare il nostro tokenizzatore di frasi.

Esempio di implementazione

Per questo esempio, utilizzeremo il corpus del testo web. Il file di testo che useremo da questo corpus avrà il testo formattato come le finestre di dialogo mostrate di seguito -

Guy: How old are you?
Hipster girl: You know, I never answer that question. Because to me, it's about
how mature you are, you know? I mean, a fourteen year old could be more mature
than a twenty-five year old, right? I'm sorry, I just never answer that question.
Guy: But, uh, you're older than eighteen, right?
Hipster girl: Oh, yeah.

Abbiamo salvato questo file di testo con il nome di training_tokenizer. NLTK fornisce una classe denominataPunktSentenceTokenizercon l'aiuto del quale possiamo allenarci sul testo grezzo per produrre un tokenizer di frasi personalizzato. Possiamo ottenere testo grezzo leggendo in un file o da un corpus NLTK usando ilraw() metodo.

Vediamo l'esempio qui sotto per avere più informazioni al riguardo:

Innanzitutto, importa PunktSentenceTokenizer classe da nltk.tokenize pacchetto -

from nltk.tokenize import PunktSentenceTokenizer

Ora importa webtext corpus da nltk.corpus pacchetto

from nltk.corpus import webtext

Successivamente, utilizzando raw() metodo, ottieni il testo grezzo da training_tokenizer.txt file come segue -

text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')

Ora, crea un'istanza di PunktSentenceTokenizer e stampa le frasi di tokenize dal file di testo come segue:

sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

Produzione

White guy: So, do you have any plans for this evening?
print(sents_1[1])
Output:
Asian girl: Yeah, being angry!
print(sents_1[670])
Output:
Guy: A hundred bucks?
print(sents_1[675])
Output:
Girl: But you already have a Big Mac...

Esempio di implementazione completo

from nltk.tokenize import PunktSentenceTokenizer
from nltk.corpus import webtext
text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

Produzione

White guy: So, do you have any plans for this evening?

Per comprendere la differenza tra il tokenizer di frase predefinito di NLTK e il nostro tokenizer di frasi addestrato, tokenizziamo lo stesso file con il tokenizer di frasi predefinito, ad esempio sent_tokenize ().

from nltk.tokenize import sent_tokenize
   from nltk.corpus import webtext
   text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sents_2 = sent_tokenize(text)

print(sents_2[0])
Output:

White guy: So, do you have any plans for this evening?
print(sents_2[675])
Output:
Hobo: Y'know what I'd do if I was rich?

Con l'aiuto della differenza nell'output, possiamo capire il concetto per cui è utile addestrare il nostro tokenizzatore di frasi.

Cosa sono le stopword?

Alcune parole comuni che sono presenti nel testo ma non contribuiscono al significato di una frase. Tali parole non sono affatto importanti ai fini del recupero delle informazioni o dell'elaborazione del linguaggio naturale. Le parole chiave più comuni sono "la" e "a".

Corpus di stopword NLTK

In realtà, il kit di strumenti per il linguaggio naturale viene fornito con un corpus di parole chiave contenente elenchi di parole per molte lingue. Cerchiamo di capire il suo utilizzo con l'aiuto del seguente esempio:

Innanzitutto, importa le stopword copus dal pacchetto nltk.corpus -

from nltk.corpus import stopwords

Ora utilizzeremo le parole chiave in inglese

english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

Produzione

['I', 'writer']

Esempio di implementazione completo

from nltk.corpus import stopwords
english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

Produzione

['I', 'writer']

Trovare l'elenco completo delle lingue supportate

Con l'aiuto del seguente script Python, possiamo anche trovare l'elenco completo delle lingue supportate dal corpus di stopword NLTK -

from nltk.corpus import stopwords
stopwords.fileids()

Produzione

[
   'arabic', 'azerbaijani', 'danish', 'dutch', 'english', 'finnish', 'french',
   'german', 'greek', 'hungarian', 'indonesian', 'italian', 'kazakh', 'nepali',
   'norwegian', 'portuguese', 'romanian', 'russian', 'slovene', 'spanish',
   'swedish', 'tajik', 'turkish'
]