机器学习入门(词袋模型)

本文介绍了如何使用Python进行文本预处理,如去除停用词、标准化和分词,然后通过词袋模型(CountVectorizer)将文本转换为机器学习可处理的特征向量,以进行诸如分类和聚类的文本分析。
摘要由CSDN通过智能技术生成

在当今数据驱动的世界里,文本数据无疑占据了大量的信息交流空间。无论是社交媒体的帖子、新闻报道、产品评论还是论坛讨论,文本都是传递信息的关键载体。对于数据科学家和机器学习工程师来说,能够有效地处理和分析文本数据是解锁这些信息宝库的关键。然而,文本数据的非结构化特性使得直接分析变得复杂。因此,我们需要将文本转换成机器学习算法可以理解的形式,这就是文本预处理和特征提取步骤的用武之地。

在本文中,我们将探讨如何使用Python进行文本预处理,包括去除停用词、标准化文本等步骤,以及如何利用词袋模型(Bag of Words, BoW)进行特征提取。词袋模型是自然语言处理(NLP)中最基本的特征提取技术之一,它将文本转换为数值特征向量,使得文本数据可以被机器学习模型有效处理。

我们将通过一个简单的示例,展示如何将一组文档(可以是任何文本数据)通过预处理步骤转换成清洁的格式,并使用CountVectorizer来实现词袋模型,从而为机器学习模型的训练准备好特征集。这个过程不仅适用于分类、聚类等常见的文本分析任务,也是深入理解文本数据和挖掘其中信息的基础。

import nltk
import numpy as np
import pandas as pd
import re
from sklearn.feature_extraction.text import CountVectorizer

# nltk.download()  # 下载NLTK数据包,仅在首次使用时需要

# 加载英文的停用词列表
stop_words = nltk.corpus.stopwords.words('english')

# 创建一个词和标点符号的分词器
wpt = nltk.WordPunctTokenizer()

# 定义文档语料库
corpus = [
    'The sun is hot and the air is hot',
    'The snow is heavy',
    'The cloud is thick but not hot',
    'The heavy duck is shouting angrily'
]

# 定义每个文档对应的类别标签
labels = ['weather', 'weather', 'weather', 'animals']

# 将文档列表转换为NumPy数组
corpus = np.array(corpus)

# 创建一个包含文档及其类别标签的DataFrame
corpus_df = pd.DataFrame({'Document': corpus, 'Category': labels})
corpus_df = corpus_df[['Document', 'Category']]  # 确保列的顺序

# 定义文档预处理函数
def normalizedoc(doc):
    # 使用正则表达式删除非字母数字字符
    doc = re.sub(r'[^a-zA-Z0-9\s]', '', doc, flags=re.I)
    # 转换为小写
    doc = doc.lower()
    # 去除首尾空白
    doc = doc.strip()
    # 分词
    tokens = wpt.tokenize(doc)
    # 过滤掉停用词
    filtered_tokens = [token for token in tokens if token not in stop_words]
    # 重新组合为文档字符串
    doc = ' '.join(filtered_tokens)
    return doc

# 使用np.vectorize函数向量化预处理函数,以便一次性处理整个数组
normalize_corpus = np.vectorize(normalizedoc)

# 对语料库中的每个文档应用预处理
normcorpus = normalize_corpus(corpus)

# 打印预处理后的文档
print(normcorpus)

# 创建CountVectorizer实例,设置文档频率的最小值和最大值
cv = CountVectorizer(min_df=0, max_df=5)

# 使用预处理后的语料库训练向量化模型
cv.fit(normcorpus)

# 打印词汇表
print(cv.get_feature_names_out())

# 将语料库转换为词袋模型的特征向量
cv_matrix = cv.fit_transform(normcorpus)
cv_matrix = cv_matrix.toarray()

# 获取词汇表
vocab = cv.get_feature_names_out()

# 将特征向量转换为DataFrame,以便于阅读和分析
pd.DataFrame(cv_matrix, columns=vocab)

输出结果如下: 

['sun hot air hot' 'snow heavy' 'cloud thick hot'
 'heavy duck shouting angrily']
['air' 'angrily' 'cloud' 'duck' 'heavy' 'hot' 'shouting' 'snow' 'sun'
 'thick']
Out[22]: 
   air  angrily  cloud  duck  heavy  hot  shouting  snow  sun  thick
0    1        0      0     0      0    2         0     0    1      0
1    0        0      0     0      1    0         0     1    0      0
2    0        0      1     0      0    1         0     0    0      1
3    0        1      0     1      1    0         1     0    0      0

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值