Boîte à outils en langage naturel - Tokenizing Text

Qu'est-ce que le tokenisation?

Il peut être défini comme le processus consistant à diviser un morceau de texte en parties plus petites, telles que des phrases et des mots. Ces pièces plus petites sont appelées jetons. Par exemple, un mot est un jeton dans une phrase et une phrase est un jeton dans un paragraphe.

Comme nous savons que la PNL est utilisée pour créer des applications telles que l'analyse des sentiments, les systèmes d'assurance qualité, la traduction de langues, les chatbots intelligents, les systèmes vocaux, etc., par conséquent, pour les construire, il devient essentiel de comprendre le modèle dans le texte. Les jetons mentionnés ci-dessus sont très utiles pour trouver et comprendre ces modèles. Nous pouvons considérer la tokenisation comme l'étape de base pour d'autres recettes telles que la racine et la lemmatisation.

Paquet NLTK

nltk.tokenize est le package fourni par le module NLTK pour réaliser le processus de tokenisation.

Tokenizing des phrases en mots

La division de la phrase en mots ou la création d'une liste de mots à partir d'une chaîne est une partie essentielle de toute activité de traitement de texte. Comprenons-le à l'aide de diverses fonctions / modules fournis parnltk.tokenize paquet.

module word_tokenize

word_tokenizemodule est utilisé pour la tokenisation de mots de base. L'exemple suivant utilisera ce module pour diviser une phrase en mots.

Exemple

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')

Production

['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']

Classe TreebankWordTokenizer

word_tokenize module, utilisé ci-dessus est essentiellement une fonction wrapper qui appelle la fonction tokenize () comme une instance du TreebankWordTokenizerclasse. Cela donnera le même résultat que celui obtenu en utilisant le module word_tokenize () pour diviser les phrases en mot. Voyons le même exemple implémenté ci-dessus -

Exemple

Tout d'abord, nous devons importer la boîte à outils en langage naturel (nltk).

import nltk

Maintenant, importez le TreebankWordTokenizer classe pour implémenter l'algorithme de tokenizer de mots -

from nltk.tokenize import TreebankWordTokenizer

Ensuite, créez une instance de la classe TreebankWordTokenizer comme suit -

Tokenizer_wrd = TreebankWordTokenizer()

Maintenant, saisissez la phrase que vous souhaitez convertir en jetons -

Tokenizer_wrd.tokenize(
   'Tutorialspoint.com provides high quality technical tutorials for free.'
)

Production

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials', 'for', 'free', '.'
]

Exemple d'implémentation complet

Voyons l'exemple de mise en œuvre complet ci-dessous

import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')

Production

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials','for', 'free', '.'
]

La convention la plus significative d'un tokenizer est de séparer les contractions. Par exemple, si nous utilisons le module word_tokenize () à cette fin, il donnera la sortie comme suit -

Exemple

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')

Production

['wo', "n't"]]

Ce genre de convention par TreebankWordTokenizerest inacceptable. C'est pourquoi nous avons deux jetons de mots alternatifs, à savoirPunktWordTokenizer et WordPunctTokenizer.

Classe WordPunktTokenizer

Un jeton de mot alternatif qui divise toute la ponctuation en jetons séparés. Comprenons-le avec l'exemple simple suivant -

Exemple

from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")

Production

['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']

Tokenizing du texte en phrases

Dans cette section, nous allons diviser le texte / paragraphe en phrases. NLTK fournitsent_tokenize module à cet effet.

Pourquoi est-ce nécessaire?

Une question évidente qui nous est venue à l'esprit est la suivante: lorsque nous avons un tokenizer de mots, pourquoi avons-nous besoin d'un tokenizer de phrases ou pourquoi avons-nous besoin de tokeniser le texte en phrases. Supposons que nous ayons besoin de compter les mots moyens dans les phrases, comment pouvons-nous faire cela? Pour accomplir cette tâche, nous avons besoin à la fois de tokenisation de phrase et de tokenisation de mot.

Comprenons la différence entre le tokenizer de phrase et de mot à l'aide de l'exemple simple suivant -

Exemple

import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer. 
It is going to be a simple example."
sent_tokenize(text)

Production

[
   "Let us understand the difference between sentence & word tokenizer.", 
   'It is going to be a simple example.'
]

Tokenisation de phrases à l'aide d'expressions régulières

Si vous pensez que la sortie du tokenizer de mots est inacceptable et que vous voulez un contrôle complet sur la façon de tokeniser le texte, nous avons une expression régulière qui peut être utilisée lors de la tokenisation de phrases. NLTK fournitRegexpTokenizer classe pour y parvenir.

Comprenons le concept à l'aide de deux exemples ci-dessous.

Dans le premier exemple, nous utiliserons une expression régulière pour faire correspondre les jetons alphanumériques plus les guillemets simples afin de ne pas diviser les contractions comme “won’t”.

Exemple 1

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")

Production

["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']

Dans le premier exemple, nous utiliserons une expression régulière pour tokeniser sur les espaces.

Exemple 2

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")

Production

["won't", 'is', 'a', 'contraction']

À partir de la sortie ci-dessus, nous pouvons voir que la ponctuation reste dans les jetons. Le paramètre gap = True signifie que le modèle va identifier les espaces à tokeniser. D'un autre côté, si nous utilisons le paramètre gap = False, le modèle sera utilisé pour identifier les jetons qui peuvent être vus dans l'exemple suivant -

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")

Production

[ ]

Cela nous donnera la sortie vierge.