Gensim - Création d'un dictionnaire

Dans le dernier chapitre où nous avons discuté du vecteur et du modèle, vous avez eu une idée du dictionnaire. Ici, nous allons discuterDictionary objet un peu plus en détail.

Qu'est-ce que le dictionnaire?

Avant de plonger dans le concept de dictionnaire, comprenons quelques concepts simples de PNL -

  • Token - Un jeton signifie un «mot».

  • Document - Un document fait référence à une phrase ou à un paragraphe.

  • Corpus - Il se réfère à une collection de documents comme un sac de mots (BoW).

Pour tous les documents, un corpus contient toujours l'identifiant du jeton de chaque mot ainsi que son décompte de fréquence dans le document.

Passons au concept de dictionnaire dans Gensim. Pour travailler sur des documents texte, Gensim demande également que les mots, c'est-à-dire les jetons, soient convertis en leurs identifiants uniques. Pour y parvenir, il nous donne la possibilité deDictionary object, qui mappe chaque mot à son identifiant entier unique. Pour ce faire, il convertit le texte d'entrée en liste de mots, puis le transmet aucorpora.Dictionary() objet.

Besoin d'un dictionnaire

Maintenant, la question se pose de savoir quel est réellement le besoin d'un objet dictionnaire et où peut-il être utilisé? Dans Gensim, l'objet dictionnaire est utilisé pour créer un corpus de sac de mots (BoW) qui est également utilisé comme entrée pour la modélisation de sujets et d'autres modèles.

Formes d'entrées de texte

Il existe trois formes différentes de texte d'entrée, que nous pouvons fournir à Gensim -

  • Comme les phrases stockées dans l'objet de liste natif de Python (connu sous le nom de str en Python 3)

  • En un seul fichier texte (peut être petit ou grand)

  • Plusieurs fichiers texte

Créer un dictionnaire à l'aide de Gensim

Comme indiqué, dans Gensim, le dictionnaire contient le mappage de tous les mots, également appelés jetons, à leur identifiant entier unique. Nous pouvons créer un dictionnaire à partir d'une liste de phrases, d'un ou plusieurs fichiers texte (fichier texte contenant plusieurs lignes de texte). Alors, commençons par créer un dictionnaire en utilisant une liste de phrases.

À partir d'une liste de phrases

Dans l'exemple suivant, nous allons créer un dictionnaire à partir d'une liste de phrases. Lorsque nous avons une liste de phrases ou que vous pouvez dire plusieurs phrases, nous devons convertir chaque phrase en une liste de mots et la compréhension est l'un des moyens les plus courants de le faire.

Exemple d'implémentation

Tout d'abord, importez les packages requis et nécessaires comme suit -

import gensim
from gensim import corpora
from pprint import pprint

Ensuite, créez la liste de compréhension à partir de la liste de phrases / document pour l'utiliser en créant le dictionnaire -

doc = [
   "CNTK formerly known as Computational Network Toolkit",
   "is a free easy-to-use open-source commercial-grade toolkit",
   "that enable us to train deep learning algorithms to learn like the human brain."
]

Ensuite, nous devons diviser les phrases en mots. Cela s'appelle la tokenisation.

text_tokens = [[text for text in doc.split()] for doc in doc]

Maintenant, avec l'aide du script suivant, nous pouvons créer le dictionnaire -

dict_LoS = corpora.Dictionary(text_tokens)

Maintenant, obtenons plus d'informations comme le nombre de jetons dans le dictionnaire -

print(dict_LoS)

Production

Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)

Nous pouvons également voir le mappage mot à entier unique comme suit -

print(dict_LoS.token2id)

Production

