Comment extraire les phrases du texte à l'aide du module NLTK Python

Comment extraire les phrases du texte à l'aide du module NLTK Python
La boîte à outils en langage naturel (NLTK) est un module de traitement de langue et de texte pour Python. NLTK peut analyser, traiter et tokenize texte disponible dans de nombreuses langues différentes à l'aide de sa bibliothèque intégrée de corpus et d'un grand pool de données lexicales. Python est l'un des langages de programmation les plus populaires utilisés dans la science des données et le traitement du langage, principalement en raison de la polyvalence de la langue et de la disponibilité de modules utiles comme NLTK. Cet article expliquera comment extraire les phrases des paragraphes de texte à l'aide de NLTK. Le code de ce guide a été testé avec Python 3.8.2 et NLTK 3.4.5 sur Ubuntu 20.04 LTS.

Installation de NLTK dans Linux

Pour installer NLTK dans Ubuntu, exécutez la commande ci-dessous:

$ sudo apt installer python3-nltk

Les packages NLTK sont disponibles dans toutes les principales distributions Linux. Recherchez le mot-clé «NLTK» dans le gestionnaire de packages pour installer les packages. Si pour une raison quelconque, NLTK n'est pas disponible dans les référentiels de votre distribution, vous pouvez l'installer à partir du gestionnaire de package PIP en exécutant la commande ci-dessous:

$ pip install --User -u nltk

Notez que vous devrez d'abord installer PIP à partir de votre gestionnaire de packages pour que la commande ci-dessus fonctionne. Sur certaines distributions, il peut être appelé pip3. Vous pouvez également suivre les instructions d'installation détaillées disponibles sur le site officiel de NLTK.

Extraction de phrases d'un paragraphe utilisant NLTK

Pour les paragraphes sans ponctuations et espacés complexes, vous pouvez utiliser le tokenizer NLTK de phrase intégré, appelé «Tokenzer Punkt», qui est livré avec un modèle pré-formé. Vous pouvez également utiliser vos propres modèles de données formés pour tokeniser le texte en phrases. Les modèles de données formés sur mesure sont hors de portée de cet article, donc le code ci-dessous utilisera le tokenizer anglais Punkt intégré. Pour télécharger le fichier de ressources Punkt, exécutez les trois commandes suivantes successivement et attendez que le téléchargement se termine:

$ python3
$ importer nltk
$ nltk.Télécharger ('Punkt')

Un paragraphe de «Alice's Adventures in Wonderland» sera utilisé dans l'échantillon de code ci-dessous:

Importer NLTK
para = "soit le puits était très profond, ou elle est tombée très lentement, car elle avait
Beaucoup de temps en descendant pour la regarder et se demander ce qui se passait
pour arriver ensuite. Tout d'abord, elle a essayé de regarder en bas et de distinguer ce qu'elle venait,
Mais il faisait trop sombre pour voir quoi que ce soit; Puis elle a regardé les côtés du puits, et
ont remarqué qu'ils étaient remplis d'armoires et de carreaux; Ici et là elle
des cartes et des images vues accrochées à des chevilles. Elle a enlevé un pot dans l'une des étagères
alors qu'elle passait; Il était étiqueté «Marmelade orange», mais pour sa grande déception
était vide: elle n'aimait pas laisser tomber le pot de peur de tuer quelqu'un, donc gérée
pour le mettre dans l'un des placards alors qu'elle est tombée devant ça."
jetons = nltk.Send_tokenize (para)
pour t dans les jetons:
print (t, "\ n")

L'exécution du code ci-dessus vous donnera la sortie suivante:

Le tokenizer de phrase Punkt intégré fonctionne bien si vous souhaitez tokensiner des paragraphes simples. Après l'importation du module NLTK, tout ce que vous avez à faire est d'utiliser la méthode «Send_Tokenize ()» sur un grand corpus de texte. Cependant, le jetons de phrase Punkt peut ne pas détecter correctement les phrases lorsqu'il y a un paragraphe complexe qui contient de nombreux marques de ponctuation, marques d'exclamation, abréviations ou symboles répétitifs. Il n'est pas possible de définir un moyen standard de surmonter ces problèmes. Vous devrez rédiger du code personnalisé pour résoudre ces problèmes à l'aide de regex, de manipulation de chaînes ou en formant votre propre modèle de données au lieu d'utiliser le modèle de données Punkt intégré.

Vous pouvez également essayer de modifier le modèle PUNKT existant pour réparer la tokenisation incorrecte en utilisant des paramètres supplémentaires. Pour ce faire, suivez la documentation officielle de la tokenisation Punkt disponible ici. Pour utiliser vos propres ajustements personnalisés, une légère modification du code est requise:

de NLTK.tokenize.Punkt Import PunktSendenTokesizer, Punktparameters
para = "soit le puits était très profond, soit elle est tombée très lentement, car elle avait beaucoup
du temps en descendant pour regarder à son sujet et se demander ce qui allait se passer
suivant. Tout d'abord, elle a essayé de regarder en bas et de distinguer ce qu'elle venait, mais c'était
Trop sombre pour voir quoi que ce soit; Puis elle a regardé les côtés du puits et a remarqué
qu'ils étaient remplis d'armoires et de carreaux de livre; Ici et là, elle a vu des cartes
et des images accrochées à des chevilles. Elle a enlevé un pot dans l'une des étagères alors qu'elle
passé; Il était étiqueté «Marmelade orange», mais à sa grande déception, c'était
vide: elle n'aimait pas laisser tomber le pot de peur de tuer quelqu'un, alors a réussi à
Mettez-le dans l'un des placards alors qu'elle est tombée devant elle."
punkt_params = punktparameters ()
punkt_params.abrév_types = set ([«mr», «mrs», «llc»])
tokenizer = punktsensencetokenzer (punkt_params)
jetons = tokenizer.tokenize (para)
pour t dans les jetons:
print (t, "\ n")

Le code ci-dessus fait le même travail que la méthode «send_tokenize ()». Cependant, vous pouvez désormais définir vos propres règles en utilisant des méthodes intégrées et les transmettre comme arguments, comme décrit dans la documentation. Par exemple, certaines abréviations ont été ajoutées au code ci-dessus. Si ces abréviations sont suivies d'une ponctuation, elles ne seront pas divisées en une nouvelle phrase. Le comportement normal consiste à utiliser un point ou une période comme indication de la fin d'une phrase.

Conclusion

NLTK et ses méthodes de tokenisation sont assez efficaces pour les données de texte de tokenisation et de traitement. Cependant, les modèles pré-formés peuvent ne pas fonctionner à 100% avec différents types de textes. Vous devrez peut-être améliorer les modèles existants, former et fournir le vôtre, ou écrire votre propre code pour réparer les anomalies.