通过前面几个小节的学习,我们现在已经学会了如何获取文本预料,然后分词,在分词之后的结果上,我们可以提取文本的关键词查看文本核心思想,进而可以通过可视化技术把文档从视觉的角度表达出来。
下面,我们来看看,文本数据如何转换成计算机能够计算的数据。这里介绍两种常用的模型:词袋和词向量模型。
词袋模型(Bag of Words Model)
词袋模型的概念
先来看张图,从视觉上感受一下词袋模型的样子。
![v2-76bb4510ca5c149a22ca3c28ecbb5cac_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/37625e6063725ffd93e9f2bdc2d561a4.jpeg)
词袋模型看起来好像一个口袋把所有词都装进去,但却不完全如此。在自然语言处理和信息检索中作为一种简单假设,词袋模型把文本(段落或者文档)被看作是无序的词汇集合,忽略语法甚至是单词的顺序,把每一个单词都进行统计,同时计算每个单词出现的次数,常常被用在文本分类中,如贝叶斯算法、LDA 和 LSA 等。
动手实战词袋模型
(1)词袋模型
本例中,我们自己动手写代码看看词袋模型是如何操作的。
首先,引入 jieba 分词器、语料和停用词(标点符号集合,自己可以手动添加或者用一个文本字典代替)。
import jieba
#定义停用词、标点符号
punctuation = [",","。", ":", ";", "?"]
#定义语料
content = ["机器学习带动人工智能飞速的发展。",
"深度学习带动人工智能飞速的发展。",
"机器学习和深度学习带动人工智能飞速的发展。"
]
接下来,我们先对语料进行分词操作,这里用到 lcut() 方法:
#分词
segs_1 = [jieba.lcut(con) for con in content]
print(segs_1)
得到分词后的结果如下:
[['机器', '学习', '带动', '人工智能', '飞速', '的', '发展', '。'], ['深度', '学习', '带动', '人工智能', '飞速', '的', '发展', '。'], ['机器', '学习', '和', '深度', '学习', '带动', '人工智能', '飞速', '的', '发展', '。']]
因为中文语料带有停用词和标点符号,所以需要去停用词和标点符号,这里语料很小,我们直接去标点符号:
tokenized = []
for sentence in segs_1:
words = []
for word in sentence:
if word not in punctuation:
words.append(word)
tokenized.append(words)
print(tokenized)
去标点符号后,我们得到结果如下:
[['机器', '学习', '带动', '人工智能', '飞速', '的', '发展'], ['深度', '学习', '带动', '人工智能', '飞速', '的', '发展'], ['机器', '学习', '和', '深度', '学习', '带动', '人工智能', '飞速', '的', '发展']]
下面操作就是把所有的分词结果放到一个袋子(List)里面,也就是取并集,再去重,获取对应的特征词。
#求并集
bag_of_words = [ x for item in segs_1 for x in item if x not in punctuation]
#去重
bag_of_words = list(set(bag_of_words))
print(bag_o