{
   'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4, 
   'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9,
   'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14,
   'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19, 'learning': 20,
   'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}

Exemple d'implémentation complet

import gensim
from gensim import corpora
from pprint import pprint
doc = [
   "CNTK formerly known as Computational Network Toolkit",
   "is a free easy-to-use open-source commercial-grade toolkit",
   "that enable us to train deep learning algorithms to learn like the human brain."
]
text_tokens = [[text for text in doc.split()] for doc in doc]
dict_LoS = corpora.Dictionary(text_tokens)
print(dict_LoS.token2id)

À partir d'un seul fichier texte

Dans l'exemple suivant, nous allons créer un dictionnaire à partir d'un seul fichier texte. De la même manière, nous pouvons également créer un dictionnaire à partir de plus d'un fichier texte (c'est-à-dire répertoire de fichiers).

Pour cela, nous avons enregistré le document, utilisé dans l'exemple précédent, dans le fichier texte nommé doc.txt. Gensim lira le fichier ligne par ligne et traitera une ligne à la fois en utilisantsimple_preprocess. De cette façon, il n'a pas besoin de charger le fichier complet en mémoire en une seule fois.

Exemple d'implémentation

Tout d'abord, importez les packages requis et nécessaires comme suit -

import gensim
from gensim import corpora
from pprint import pprint
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os

La prochaine ligne de codes créera un dictionnaire gensim en utilisant le fichier texte unique nommé doc.txt -

dict_STF = corpora.Dictionary(
   simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
)

Maintenant, obtenons plus d'informations comme le nombre de jetons dans le dictionnaire -

print(dict_STF)

Production

Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)

Nous pouvons également voir le mappage mot à entier unique comme suit -

print(dict_STF.token2id)

Production

{
   'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4, 
   'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9, 
   'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14, 
   'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19, 
   'learning': 20, 'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}

Exemple d'implémentation complet

import gensim
from gensim import corpora
from pprint import pprint
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
dict_STF = corpora.Dictionary(
   simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
)
dict_STF = corpora.Dictionary(text_tokens)
print(dict_STF.token2id)

À partir de plusieurs fichiers texte

Créons maintenant un dictionnaire à partir de plusieurs fichiers, c'est-à-dire plus d'un fichier texte enregistré dans le même répertoire. Pour cet exemple, nous avons créé trois fichiers texte différents, à savoirfirst.txt, second.txt et third.txtcontenant les trois lignes du fichier texte (doc.txt), nous avons utilisé pour l'exemple précédent. Tous ces trois fichiers texte sont enregistrés dans un répertoire nomméABC.

Exemple d'implémentation

Pour implémenter cela, nous devons définir une classe avec une méthode qui peut parcourir les trois fichiers texte (First, Second et Third.txt) dans le répertoire (ABC) et générer la liste traitée des jetons de mots.

Définissons la classe nommée Read_files avoir une méthode nommée __iteration__ () comme suit -

class Read_files(object):
   def __init__(self, directoryname):
      elf.directoryname = directoryname
   def __iter__(self):
      for fname in os.listdir(self.directoryname):
         for line in open(os.path.join(self.directoryname, fname), encoding='latin'):
   yield simple_preprocess(line)

Ensuite, nous devons fournir le chemin du répertoire comme suit -

path = "ABC"

#provide the path as per your computer system where you saved the directory.

Les étapes suivantes sont similaires à celles des exemples précédents. La prochaine ligne de codes créera le répertoire Gensim en utilisant le répertoire contenant trois fichiers texte -

dict_MUL = corpora.Dictionary(Read_files(path))

Production

Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)

Maintenant, nous pouvons également voir le mappage mot en entier unique comme suit -

print(dict_MUL.token2id)

Production

{
   'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4, 
   'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9, 
   'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14, 
   'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19, 
   'learning': 20, 'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}

Enregistrer et charger un dictionnaire Gensim

Gensim soutient leur propre natif save() méthode pour enregistrer le dictionnaire sur le disque et load() méthode pour charger le dictionnaire à partir du disque.

Par exemple, nous pouvons enregistrer le dictionnaire à l'aide du script suivant -

Gensim.corpora.dictionary.save(filename)

#provide the path where you want to save the dictionary.

De même, nous pouvons charger le dictionnaire enregistré en utilisant la méthode load (). Le script suivant peut le faire -

Gensim.corpora.dictionary.load(filename)

#provide the path where you have saved the dictionary.