Gensim - Création d'un sac de mots (BoW) Corpus

Nous avons compris comment créer un dictionnaire à partir d'une liste de documents et de fichiers texte (à partir d'un comme de plusieurs). Maintenant, dans cette section, nous allons créer un corpus de sac de mots (BoW). Pour travailler avec Gensim, c'est l'un des objets les plus importants avec lesquels nous devons nous familiariser. En gros, c'est le corpus qui contient le mot id et sa fréquence dans chaque document.

Création d'un corpus BoW

Comme discuté, dans Gensim, le corpus contient le mot id et sa fréquence dans chaque document. Nous pouvons créer un corpus BoW à partir d'une simple liste de documents et de fichiers texte. Ce que nous devons faire est de transmettre la liste de mots tokenisés à l'objet nomméDictionary.doc2bow(). Commençons donc par créer un corpus BoW en utilisant une simple liste de documents.

À partir d'une simple liste de phrases

Dans l'exemple suivant, nous allons créer un corpus BoW à partir d'une simple liste contenant trois phrases.

Tout d'abord, nous devons importer tous les packages nécessaires comme suit -

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

Maintenant, fournissez la liste contenant les phrases. Nous avons trois phrases dans notre liste -

doc_list = [
   "Hello, how are you?", "How do you do?", 
   "Hey what are you doing? yes you What are you doing?"
]

Ensuite, faites la tokenisation des phrases comme suit -

doc_tokenized = [simple_preprocess(doc) for doc in doc_list]

Créer un objet de corpora.Dictionary() comme suit -

dictionary = corpora.Dictionary()

Passez maintenant ces phrases symboliques à dictionary.doc2bow() objectcomme suit -

BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]

Enfin, nous pouvons imprimer Sac de corpus de mots -

print(BoW_corpus)

Production

[
   [(0, 1), (1, 1), (2, 1), (3, 1)], 
   [(2, 1), (3, 1), (4, 2)], [(0, 2), (3, 3), (5, 2), (6, 1), (7, 2), (8, 1)]
]

La sortie ci-dessus montre que le mot avec id = 0 apparaît une fois dans le premier document (car nous avons (0,1) dans la sortie) et ainsi de suite.

La sortie ci-dessus est en quelque sorte impossible à lire pour les humains. Nous pouvons également convertir ces identifiants en mots, mais pour cela, nous avons besoin de notre dictionnaire pour effectuer la conversion comme suit -

id_words = [[(dictionary[id], count) for id, count in line] for line in BoW_corpus]
print(id_words)

Production

[
   [('are', 1), ('hello', 1), ('how', 1), ('you', 1)], 
   [('how', 1), ('you', 1), ('do', 2)], 
   [('are', 2), ('you', 3), ('doing', 2), ('hey', 1), ('what', 2), ('yes', 1)]
]

Maintenant, la sortie ci-dessus est en quelque sorte lisible par l'homme.

Exemple d'implémentation complet

import gensim
import pprint
from gensim import corpora
from gensim.utils import simple_preprocess
doc_list = [
   "Hello, how are you?", "How do you do?", 
   "Hey what are you doing? yes you What are you doing?"
]
doc_tokenized = [simple_preprocess(doc) for doc in doc_list]
dictionary = corpora.Dictionary()
BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]
print(BoW_corpus)
id_words = [[(dictionary[id], count) for id, count in line] for line in BoW_corpus]
print(id_words)

À partir d'un fichier texte

Dans l'exemple suivant, nous allons créer un corpus BoW à partir d'un fichier texte. 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 utilisant simple_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

Ensuite, la ligne de codes suivante fera lire les documents de doc.txt et les tokeniseront -

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

Maintenant, nous devons passer ces mots symboliques dans dictionary.doc2bow() objet (comme dans l'exemple précédent)

BoW_corpus = [
   dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized
]
print(BoW_corpus)

Production

[
   [(9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (15, 1)], 
   [
      (15, 1), (16, 1), (17, 1), (18, 1), (19, 1), (20, 1), (21, 1), 
      (22, 1), (23, 1), (24, 1)
   ], 
   [
      (23, 2), (25, 1), (26, 1), (27, 1), (28, 1), (29, 1), 
      (30, 1), (31, 1), (32, 1), (33, 1), (34, 1), (35, 1), (36, 1)
   ], 
   [(3, 1), (18, 1), (37, 1), (38, 1), (39, 1), (40, 1), (41, 1), (42, 1), (43, 1)], 
   [
      (18, 1), (27, 1), (31, 2), (32, 1), (38, 1), (41, 1), (43, 1), 
      (44, 1), (45, 1), (46, 1), (47, 1), (48, 1), (49, 1), (50, 1), (51, 1), (52, 1)
   ]
]

le doc.txt le fichier a le contenu suivant -

CNTK, anciennement connue sous le nom de Computational Network Toolkit, est une boîte à outils gratuite et open-source de qualité commerciale qui nous permet de former des algorithmes d'apprentissage en profondeur pour apprendre comme le cerveau humain.

Vous pouvez trouver son tutoriel gratuit sur tutorialspoint.com qui fournit également les meilleurs tutoriels techniques sur des technologies telles que l'apprentissage automatique en profondeur par IA.

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
doc_tokenized = [
   simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
]
dictionary = corpora.Dictionary()
BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]
print(BoW_corpus)

Enregistrer et charger un Corpus Gensim

Nous pouvons sauvegarder le corpus à l'aide du script suivant -

corpora.MmCorpus.serialize(‘/Users/Desktop/BoW_corpus.mm’, bow_corpus)

#provide the path and the name of the corpus. The name of corpus is BoW_corpus and we saved it in Matrix Market format.

De même, nous pouvons charger le corpus enregistré en utilisant le script suivant -

corpus_load = corpora.MmCorpus(‘/Users/Desktop/BoW_corpus.mm’)
for line in corpus_load:
print(line)