- 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)
#请提供您保存词典的路径。