Lecteurs de corpus et corpus personnalisés

Qu'est-ce qu'un corpus?

Un corpus est une vaste collection, au format structuré, de textes lisibles par machine qui ont été produits dans un cadre de communication naturel. Le mot Corpora est le pluriel de Corpus. Le corpus peut être dérivé de plusieurs manières comme suit -

  • Du texte qui était à l'origine électronique
  • À partir des transcriptions de la langue parlée
  • De la reconnaissance optique de caractères et ainsi de suite

La représentativité du corpus, l'équilibre du corpus, l'échantillonnage, la taille du corpus sont les éléments qui jouent un rôle important lors de la conception du corpus. Certains des corpus les plus populaires pour les tâches PNL sont TreeBank, PropBank, VarbNet et WordNet.

Comment créer un corpus personnalisé?

Lors du téléchargement de NLTK, nous avons également installé le package de données NLTK. Ainsi, nous avons déjà installé le paquet de données NLTK sur notre ordinateur. Si nous parlons de Windows, nous supposerons que ce package de données est installé àC:\natural_language_toolkit_data et si nous parlons de Linux, Unix et Mac OS X, nous supposerons que ce paquet de données est installé à /usr/share/natural_language_toolkit_data.

Dans la recette Python suivante, nous allons créer des corpus personnalisés qui doivent se trouver dans l'un des chemins définis par NLTK. Il en est ainsi car il peut être trouvé par NLTK. Afin d'éviter tout conflit avec le paquet de données officiel NLTK, créons un répertoire natural_language_toolkit_data personnalisé dans notre répertoire personnel.

import os, os.path
path = os.path.expanduser('~/natural_language_toolkit_data')
if not os.path.exists(path):
   os.mkdir(path)
os.path.exists(path)

Production

True

Maintenant, vérifions si nous avons le répertoire natural_language_toolkit_data dans notre répertoire personnel ou non -

import nltk.data
path in nltk.data.path

Production

True

Comme nous avons la sortie True, cela signifie que nous avons nltk_data répertoire dans notre répertoire personnel.

Maintenant, nous allons créer un fichier de liste de mots, nommé wordfile.txt et placez-le dans un dossier, nommé corpus dans nltk_data annuaire (~/nltk_data/corpus/wordfile.txt) et le chargera en utilisant nltk.data.load -

import nltk.data
nltk.data.load(‘corpus/wordfile.txt’, format = ‘raw’)

Production

b’tutorialspoint\n’

Lecteurs Corpus

NLTK fournit diverses classes CorpusReader. Nous allons les couvrir dans les recettes python suivantes

Créer un corpus de listes de mots

NLTK a WordListCorpusReaderclasse qui donne accès au fichier contenant une liste de mots. Pour la recette Python suivante, nous devons créer un fichier de liste de mots qui peut être CSV ou un fichier texte normal. Par exemple, nous avons créé un fichier nommé 'list' qui contient les données suivantes -

tutorialspoint
Online
Free
Tutorials

Maintenant, instancions un WordListCorpusReader classe produisant la liste des mots à partir de notre fichier créé ‘list’.

from nltk.corpus.reader import WordListCorpusReader
reader_corpus = WordListCorpusReader('.', ['list'])
reader_corpus.words()

Production

['tutorialspoint', 'Online', 'Free', 'Tutorials']

Créer un corpus de mots étiqueté POS

NLTK a TaggedCorpusReaderclasse à l'aide de laquelle nous pouvons créer un corpus de mots étiqueté POS. En fait, le marquage POS est le processus d'identification de la balise de partie de discours d'un mot.

L'un des formats les plus simples pour un corpus étiqueté est de la forme `` mot / étiquette '' comme après un extrait du corpus brun -

The/at-tl expense/nn and/cc time/nn involved/vbn are/ber
astronomical/jj ./.

Dans l'extrait ci-dessus, chaque mot a une étiquette qui désigne son POS. Par exemple,vb fait référence à un verbe.

Maintenant, instancions un TaggedCorpusReaderclasse produisant des mots étiquetés POS forment le fichier ‘list.pos’, qui contient l'extrait ci-dessus.

from nltk.corpus.reader import TaggedCorpusReader
reader_corpus = TaggedCorpusReader('.', r'.*\.pos')
reader_corpus.tagged_words()

Production

[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ...]

Création d'un corpus de phrases fragmentées

NLTK a ChnkedCorpusReaderclasse à l'aide de laquelle nous pouvons créer un corpus de phrases Chunked. En fait, un morceau est une courte phrase dans une phrase.

Par exemple, nous avons l'extrait suivant du tagged treebank corpus -

[Earlier/JJR staff-reduction/NN moves/NNS] have/VBP trimmed/VBN about/
IN [300/CD jobs/NNS] ,/, [the/DT spokesman/NN] said/VBD ./.

Dans l'extrait ci-dessus, chaque morceau est une phrase nominale, mais les mots qui ne sont pas entre crochets font partie de l'arbre de phrase et ne font pas partie d'un sous-arbre de phrase nominale.

Maintenant, instancions un ChunkedCorpusReader classe produisant une phrase fragmentée à partir du fichier ‘list.chunk’, qui contient l'extrait ci-dessus.

from nltk.corpus.reader import ChunkedCorpusReader
reader_corpus = TaggedCorpusReader('.', r'.*\.chunk')
reader_corpus.chunked_words()

Production

[
   Tree('NP', [('Earlier', 'JJR'), ('staff-reduction', 'NN'), ('moves', 'NNS')]),
   ('have', 'VBP'), ...
]

Créer un corpus de texte catégorisé

NLTK a CategorizedPlaintextCorpusReaderclasse à l'aide de laquelle nous pouvons créer un corpus de texte catégorisé. C'est très utile dans le cas où nous avons un grand corpus de texte et que nous voulons le catégoriser dans des sections séparées.

Par exemple, le corpus brun comporte plusieurs catégories différentes. Découvrons-les à l'aide du code Python suivant -

from nltk.corpus import brown^M
brown.categories()

Production

[
   'adventure', 'belles_lettres', 'editorial', 'fiction', 'government',
   'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion',
   'reviews', 'romance', 'science_fiction'
]

L'un des moyens les plus simples de catégoriser un corpus est d'avoir un fichier pour chaque catégorie. Par exemple, voyons les deux extraits dumovie_reviews corpus -

movie_pos.txt

La fine ligne rouge est imparfaite mais elle provoque.

movie_neg.txt

Une production à gros budget et brillante ne peut pas compenser le manque de spontanéité qui imprègne leur émission de télévision.

Donc, à partir de deux fichiers ci-dessus, nous avons deux catégories à savoir pos et neg.

Maintenant, instancions un CategorizedPlaintextCorpusReader classe.

from nltk.corpus.reader import CategorizedPlaintextCorpusReader
reader_corpus = CategorizedPlaintextCorpusReader('.', r'movie_.*\.txt',
cat_pattern = r'movie_(\w+)\.txt')
reader_corpus.categories()
reader_corpus.fileids(categories = [‘neg’])
reader_corpus.fileids(categories = [‘pos’])

Production

['neg', 'pos']
['movie_neg.txt']
['movie_pos.txt']