NLP 中的单词包(BoW)模型
在本文中,我们将讨论一种称为单词包模型的文本建模自然语言处理技术。每当我们在自然语言处理中应用任何算法时,它都适用于数字。我们不能直接将文本输入到该算法中。因此,单词包模型用于预处理文本,将文本转换为一个单词包,该单词包记录最常用单词的总出现次数。
这个模型可以使用一个表来可视化,该表包含与单词本身相对应的单词数。
应用单词包模型:
让我们用这个样本段落来完成我们的任务:
豆子。当我们飞进来的时候,我试图向某人解释,那是玉米。那是豆子。他们对我的农业知识印象深刻。请为那个出色的介绍再一次为阿毛里放弃它。我今天在这里有一群好朋友,包括和我一起服役的人,他是这个国家最好的参议员之一,我们很幸运有他,你的参议员迪克·德宾在这里。顺便说一下,我还注意到这里的前州长埃德加,我很久没见他了,不知何故,他没有变老,我也变老了。很高兴见到你,州长。我要感谢基林总统和麻省理工学院的每一个人,是他们让我今天能够来到这里。我对被授予的保罗·道格拉斯奖深感荣幸。他为伊利诺伊州如此杰出的公共服务开辟了道路。现在,我想从向房间里的大象讲话开始。我知道人们还在奇怪我为什么没有在毕业典礼上发言。
步骤#1 : 我们将首先对数据进行预处理,以便:
- 将文本转换为小写。
- 删除所有非单词字符。
- 删除所有标点符号。
*# Python3 code for preprocessing text
import nltk
import re
import numpy as np
# execute the text here as :
# text = """ # place text here """
dataset = nltk.sent_tokenize(text)
for i in range(len(dataset)):
dataset[i] = dataset[i].lower()
dataset[i] = re.sub(r'\W', ' ', dataset[i])
dataset[i] = re.sub(r'\s+', ' ', dataset[i])*
输出:
*
预处理文本 You can further preprocess the text to suit you needs.
第二步:获取我们文本中出现频率最高的单词。
我们将应用以下步骤来生成我们的模型。
-
我们声明用字典来装我们的单词包。 接下来,我们将每个句子标记为单词。 现在对于句子中的每个单词,我们检查这个单词是否存在于我们的词典中。* If it does, then we increment its count by 1. If it doesn’t, we add it to our dictionary and set its count as 1.
```py
Creating the Bag of Words model
word2count = {} for data in dataset: words = nltk.word_tokenize(data) for word in words: if word not in word2count.keys(): word2count[word] = 1 else: word2count[word] += 1 ```
输出:
单词包词典
在我们的模型中,我们总共有 118 个单词。然而,当处理大型文本时,字数可能达到数百万。我们不需要使用所有这些词。因此,我们选择了一些最常用的词。为了实现这一点,我们使用:
py import heapq freq_words = heapq.nlargest(100, word2count, key=word2count.get)
其中 100 表示我们想要的字数。如果我们的文本很大,我们就会输入更多的文本。
100 个最常见的单词
第三步:构建单词包模型 在这一步中,我们构建一个向量,它将告诉我们每个句子中的一个单词是否是一个常用单词。如果一个句子中的一个词是常用词,我们将其设置为 1,否则我们将其设置为 0。 这可以通过以下代码来实现:
py X = [] for data in dataset: vector = [] for word in freq_words: if word in nltk.word_tokenize(data): vector.append(1) else: vector.append(0) X.append(vector) X = np.asarray(X)
输出:
BoW 模型*