Gensim - Tworzenie słownika
W ostatnim rozdziale, w którym omawialiśmy wektor i model, masz pomysł na temat słownika. Tutaj będziemy omawiaćDictionary bardziej szczegółowo.
Co to jest słownik?
Zanim zagłębimy się w pojęcie słownika, przyjrzyjmy się kilku prostym pojęciom NLP -
Token - Token oznacza „słowo”.
Document - Dokument odnosi się do zdania lub akapitu.
Corpus - Odnosi się do zbioru dokumentów jako worka słów (BoW).
W przypadku wszystkich dokumentów korpus zawsze zawiera identyfikator tokenu każdego słowa wraz z liczbą częstotliwości w dokumencie.
Przejdźmy do pojęcia słownika w Gensim. Do pracy z dokumentami tekstowymi Gensim wymaga również, aby słowa, czyli tokeny zostały przekonwertowane na ich unikalne identyfikatory. Aby to osiągnąć, daje nam możliwośćDictionary object, który odwzorowuje każde słowo na ich unikalny identyfikator całkowity. Robi to, konwertując tekst wejściowy na listę słów, a następnie przekazując go do plikucorpora.Dictionary() obiekt.
Potrzeba słownika
Teraz pojawia się pytanie, po co właściwie jest potrzebny obiekt słownikowy i gdzie można go użyć? W Gensim, obiekt słownika jest używany do tworzenia zbioru słów (BoW), który jest następnie używany jako dane wejściowe do modelowania tematów i innych modeli.
Formy wprowadzania tekstu
Istnieją trzy różne formy wprowadzania tekstu, które możemy udostępnić Gensim -
Ponieważ zdania przechowywane w natywnym obiekcie listy Pythona (znanym jako str w Pythonie 3)
Jako jeden plik tekstowy (może być mały lub duży)
Wiele plików tekstowych
Tworzenie słownika za pomocą Gensim
Jak już wspomniano, w Gensimie słownik zawiera mapowanie wszystkich słów, czyli tokenów, na ich unikalny identyfikator całkowity. Możemy stworzyć słownik z listy zdań, z jednego lub więcej niż jednego pliku tekstowego (plik tekstowy zawierający wiele linii tekstu). Zacznijmy więc od stworzenia słownika przy użyciu listy zdań.
Z listy zdań
W poniższym przykładzie utworzymy słownik z listy zdań. Kiedy mamy listę zdań lub możesz powiedzieć kilka zdań, musimy przekonwertować każde zdanie na listę słów, a rozumienie jest jednym z bardzo powszechnych sposobów, aby to zrobić.
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
Następnie z listy zdań / dokumentu utwórz listę zrozumienia, aby z niej skorzystać tworząc słownik -
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."
]
Następnie musimy podzielić zdania na słowa. Nazywa się to tokenizacją.
text_tokens = [[text for text in doc.split()] for doc in doc]
Teraz za pomocą poniższego skryptu możemy stworzyć słownik -
dict_LoS = corpora.Dictionary(text_tokens)
Teraz zdobądźmy więcej informacji, takich jak liczba tokenów w słowniku -
print(dict_LoS)
Wynik
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
Możemy również zobaczyć mapowanie słowa na unikalne liczby całkowite w następujący sposób -
print(dict_LoS.token2id)
Wynik
{
'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
}
Pełny przykład implementacji
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)
Z pojedynczego pliku tekstowego
W poniższym przykładzie utworzymy słownik z pojedynczego pliku tekstowego. W podobny sposób możemy również utworzyć słownik z więcej niż jednego pliku tekstowego (tj. Katalogu plików).
W tym celu zapisaliśmy dokument użyty w poprzednim przykładzie w pliku tekstowym o nazwie doc.txt. Gensim odczyta plik wiersz po wierszu i przetworzy wiersz po wierszu przy użyciusimple_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ępna linia kodów utworzy słownik gensim za pomocą pojedynczego pliku tekstowego o nazwie doc.txt -
dict_STF = corpora.Dictionary(
simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
)
Teraz zdobądźmy więcej informacji, takich jak liczba tokenów w słowniku -
print(dict_STF)
Wynik
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
Możemy również zobaczyć mapowanie słowa na unikalne liczby całkowite w następujący sposób -
print(dict_STF.token2id)
Wynik
{
'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
}
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
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)
Z wielu plików tekstowych
Teraz stwórzmy słownik z wielu plików, czyli więcej niż jednego pliku tekstowego zapisanego w tym samym katalogu. W tym przykładzie stworzyliśmy trzy różne pliki tekstowe, a mianowiciefirst.txt, second.txt i third.txtzawierający trzy linie z pliku tekstowego (doc.txt), którego użyliśmy w poprzednim przykładzie. Wszystkie te trzy pliki tekstowe są zapisywane w katalogu o nazwieABC.
Przykład implementacji
Aby to zaimplementować, musimy zdefiniować klasę za pomocą metody, która może iterować przez wszystkie trzy pliki tekstowe (Pierwszy, Drugi i Trzeci.txt) w katalogu (ABC) i uzyskać przetworzoną listę tokenów słów.
Zdefiniujmy klasę o nazwie Read_files posiadanie metody o nazwie __iteration__ () w następujący sposób -
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)
Następnie musimy podać ścieżkę do katalogu w następujący sposób -
path = "ABC"
#provide the path as per your computer system where you saved the directory.
Kolejne kroki są podobne, jak w poprzednich przykładach. Następna linia kodów utworzy katalog Gensim przy użyciu katalogu zawierającego trzy pliki tekstowe -
dict_MUL = corpora.Dictionary(Read_files(path))
Wynik
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
Teraz możemy również zobaczyć mapowanie słowa na unikalne liczby całkowite w następujący sposób -
print(dict_MUL.token2id)
Wynik
{
'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
}
Zapisywanie i ładowanie słownika Gensim
Gensim wspiera własnego rodzimego save() metoda zapisywania słownika na dysku i load() metoda ładowania z powrotem słownika z dysku.
Na przykład możemy zapisać słownik za pomocą następującego skryptu -
Gensim.corpora.dictionary.save(filename)
#provide the path where you want to save the dictionary.
Podobnie możemy załadować zapisany słownik za pomocą metody load (). Następujący skrypt może to zrobić -
Gensim.corpora.dictionary.load(filename)
#provide the path where you have saved the dictionary.