文章目录
source: python machine learning 3rd
词袋模型是NLP的基础,理解掌握了词袋模型的处理方法和步骤是NLP必备的敲门砖。本文将着重介绍梳理使用python对词袋模型的构造和处理过程。
词袋模型的概念
什么是词袋模型?简而言之,词袋模型就是我们使用量化模拟的方式来表达文本的一种方式。
具体而言,词袋模型的构造思路如下:
- 使用独特的表征(一般都是字词)来构建词汇表,用于表达整个文本
- 建立包含特定文章中词语出现的频率次数的特征维度
由于每个文章中的关键词都不一样,因此词汇表中很多特征维度中的值都是0,因此我们称词袋模型的特征维度是稀疏的
文本清理
词袋模型内心是严重排斥不干净的文本的,如果你想运用词袋模型进行NLP分析,首先你得把文本清理干净
清理文本的途径当然是多种多样的,且对不同种类的文本需要清理的对象不同,下面就简单援引一种较好用的常规方法
首先看这段文本:
‘is seven.<br /><br />Title (Brazil): Not Available 😃’
html标签,标点符号,表情符号啥都有,必须多次使用正则表达式来处理,直到文本干净为止:
import re
def preprocessor(text):
# 去除html标签
text = re.sub('<[^>]*>', '', text)
# 简化复杂的emoji符号,如:-) --> :)
emoticons = re.findall('(?::|;|=)(?:-)?(?:\)|\(|D|P)',
text)
# 标点符号肯定也不能有
text = (re.sub('[\W]+', ' ', text.lower()) +
' '.join(emoticons).replace('-', ''))
return text
没错,正则表达式很重要(但事实上是不推荐使用正则表达式去除html标签的)
大小写
对于大小写的处理,还是要以具体情况为准。很多情况下,大小写不那么重要,同样使用正则表达式进行替换即可,如果你能够看懂之前代码中的正则表达式,那么这肯定也不是问题
典型的需要保留大小写区别的情况就比如学术文章的处理,此时大写字母可能会代表专门的术语而不是平常的词汇
停用词
词袋模型同样不欢迎停用词(比如like,is,has),因为它们对文本分类问题几乎没有帮助,当然,如果你的NLP问题不涉及文本分类,你可以选择不对停用词进行删除(即使是分类问题,也需要具体问题具体分析,比如说小学生的文章中停用词的使用频率会高于专业作家,此时停用词对于分析文章水平是有一定意义的)
直接上代码:
import nltk
# 下载一次后以后就不用下载了
nltk.download('stopwords')
from nltk.corpus import stopwords
stop = stopwords.words('english')
print([w for w in tokenizer_porter('a runner likes running and runs a lot')[-10:]
if w not in stop])
['runner', 'like', 'run', 'run', 'lot']
其中tokenizer_porter是之后文本特征化中的内容,负责将文本分割成单个字符然后存储在数组上,后文中我们会详细介绍
将词语转换为特征维度
使用python可以很简单就完成这个步骤:
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
count = CountVectorizer()
docs = np.array([
'The sun is shining',
'The weather is sweet',
'The sun is shining, the weather is sweet, and one and one is two'])
bag = count.fit_transform(docs)
使用sklearn中地CountVectorizer可以一步到位地帮我们完成转换,稍加注意我们此时需要将文本内容存储到numpy一维数组中
查看获得的词汇表:
>>>print(count.vocabulary_)
{'and': 0,
'two': 7,
'shining': 3,
'one': 2,
'sun': 4,
'weather': 8,
'the': 6,
'sweet': 5,
'is': 1}
最后,再次一步到位使用toarray方法完成特征维度的构建:
>>> print(bag.toarray())
[[0 1 0 1 1 0 1 0 0]
[0 1 0 0 0 1 1 0 1]
[2 3 2 1 1 1 2 1 1]]
这三组特征维度分别为分别属于我们的原始文本
原始词频 - raw term frequency
得到了特征维度之后,我们引入一个新的概念 - 原始词频: t f ( t , d ) tf(t, d) tf(t,d)

本文介绍了词袋模型在Python中的应用,包括文本清理、大小写处理、停用词移除、特征维度构建以及TF-IDF的计算。通过使用sklearn库,可以方便地实现从原始文本到TF-IDF特征向量的转换,为自然语言处理任务提供特征表示。
最低0.47元/天 解锁文章
--- python自然语言处理基础&spm=1001.2101.3001.5002&articleId=105788093&d=1&t=3&u=7518df007f9e4c28b7a204c471e8b2a1)
1686

被折叠的 条评论
为什么被折叠?



