Gensim - Creazione di un sacco di parole (BoW) Corpus

Abbiamo capito come creare un dizionario da un elenco di documenti e da file di testo (da uno così come da più di uno). Ora, in questa sezione, creeremo un corpus di bag of words (BoW). Per poter lavorare con Gensim, è uno degli oggetti più importanti con cui dobbiamo familiarizzare. Fondamentalmente, è il corpus che contiene la parola id e la sua frequenza in ogni documento.

Creazione di un BoW Corpus

Come discusso, in Gensim, il corpus contiene la parola id e la sua frequenza in ogni documento. Possiamo creare un corpus BoW da un semplice elenco di documenti e da file di testo. Quello che dobbiamo fare è passare l'elenco di parole tokenizzato all'oggetto denominatoDictionary.doc2bow(). Quindi, per prima cosa, iniziamo creando un corpus BoW utilizzando un semplice elenco di documenti.

Da un semplice elenco di frasi

Nell'esempio seguente, creeremo un corpus BoW da un semplice elenco contenente tre frasi.

Innanzitutto, dobbiamo importare tutti i pacchetti necessari come segue:

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

Fornisci ora l'elenco contenente le frasi. Abbiamo tre frasi nella nostra lista:

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

Quindi, eseguire la tokenizzazione delle frasi come segue:

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

Crea un oggetto di corpora.Dictionary() come segue -

dictionary = corpora.Dictionary()

Ora passa queste frasi tokenizzate a dictionary.doc2bow() objectcome segue -

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

Finalmente possiamo stampare Bag of word corpus -

print(BoW_corpus)

Produzione

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

L'output sopra mostra che la parola con id = 0 appare una volta nel primo documento (perché abbiamo (0,1) nell'output) e così via.

L'output di cui sopra non è in qualche modo possibile per gli esseri umani leggere. Possiamo anche convertire questi ID in parole, ma per questo abbiamo bisogno del nostro dizionario per eseguire la conversione come segue:

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

Produzione

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

Ora l'output di cui sopra è in qualche modo leggibile dall'uomo.

Esempio di implementazione 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)

Da un file di testo

Nell'esempio seguente, creeremo un corpus BoW da un file di testo. Per questo abbiamo salvato il documento, utilizzato nell'esempio precedente, nel file di testo denominatodoc.txt..

Gensim leggerà il file riga per riga ed elaborerà una riga alla volta utilizzando simple_preprocess. In questo modo, non è necessario caricare il file completo in memoria tutto in una volta.

Esempio di implementazione

Innanzitutto, importa i pacchetti richiesti e necessari come segue:

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

Successivamente, la seguente riga di codici farà leggere i documenti da doc.txt e li tokenizzerà -

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

Ora dobbiamo passare queste parole simbolizzate in dictionary.doc2bow() oggetto (come nell'esempio precedente)

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

Produzione

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

Il doc.txt il file ha il seguente contenuto:

CNTK precedentemente noto come Computational Network Toolkit è un toolkit di livello commerciale open source gratuito e facile da usare che ci consente di addestrare algoritmi di deep learning per apprendere come il cervello umano.

Puoi trovare il suo tutorial gratuito su tutorialspoint.com che fornisce anche i migliori tutorial tecnici su tecnologie come l'apprendimento automatico del deep learning AI gratuitamente.

Esempio di implementazione 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)

Salvataggio e caricamento di un corpus Gensim

Possiamo salvare il corpus con l'aiuto del seguente 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.

Allo stesso modo, possiamo caricare il corpus salvato utilizzando il seguente script:

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