Gensim - Creación de un diccionario
En el último capítulo donde discutimos sobre vector y modelo, tuvo una idea sobre el diccionario. Aquí vamos a discutirDictionary objeto con un poco más de detalle.
¿Qué es el Diccionario?
Antes de profundizar en el concepto de diccionario, comprendamos algunos conceptos simples de PNL:
Token - Un token significa una 'palabra'.
Document - Un documento se refiere a una oración o párrafo.
Corpus - Se refiere a una colección de documentos como una bolsa de palabras (BoW).
Para todos los documentos, un corpus siempre contiene la identificación del token de cada palabra junto con su recuento de frecuencia en el documento.
Pasemos al concepto de diccionario en Gensim. Para trabajar con documentos de texto, Gensim también requiere que las palabras, es decir, los tokens, se conviertan en sus identificadores únicos. Para lograrlo, nos brinda la facilidad deDictionary object, que asigna cada palabra a su ID entero único. Para ello, convierte el texto de entrada en la lista de palabras y luego lo pasa alcorpora.Dictionary() objeto.
Necesidad de diccionario
Ahora surge la pregunta de cuál es realmente la necesidad de un objeto de diccionario y dónde se puede usar. En Gensim, el objeto de diccionario se utiliza para crear un corpus de bolsa de palabras (BoW) que se utiliza además como entrada para el modelado de temas y otros modelos también.
Formas de entrada de texto
Hay tres formas diferentes de entrada de texto que podemos proporcionar a Gensim:
Como las oraciones almacenadas en el objeto de lista nativo de Python (conocido como str en Python 3)
Como un solo archivo de texto (puede ser pequeño o grande)
Varios archivos de texto
Creación de un diccionario con Gensim
Como se discutió, en Gensim, el diccionario contiene el mapeo de todas las palabras, también conocido como tokens, a su ID entero único. Podemos crear un diccionario a partir de una lista de oraciones, de uno o más de un archivo de texto (archivo de texto que contiene varias líneas de texto). Entonces, primero comencemos creando un diccionario usando una lista de oraciones.
De una lista de oraciones
En el siguiente ejemplo crearemos un diccionario a partir de una lista de oraciones. Cuando tenemos una lista de oraciones o puedes decir varias oraciones, debemos convertir cada oración en una lista de palabras y las comprensiones es una de las formas más comunes de hacer esto.
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
Luego, haga la lista de comprensión de la lista de oraciones / documento para usarla creando el diccionario -
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."
]
Luego, necesitamos dividir las oraciones en palabras. Se llama tokenización.
text_tokens = [[text for text in doc.split()] for doc in doc]
Ahora, con la ayuda del siguiente script, podemos crear el diccionario:
dict_LoS = corpora.Dictionary(text_tokens)
Ahora obtengamos más información, como la cantidad de tokens en el diccionario:
print(dict_LoS)
Salida
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
También podemos ver la palabra a la asignación de enteros únicos de la siguiente manera:
print(dict_LoS.token2id)
Salida
{
'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
}
Ejemplo de implementación completo
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)
Desde un archivo de texto único
En el siguiente ejemplo, crearemos un diccionario a partir de un solo archivo de texto. De manera similar, también podemos crear un diccionario a partir de más de un archivo de texto (es decir, directorio de archivos).
Para ello, hemos guardado el documento, utilizado en el ejemplo anterior, en el archivo de texto denominado doc.txt. Gensim leerá el archivo línea por línea y procesará una línea a la vez utilizandosimple_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
La siguiente línea de códigos hará que el diccionario gensim use el archivo de texto único llamado doc.txt -
dict_STF = corpora.Dictionary(
simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
)
Ahora obtengamos más información, como la cantidad de tokens en el diccionario:
print(dict_STF)
Salida
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
También podemos ver la palabra a la asignación de enteros únicos de la siguiente manera:
print(dict_STF.token2id)
Salida
{
'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
}
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
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)
Desde varios archivos de texto
Ahora creemos un diccionario a partir de varios archivos, es decir, más de un archivo de texto guardado en el mismo directorio. Para este ejemplo, hemos creado tres archivos de texto diferentes, a saberfirst.txt, second.txt y third.txtque contiene las tres líneas del archivo de texto (doc.txt), que usamos para el ejemplo anterior. Todos estos tres archivos de texto se guardan en un directorio llamadoABC.
Ejemplo de implementación
Para implementar esto, necesitamos definir una clase con un método que pueda iterar a través de los tres archivos de texto (Primero, Segundo y Tercero.txt) en el directorio (ABC) y producir la lista procesada de tokens de palabras.
Definamos la clase llamada Read_files tener un método llamado __iteration__ () como sigue -
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)
A continuación, debemos proporcionar la ruta del directorio de la siguiente manera:
path = "ABC"
#provide the path as per your computer system where you saved the directory.
Los siguientes pasos son similares a los que hicimos en los ejemplos anteriores. La siguiente línea de códigos creará el directorio Gensim utilizando el directorio que tiene tres archivos de texto:
dict_MUL = corpora.Dictionary(Read_files(path))
Salida
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
Ahora también podemos ver la palabra a la asignación de enteros únicos de la siguiente manera:
print(dict_MUL.token2id)
Salida
{
'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
}
Guardar y cargar un diccionario Gensim
Gensim apoya a su propio nativo save() método para guardar el diccionario en el disco y load() método para volver a cargar el diccionario desde el disco.
Por ejemplo, podemos guardar el diccionario con la ayuda del siguiente script:
Gensim.corpora.dictionary.save(filename)
#provide the path where you want to save the dictionary.
De manera similar, podemos cargar el diccionario guardado usando el método load (). El siguiente script puede hacer esto:
Gensim.corpora.dictionary.load(filename)
#provide the path where you have saved the dictionary.