Gensim - Erstellen eines Korpus mit Worten (BoW)

Wir haben verstanden, wie man ein Wörterbuch aus einer Liste von Dokumenten und aus Textdateien (aus einer sowie aus mehreren) erstellt. In diesem Abschnitt erstellen wir nun einen BoW-Korpus (Bag-of-Words). Um mit Gensim arbeiten zu können, ist es eines der wichtigsten Objekte, mit denen wir uns vertraut machen müssen. Grundsätzlich ist es der Korpus, der die Wort-ID und ihre Häufigkeit in jedem Dokument enthält.

BoW Corpus erstellen

Wie bereits erwähnt, enthält der Korpus in Gensim in jedem Dokument das Wort id und seine Häufigkeit. Wir können einen BoW-Korpus aus einer einfachen Liste von Dokumenten und aus Textdateien erstellen. Was wir tun müssen, ist, die tokenisierte Liste von Wörtern an das benannte Objekt zu übergebenDictionary.doc2bow(). Beginnen wir also mit der Erstellung eines BoW-Korpus anhand einer einfachen Liste von Dokumenten.

Aus einer einfachen Liste von Sätzen

Im folgenden Beispiel erstellen wir einen BoW-Korpus aus einer einfachen Liste mit drei Sätzen.

Zuerst müssen wir alle erforderlichen Pakete wie folgt importieren:

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

Geben Sie nun die Liste mit den Sätzen an. Wir haben drei Sätze in unserer Liste -

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

Führen Sie als Nächstes die Tokenisierung der Sätze wie folgt durch:

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

Erstellen Sie ein Objekt von corpora.Dictionary() wie folgt -

dictionary = corpora.Dictionary()

Übergeben Sie nun diese symbolisierten Sätze an dictionary.doc2bow() objectwie folgt -

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

Endlich können wir Bag of Word Corpus drucken -

print(BoW_corpus)

Ausgabe

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

Die obige Ausgabe zeigt, dass das Wort mit id = 0 im ersten Dokument einmal vorkommt (weil wir (0,1) in der Ausgabe haben) und so weiter.

Die obige Ausgabe ist für Menschen irgendwie nicht lesbar. Wir können diese IDs auch in Wörter konvertieren, aber dafür benötigen wir unser Wörterbuch, um die Konvertierung wie folgt durchzuführen:

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

Ausgabe

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

Jetzt ist die obige Ausgabe irgendwie von Menschen lesbar.

Vollständiges Implementierungsbeispiel

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)

Aus einer Textdatei

Im folgenden Beispiel erstellen wir einen BoW-Korpus aus einer Textdatei. Zu diesem Zweck haben wir das im vorherigen Beispiel verwendete Dokument in der genannten Textdatei gespeichertdoc.txt..

Gensim liest die Datei zeilenweise und verarbeitet sie zeilenweise mit simple_preprocess. Auf diese Weise muss nicht die gesamte Datei auf einmal in den Speicher geladen werden.

Implementierungsbeispiel

Importieren Sie zunächst die erforderlichen und erforderlichen Pakete wie folgt:

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

In der folgenden Codezeile werden die Dokumente aus doc.txt gelesen und mit einem Token versehen.

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

Jetzt müssen wir diese symbolisierten Wörter weitergeben dictionary.doc2bow() Objekt (wie im vorherigen Beispiel)

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

Ausgabe

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

Das doc.txt Datei haben den folgenden Inhalt -

CNTK, früher bekannt als Computational Network Toolkit, ist ein kostenloses, benutzerfreundliches Open-Source-Toolkit für kommerzielle Zwecke, mit dem wir Deep-Learning-Algorithmen trainieren können, um wie das menschliche Gehirn zu lernen.

Das kostenlose Tutorial finden Sie auf tutorialspoint.com. Außerdem finden Sie kostenlos die besten technischen Tutorials zu Technologien wie AI Deep Learning Machine Learning.

Vollständiges Implementierungsbeispiel

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)

Speichern und Laden eines Gensim-Korpus

Wir können den Korpus mit Hilfe des folgenden Skripts speichern -

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.

Ebenso können wir den gespeicherten Korpus mithilfe des folgenden Skripts laden:

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