- Gensim 教程
- Gensim - 首頁
- Gensim - 簡介
- Gensim - 快速入門
- Gensim - 文件與語料庫
- Gensim - 向量與模型
- Gensim - 建立詞典
- 建立詞袋 (BoW) 語料庫
- Gensim - 變換
- Gensim - 建立 TF-IDF 矩陣
- Gensim - 主題建模
- Gensim - 建立 LDA 主題模型
- Gensim - 使用 LDA 主題模型
- Gensim - 建立 LDA Mallet 模型
- Gensim - 文件與 LDA 模型
- Gensim - 建立 LSI 和 HDP 主題模型
- Gensim - 開發詞嵌入
- Gensim - Doc2Vec 模型
- Gensim 有用資源
- Gensim - 快速指南
- Gensim - 有用資源
- Gensim - 討論
Gensim - 建立詞典
在上一章討論向量和模型時,您對詞典有了一定的瞭解。在這裡,我們將更詳細地討論詞典物件。
什麼是詞典?
在深入探討詞典的概念之前,讓我們瞭解一些簡單的 NLP 概念:
詞元 - 詞元表示一個“詞”。
文件 - 文件指的是句子或段落。
語料庫 - 它指的是作為詞袋 (BoW) 的文件集合。
對於所有文件,語料庫始終包含每個單詞的詞元 ID 以及它在文件中的頻率計數。
讓我們轉向 Gensim 中詞典的概念。為了處理文字文件,Gensim 也需要將單詞(即詞元)轉換為它們的唯一 ID。為了實現這一點,它為我們提供了詞典物件的功能,該物件將每個單詞對映到其唯一的整數 ID。它透過將輸入文字轉換為單詞列表,然後將其傳遞給corpora.Dictionary()物件來實現這一點。
詞典的必要性
現在的問題是,詞典物件實際上有什麼用,它可以在哪裡使用?在 Gensim 中,詞典物件用於建立詞袋 (BoW) 語料庫,該語料庫進一步用作主題建模和其他模型的輸入。
文字輸入的形式
我們可以向 Gensim 提供三種不同的文字輸入形式:
作為儲存在 Python 原生列表物件中的句子(在 Python 3 中稱為str)
作為一個單一的文字檔案(可以是小檔案或大檔案)
多個文字檔案
使用 Gensim 建立詞典
如前所述,在 Gensim 中,詞典包含所有單詞(即詞元)與其唯一整數 ID 的對映。我們可以從句子列表、一個或多個文字檔案(包含多行文字的文字檔案)建立詞典。因此,首先讓我們從建立使用句子列表的詞典開始。
從句子列表建立
在下面的示例中,我們將從句子列表建立詞典。當我們有句子列表或可以說是多個句子時,我們必須將每個句子轉換為單詞列表,而列表推導式是一種非常常見的方法。
實現示例
首先,匯入所需的包,如下所示:
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)
輸出
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
我們還可以檢視單詞到唯一整數的對映,如下所示:
print(dict_LoS.token2id)
輸出
{
'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
}
完整的實現示例
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)
從單個文字檔案建立
在下面的示例中,我們將從單個文字檔案建立詞典。以類似的方式,我們也可以從多個文字檔案(即檔案目錄)建立詞典。
為此,我們將前一個示例中使用的文件儲存在名為doc.txt的文字檔案中。Gensim 將逐行讀取檔案,並使用simple_preprocess一次處理一行。這樣,它不需要一次將整個檔案載入到記憶體中。
實現示例
首先,匯入所需的包,如下所示:
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.txt 的單個文字檔案建立 Gensim 詞典:
dict_STF = corpora.Dictionary( simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’) )
現在讓我們獲取更多資訊,例如詞典中的詞元數量:
print(dict_STF)
輸出
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
我們還可以檢視單詞到唯一整數的對映,如下所示:
print(dict_STF.token2id)
輸出
{
'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
}
完整的實現示例
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)
從多個文字檔案建立
現在讓我們從多個檔案(即儲存在同一目錄中的多個文字檔案)建立詞典。對於此示例,我們建立了三個不同的文字檔案,分別名為first.txt、second.txt和third.txt,它們包含我們之前示例中使用的文字檔案 (doc.txt) 的三行。這三個文字檔案都儲存在名為ABC的目錄下。
實現示例
為了實現這一點,我們需要定義一個類,其中包含一個方法,該方法可以迭代目錄 (ABC) 中的所有三個文字檔案 (First.txt、Second.txt 和 Third.txt),並生成已處理的單詞詞元列表。
讓我們定義一個名為Read_files的類,它具有一個名為__iteration__()的方法,如下所示:
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)
接下來,我們需要提供目錄的路徑,如下所示:
path = "ABC"
#請根據您儲存目錄的計算機系統提供路徑.
接下來的步驟與我們之前的示例類似。接下來的程式碼行將使用包含三個文字檔案的目錄建立 Gensim 詞典:
dict_MUL = corpora.Dictionary(Read_files(path))
輸出
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
現在我們還可以檢視單詞到唯一整數的對映,如下所示:
print(dict_MUL.token2id)
輸出
{
'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
}
儲存和載入 Gensim 詞典
Gensim 支援使用其自己的原生save()方法將詞典儲存到磁碟,並使用load()方法從磁碟載入詞典。
例如,我們可以使用以下指令碼儲存詞典:
Gensim.corpora.dictionary.save(filename)
#請提供您要儲存詞典的路徑.
同樣,我們可以使用 load() 方法載入儲存的詞典。以下指令碼可以做到這一點:
Gensim.corpora.dictionary.load(filename)
#請提供您儲存詞典的路徑。