Python

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

Comment extraire des phrases du texte à l'aide du module Python NLTK
Le Natural Language Toolkit (NLTK) est un module de traitement de langage et de texte pour Python. NLTK peut analyser, traiter et tokeniser du texte disponible dans de nombreuses langues différentes à l'aide de sa bibliothèque intégrée de corpus et de son vaste 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 du langage et de la disponibilité de modules utiles comme NLTK. Cet article explique comment extraire des phrases de paragraphes de texte en utilisant 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 sous 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 paquets pip en exécutant la commande ci-dessous :

$ pip install --user -U nltk

Notez que vous devrez d'abord installer pip depuis votre gestionnaire de paquets 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.

Extraire des phrases d'un paragraphe à l'aide de NLTK

Pour les paragraphes sans ponctuation ni espacement complexes, vous pouvez utiliser le tokenizer de phrase NLTK intégré, appelé « Punkt tokenizer », fourni avec un modèle pré-entraîné. Vous pouvez également utiliser vos propres modèles de données entraînés pour segmenter le texte en phrases. Les modèles de données personnalisés n'entrent pas dans le cadre de cet article, donc le code ci-dessous utilisera le tokenizer intégré de Punkt English. Pour télécharger le fichier de ressources Punkt, exécutez successivement les trois commandes suivantes et attendez la fin du téléchargement :

$ python3
$ importation nltk
$ nltk.télécharger('punkt')

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

importer nltk
para = « Soit le puits était très profond, soit elle tombait très lentement, car elle avait
beaucoup de temps alors qu'elle descendait pour regarder autour d'elle et se demander ce qui se passait
arriver ensuite. D'abord, elle a essayé de baisser les yeux et de comprendre ce à quoi elle venait,
mais il faisait trop sombre pour voir quoi que ce soit ; puis elle regarda les côtés du puits, et
remarqua qu'ils étaient remplis d'armoires et d'étagères ; ici et là elle
vu des cartes et des images accrochées à des chevilles. Elle a décroché un pot d'une des étagères
comme elle passait ; il était étiqueté "MARMALADE D'ORANGE", mais à sa grande déception il
était vide : elle n'aimait pas laisser tomber le bocal de peur de tuer quelqu'un, alors réussit
pour le mettre dans l'un des placards alors qu'elle tombait devant."
jetons = nltk.sent_tokenize(para)
pour t en jetons :
imprimer (t, "\n")

L'exécution du code ci-dessus vous donnera le résultat suivant :

Soit le puits était très profond, soit elle tombait très lentement, car elle avait tout le temps de
elle descendit pour regarder autour d'elle et se demander ce qui allait se passer ensuite.
Tout d'abord, elle a essayé de baisser les yeux et de comprendre ce qu'elle voulait en venir, mais il faisait trop sombre
voir n'importe quoi; puis elle regarda les côtés du puits et remarqua qu'ils étaient
rempli d'armoires et d'étagères ; ici et là, elle a vu des cartes et des images accrochées
sur des chevilles.
Elle décrocha un pot d'une des étagères en passant ; il était étiqueté 'MARMALADE D'ORANGE',
mais à sa grande déception il était vide : elle n'aimait pas laisser tomber le pot de peur de
tuant quelqu'un, alors réussi à le mettre dans l'un des placards alors qu'elle tombait devant.

Le tokenizer de phrase Punkt intégré fonctionne bien si vous voulez tokeniser des paragraphes simples. Après avoir importé le module NLTK, il vous suffit d'utiliser la méthode "sent_tokenize()" sur un gros corpus de texte. Cependant, le tokenizer de phrase Punkt peut ne pas détecter correctement les phrases lorsqu'un paragraphe complexe contient de nombreux signes de ponctuation, points d'exclamation, abréviations ou symboles répétitifs. Il n'est pas possible de définir une méthode standard pour surmonter ces problèmes. Vous devrez écrire du code personnalisé pour résoudre ces problèmes à l'aide d'expressions régulières, de manipulations de chaînes ou en entraînant votre propre modèle de données au lieu d'utiliser le modèle de données intégré Punkt.

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

de nltk.tokeniser.punkt import PunktSentenceTokenizer, PunktParameters
para = « Soit le puits était très profond, soit elle tombait très lentement, car elle avait beaucoup
du temps alors qu'elle descendait pour regarder autour d'elle et se demander ce qui allait se passer
suivant. D'abord, elle a essayé de baisser les yeux et de comprendre où elle voulait en venir, mais c'était
trop sombre pour voir quoi que ce soit; puis elle regarda les parois du puits et remarqua
qu'ils étaient remplis d'armoires et d'étagères ; ici et là elle a vu des cartes
et des images accrochées aux chevilles. Elle a pris un pot de l'une des étagères alors qu'elle
passé; il était étiqueté 'MARMALADE D'ORANGE', mais à sa grande déception c'était
vide : elle n'aimait pas laisser tomber le bocal de peur de tuer quelqu'un, elle a donc réussi à
le mettre dans l'un des placards alors qu'elle tombait devant."
punkt_params = PunktParameters()
punkt_params.abrév_types = set(['Mr', 'Mme', 'LLC'])
tokenizer = PunktSentenceTokenizer(punkt_params)
jetons = tokenizer.tokenize(para)
pour t en jetons :
imprimer (t, "\n")

Le code ci-dessus fait le même travail que la méthode "sent_tokenize()". Cependant, vous pouvez maintenant définir vos propres règles à l'aide de méthodes intégrées et les passer en 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'un signe de ponctuation, elles ne seront pas divisées en une nouvelle phrase. Le comportement normal consiste à utiliser un point ou un point comme indication de la fin d'une phrase.

Conclusion

NLTK et ses méthodes de tokenisation sont assez efficaces pour la tokenisation et le traitement des données textuelles. Cependant, les modèles pré-entraîné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 les vôtres, ou écrire votre propre code pour corriger les anomalies.

Meilleures distributions Linux pour les jeux en 2021
Le système d'exploitation Linux a parcouru un long chemin depuis son apparence originale, simple et basée sur le serveur. Ce système d'exploitation s'...
Comment capturer et diffuser votre session de jeu sur Linux
Dans le passé, jouer à des jeux n'était considéré qu'un passe-temps, mais avec le temps, l'industrie du jeu a connu une croissance énorme en termes de...
Meilleurs jeux à jouer avec le suivi des mains
Oculus Quest a récemment introduit l'idée géniale du suivi manuel sans contrôleurs. Avec un nombre toujours croissant de jeux et d'activités qui exécu...