Tokenizer de formation et filtrage des mots vides

Pourquoi former son propre tokenizer de phrase?

C'est une question très importante que si nous avons le tokenizer de phrase par défaut de NLTK, pourquoi avons-nous besoin de former un tokenizer de phrase? La réponse à cette question réside dans la qualité du tokenizer de phrase par défaut de NLTK. Le tokenizer par défaut du NLTK est essentiellement un tokenizer à usage général. Bien que cela fonctionne très bien, ce n'est peut-être pas un bon choix pour le texte non standard, peut-être notre texte, ou pour un texte qui a une mise en forme unique. Pour tokeniser ce texte et obtenir les meilleurs résultats, nous devons former notre propre tokenizer de phrase.

Exemple d'implémentation

Pour cet exemple, nous utiliserons le corpus webtext. Le fichier texte que nous allons utiliser à partir de ce corpus a le texte formaté comme les boîtes de dialogue ci-dessous -

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.

Nous avons enregistré ce fichier texte sous le nom de training_tokenizer. NLTK fournit une classe nomméePunktSentenceTokenizeravec l'aide duquel nous pouvons nous entraîner sur du texte brut pour produire un tokenizer de phrase personnalisé. Nous pouvons obtenir du texte brut soit en lisant dans un fichier, soit à partir d'un corpus NLTK en utilisant leraw() méthode.

Voyons l'exemple ci-dessous pour en savoir plus -

Tout d'abord, importez PunktSentenceTokenizer classe de nltk.tokenize paquet -

from nltk.tokenize import PunktSentenceTokenizer

Maintenant, importez webtext corpus de nltk.corpus paquet

from nltk.corpus import webtext

Ensuite, en utilisant raw() méthode, récupérez le texte brut de training_tokenizer.txt fichier comme suit -

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

Maintenant, créez une instance de PunktSentenceTokenizer et imprimez les phrases tokenize à partir du fichier texte comme suit -

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

Production

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

Exemple d'implémentation complet

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])

Production

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

Pour comprendre la différence entre le tokenizer de phrase par défaut de NLTK et notre propre tokenizer de phrase entraîné, laissez-nous tokenize le même fichier avec le tokenizer de phrase par défaut ie 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?

Avec l'aide de la différence dans la sortie, nous pouvons comprendre le concept qui explique pourquoi il est utile de former notre propre tokenizer de phrase.

Que sont les mots vides?

Quelques mots courants qui sont présents dans le texte mais qui ne contribuent pas à la signification d'une phrase. De tels mots ne sont pas du tout importants aux fins de la recherche d'informations ou du traitement du langage naturel. Les mots vides les plus courants sont «le» et «a».

Corpus de mots vides NLTK

En fait, le kit d'outils de langage naturel est livré avec un corpus de mots vides contenant des listes de mots pour de nombreuses langues. Comprenons son utilisation à l'aide de l'exemple suivant -

Tout d'abord, importez les mots vides copus du package nltk.corpus -

from nltk.corpus import stopwords

Maintenant, nous utiliserons des mots vides de langues anglaises

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

Production

['I', 'writer']

Exemple d'implémentation complet

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]

Production

['I', 'writer']

Recherche de la liste complète des langues prises en charge

Avec l'aide du script Python suivant, nous pouvons également trouver la liste complète des langages pris en charge par le corpus de mots d'arrêt NLTK -

from nltk.corpus import stopwords
stopwords.fileids()

Production

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