Gensim - Creación de un corpus de bolsa de palabras (BoW)

Hemos entendido cómo crear un diccionario a partir de una lista de documentos y de archivos de texto (tanto de uno como de más de uno). Ahora, en esta sección, crearemos un corpus de bolsa de palabras (BoW). Para trabajar con Gensim, es uno de los objetos más importantes con los que debemos familiarizarnos. Básicamente, es el corpus que contiene la palabra id y su frecuencia en cada documento.

Creación de un corpus de BoW

Como se discutió, en Gensim, el corpus contiene la palabra id y su frecuencia en cada documento. Podemos crear un corpus BoW a partir de una simple lista de documentos y de archivos de texto. Lo que tenemos que hacer es pasar la lista tokenizada de palabras al objeto llamadoDictionary.doc2bow(). Entonces, primero, comencemos creando un corpus BoW usando una lista simple de documentos.

De una lista simple de oraciones

En el siguiente ejemplo, crearemos un corpus BoW a partir de una lista simple que contiene tres oraciones.

Primero, necesitamos importar todos los paquetes necesarios de la siguiente manera:

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

Ahora proporcione la lista que contiene las oraciones. Tenemos tres frases en nuestra lista:

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

A continuación, realice la tokenización de las oraciones de la siguiente manera:

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

Crea un objeto de corpora.Dictionary() como sigue -

dictionary = corpora.Dictionary()

Ahora pase estas oraciones simbólicas a dictionary.doc2bow() objectcomo sigue -

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

Por fin podemos imprimir Bag of word corpus -

print(BoW_corpus)

Salida

[
   [(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 salida anterior muestra que la palabra con id = 0 aparece una vez en el primer documento (porque tenemos (0,1) en la salida) y así sucesivamente.

De alguna manera, los humanos no pueden leer la salida anterior. También podemos convertir estos identificadores en palabras, pero para esto necesitamos que nuestro diccionario haga la conversión de la siguiente manera:

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

Salida

[
   [('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)]
]

Ahora la salida anterior es de alguna manera legible por humanos.

Ejemplo de implementación completo

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)

Desde un archivo de texto

En el siguiente ejemplo, crearemos un corpus BoW a partir de un archivo de texto. Para ello, hemos guardado el documento, utilizado en el ejemplo anterior, en el archivo de texto denominadodoc.txt..

Gensim leerá el archivo línea por línea y procesará una línea a la vez utilizando simple_preprocess. De esta manera, no necesita cargar el archivo completo en la memoria de una vez.

Ejemplo de implementación

Primero, importe los paquetes requeridos y necesarios de la siguiente manera:

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

A continuación, la siguiente línea de códigos hará que se lean los documentos de doc.txt y los tokenice:

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

Ahora tenemos que pasar estas palabras tokenizadas a dictionary.doc2bow() objeto (como se hizo en el ejemplo anterior)

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

Salida

[
   [(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)
   ]
]

los doc.txt archivo tiene el siguiente contenido -

CNTK, anteriormente conocido como Computational Network Toolkit, es un juego de herramientas de calidad comercial, de código abierto y fácil de usar que nos permite entrenar algoritmos de aprendizaje profundo para aprender como el cerebro humano.

Puede encontrar su tutorial gratuito en tutorialspoint.com y también proporciona los mejores tutoriales técnicos sobre tecnologías como el aprendizaje automático de aprendizaje profundo de inteligencia artificial de forma gratuita.

Ejemplo de implementación completo

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)

Guardar y cargar un Gensim Corpus

Podemos guardar el corpus con la ayuda del siguiente script:

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 manera similar, podemos cargar el corpus guardado usando el siguiente script:

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