Gensim - Tworzenie worka słów (BoW) Corpus

Zrozumieliśmy, jak stworzyć słownik z listy dokumentów iz plików tekstowych (z jednego, jak iz więcej niż jednego). Teraz, w tej sekcji, utworzymy korpus worka słów (BoW). Aby pracować z Gensimem, jest to jeden z najważniejszych obiektów, z którymi musimy się zapoznać. Zasadniczo jest to korpus zawierający słowo id i jego częstotliwość w każdym dokumencie.

Tworzenie korpusu BoW

Jak omówiono w Gensim, korpus zawiera słowo id i jego częstotliwość w każdym dokumencie. Możemy stworzyć korpus BoW z prostej listy dokumentów oraz z plików tekstowych. To, co musimy zrobić, to przekazać tokenizowaną listę słów do nazwanego obiektuDictionary.doc2bow(). Więc najpierw zacznijmy od stworzenia korpusu BoW przy użyciu prostej listy dokumentów.

Z prostej listy zdań

W poniższym przykładzie utworzymy korpus BoW z prostej listy zawierającej trzy zdania.

Najpierw musimy zaimportować wszystkie niezbędne pakiety w następujący sposób -

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

Teraz podaj listę zawierającą zdania. Na naszej liście mamy trzy zdania -

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

Następnie wykonaj tokenizację zdań w następujący sposób -

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

Utwórz obiekt corpora.Dictionary() w następujący sposób -

dictionary = corpora.Dictionary()

Teraz przekaż te tokenizowane zdania do dictionary.doc2bow() objectw następujący sposób -

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

Nareszcie możemy wydrukować Worek korpusu słów -

print(BoW_corpus)

Wynik

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

Powyższe dane wyjściowe pokazują, że słowo o id = 0 pojawia się raz w pierwszym dokumencie (ponieważ w wyniku mamy (0,1)) i tak dalej.

Powyższe dane wyjściowe są w jakiś sposób nieczytelne dla ludzi. Możemy również przekonwertować te identyfikatory na słowa, ale w tym celu potrzebujemy naszego słownika, aby dokonać konwersji w następujący sposób -

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

Wynik

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

Teraz powyższe dane wyjściowe są w jakiś sposób czytelne dla człowieka.

Pełny przykład implementacji

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)

Z pliku tekstowego

W poniższym przykładzie utworzymy korpus BoW z pliku tekstowego. W tym celu zapisaliśmy dokument użyty w poprzednim przykładzie w pliku tekstowym o nazwiedoc.txt..

Gensim odczyta plik wiersz po wierszu i przetworzy wiersz po wierszu przy użyciu simple_preprocess. W ten sposób nie musi ładować od razu całego pliku z pamięci.

Przykład implementacji

Najpierw zaimportuj wymagane i niezbędne pakiety w następujący sposób -

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

Następnie następująca linia kodów spowoduje odczytanie dokumentów z doc.txt i tokenizację -

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

Teraz musimy przekazać te tokenizowane słowa do dictionary.doc2bow() obiekt (tak jak w poprzednim przykładzie)

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

Wynik

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

Plik doc.txt plik ma następującą zawartość -

CNTK, wcześniej znany jako Computational Network Toolkit, to darmowy, łatwy w użyciu, komercyjny zestaw narzędzi o otwartym kodzie źródłowym, który umożliwia nam trenowanie algorytmów uczenia głębokiego, aby uczyć się jak ludzki mózg.

Możesz znaleźć jego darmowy samouczek na tutorialspoint.com, który zawiera również najlepsze samouczki techniczne na temat technologii, takich jak uczenie maszynowe AI Deep Learning.

Pełny przykład implementacji

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)

Zapisywanie i ładowanie korpusu Gensim

Korpus możemy uratować za pomocą następującego skryptu -

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.

Podobnie możemy załadować zapisany korpus za pomocą następującego skryptu -

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