======Text Processing and Machine Learning TAL====== **{{tagpage>ia|Intelligence Artificielle}}** **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Ftext_processing_and_machine_learning_tal|English Version]]** **[[les_pages_intelligence_artificielle_en_details|Les Pages Intelligence Artificielle en détails]]** **{{tagpage>tal|Traitement Automatique du Langage}}** =====Définitions ===== === Text processing === * **[[https://en.wikipedia.org/wiki/Text_processing|Text processing sur Wikipedia EN]]** In computing, the term text processing refers to the theory and practice of automating the creation or manipulation of electronic text. === TAL === * **[[https://fr.wikipedia.org/wiki/Traitement_automatique_du_langage_naturel|TAL sur Wikipedia FR]]** Le traitement automatique du langage naturel (abr. TALN), ou traitement automatique de la langue naturelle1, ou encore traitement automatique des langues (abr. TAL) est un domaine multidisciplinaire impliquant la linguistique, l'informatique et l'intelligence artificielle, qui vise à créer des outils de traitement de la langue naturelle pour diverses applications. ===== Ressources ===== * [[https://openclassrooms.com/fr/courses/4470541-analysez-vos-donnees-textuelles|Analysez vos données textuelles]] sur OpenClassrooms. L'exemple est trop compliqué pour expliquer des notions simples. De plus, l'exemple n'est pas fourni, le code est partiel (avec des erreurs et un mauvais respect du PEP8). C'est en français et ça a le mérite d'exister. En anglais, beaucoup de ressources, en particulier: * [[https://machinelearningmastery.com/prepare-text-data-machine-learning-scikit-learn/ |How to Prepare Text Data for Machine Learning with scikit-learn]] * [[https://professional.mit.edu/course-catalog/machine-learning-big-data-and-text-processing-foundations|Machine Learning for Big Data and Text Processing: Foundations | Professional Education]] * [[https://www.pluralsight.com/guides/nlp-machine-learning-text-data|Natural Language Processing - Machine Learning with Text Data Pluralsight]] * [[https://towardsdatascience.com/natural-language-processing-nlp-for-machine-learning-d44498845d5b|Natural Language Processing(NLP) for Machine Learning]] https://cocoon.huma-num.fr/exist/crdo ===== NLTK Natural Language Toolkit===== **NLTK is a leading platform for building Python programs to work with human language data.** ==== Ressources ==== * [[https://www.nltk.org/index.html|nltk.org]] * [[https://en.wikipedia.org/wiki/Natural_Language_Toolkit|Natural_Language_Toolkit sur Wikipedia/EN]] ==== Installation ==== sudo pip3 install nltk python3 import nltk nltk.download('punkt') nltk.download('averaged_perceptron_tagger') nltk.download('stopwords') nltk.download('treebank') nltk.download('maxent_ne_chunker') nltk.download('words') =====Analyse du corpus avec NLTK sur un text simple===== ====Récupérération de textes et exploration du corpus==== ===En général=== Le corpus sera soit une liste, un dictionnaire, un set de string, récupéré dans une DB, dans du html, dans des fichiers ... qu'il peut être nécessaire de nettoyer, arranger. ===Exemple d'étape=== * Chargement d'un html * Récupération du texte voulu avec Beautifullsoup #!/usr/bin/env python3.7 import nltk from nltk.corpus import treebank raw = """À Monseigneur Le Duc de Bourgogne Prince, l’unique objet du soin des Immortels, Souffrez que mon encens parfume vos Autels. Je vous offre un peu tard ces présents de ma Muse ; """ # ### Récupération d'un texte # Tokenize the text tokens = nltk.wordpunct_tokenize(raw) print(f'tokens:\n{tokens}') # Je ne garde que du 2ème mot au 30ème tokens =tokens[2:30] print(f'Texte:\n{tokens}') # ### Normalizing 1 # Création d'un NLTK Text text = nltk.Text(tokens) print(f'Texte:\n{text}') # # Normalize the words words = [w.lower() for w in text] print(f'words: nombre={len(words)}\n{words}') # Build vocabulary (les mots sans la ponctuation, apostrophe) vocab = sorted(set(words)) print(f'vocab: nombre={len(vocab)}\n{vocab}') # ### Normalizing 2 # Tous les mots sans exception mots_brut = nltk.word_tokenize(raw) print(f'\nTous les mots bruts = {mots_brut}\n') print(f'\nNombre de mots brut = {len(mots_brut)}\n') # Sans la ponctuation et apostrophes tokenizer = nltk.RegexpTokenizer(r'\w+') bons_mots = tokenizer.tokenize(raw.lower()) print(f'\nTous les bons mots = {bons_mots}\n') print(f'\nNombre de bons mots = {len(bons_mots)}\n') # Fréquence des mots, sans la ponctuation et apostrophes tokenizer = nltk.RegexpTokenizer(r'\w+') corpora = tokenizer.tokenize(raw.lower()) freq = nltk.FreqDist(corpora) print(f'Fréquence des mots dans le désordre:') for k, v in freq.items(): print(f' {k} {v}') # ### Some simple things you can do with NLTK tokens = nltk.word_tokenize(raw) tagged = nltk.pos_tag(tokens) print(f'tagged[0:6] = {tagged[0:6]}') # Identify named entities entities = nltk.chunk.ne_chunk(tagged) print(f'entities = {entities}') # Display a parse tree: t = treebank.parsed_sents('wsj_0001.mrg')[0] t.draw() tokens: ['À', 'Monseigneur', 'Le', 'Duc', 'de', 'Bourgogne', 'Prince', ',', 'l', '’', 'unique', 'objet', 'du', 'soin', 'des', 'Immortels', ',', 'Souffrez', 'que', 'mon', 'encens', 'parfume', 'vos', 'Autels', '.', 'Je', 'vous', 'offre', 'un', 'peu', 'tard', 'ces', 'présents', 'de', 'ma', 'Muse', ';'] Texte: ['Le', 'Duc', 'de', 'Bourgogne', 'Prince', ',', 'l', '’', 'unique', 'objet', 'du', 'soin', 'des', 'Immortels', ',', 'Souffrez', 'que', 'mon', 'encens', 'parfume', 'vos', 'Autels', '.', 'Je', 'vous', 'offre', 'un', 'peu'] Texte: words: nombre=28 ['le', 'duc', 'de', 'bourgogne', 'prince', ',', 'l', '’', 'unique', 'objet', 'du', 'soin', 'des', 'immortels', ',', 'souffrez', 'que', 'mon', 'encens', 'parfume', 'vos', 'autels', '.', 'je', 'vous', 'offre', 'un', 'peu'] vocab: nombre=27 [',', '.', 'autels', 'bourgogne', 'de', 'des', 'du', 'duc', 'encens', 'immortels', 'je', 'l', 'le', 'mon', 'objet', 'offre', 'parfume', 'peu', 'prince', 'que', 'soin', 'souffrez', 'un', 'unique', 'vos', 'vous', '’'] Tous les mots bruts = ['À', 'Monseigneur', 'Le', 'Duc', 'de', 'Bourgogne', 'Prince', ',', 'l', '’', 'unique', 'objet', 'du', 'soin', 'des', 'Immortels', ',', 'Souffrez', 'que', 'mon', 'encens', 'parfume', 'vos', 'Autels', '.', 'Je', 'vous', 'offre', 'un', 'peu', 'tard', 'ces', 'présents', 'de', 'ma', 'Muse', ';'] Nombre de mots brut = 37 Tous les bons mots = ['à', 'monseigneur', 'le', 'duc', 'de', 'bourgogne', 'prince', 'l', 'unique', 'objet', 'du', 'soin', 'des', 'immortels', 'souffrez', 'que', 'mon', 'encens', 'parfume', 'vos', 'autels', 'je', 'vous', 'offre', 'un', 'peu', 'tard', 'ces', 'présents', 'de', 'ma', 'muse'] Nombre de bons mots = 32 Fréquence des mots dans le désordre: à 1 monseigneur 1 le 1 duc 1 de 2 bourgogne 1 prince 1 l 1 etc ... tagged[0:6] = [('À', 'JJ'), ('Monseigneur', 'NNP'), ('Le', 'NNP'), ('Duc', 'NNP'), ('de', 'IN'), ('Bourgogne', 'NNP')] entities = (S À/JJ (ORGANIZATION Monseigneur/NNP Le/NNP Duc/NNP) de/IN (PERSON Bourgogne/NNP Prince/NNP) ,/, l/NN ’/NNP unique/NN objet/NN du/NN soin/NN des/NNS (PERSON Immortels/NNP) ,/, (GPE Souffrez/NNP) que/NN mon/NN encens/VBZ parfume/JJ vos/NN (PERSON Autels/NNP) ./. Je/NNP vous/JJ offre/NN un/JJ peu/NN tard/NN ces/VBZ présents/NNS de/IN ma/NN (ORGANIZATION Muse/NNP) ;/:) {{ :media_10:nltk_01.png?800 |}} =====Apprentissage avec des Fables de La Fontaine===== [[TAL Traitement Automatique du Langage avec des Fables de La Fontaine]] {{tag> ia python tal }}