ad

学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_6.1.4 文本分类与聚类

网友投稿 141 2023-11-13

【摘要】 本书摘自《Python网络爬虫 从入门到精通》一书中第6章,第1节,吕云翔、张扬和韩延刚等编著。

6.1.4 文本分类与聚类

分类和聚类是数据挖掘领域非常重要的概念,在文本数据分析的过程中,分类和聚类也 有举足轻重的意义。文本分类可以用于判断文本的类别,广泛用于垃圾邮件的过滤、网页分 类、推荐系统等,而文本聚类主要用于用户兴趣识别、文档自动归类等。

学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_6.1.4 文本分类与聚类

分类和聚类最核心的区别在于训练样本是否有类别标注。分类模型的构建基于有类别标 注的训练样本,属于有监督学习,即每个训练样本的数据对象已经有对应的类(标签)。通 过分类学习,可以构建出一个分类函数或分类模型,这也就是常说的分类器,分类器会把数 据项映射到已知的某一个类别中。数据挖掘中的分类方法一般都适用于文本分类,这方面常 用的方法有:决策树、神经网络、朴素贝叶斯、支持向量机 (SV M) 等。

与分类不同,聚类是一种无监督学习。换句话说,聚类任务预先并不知道类别(标 签),所以会根据信息相似度的衡量来进行信息处理。聚类的基本思想是使得属于同类别项 之间的“差距”尽可能小,同时使得不同类别项的“差距”尽可能大。常见的聚类算法包 括: K-means 算 法 、K- 中心点聚类算法、DBSCAN 等。如果需要通过 Python 实现文本聚类 和分类的任务,推荐使用 scikit-learn 库,这是一个非常强大的库,提供了包括朴素贝叶斯、 KNN、决策树、K-means 等在内的各种工具。

这里可以使用NLTK 做一个简单的分类任务。由于NLTK 中内置了一些统计学习函数, 所以操作并不复杂。比如,借助内置的 names 语料库,可以通过朴素贝叶斯分类来判断一个 输入的名字是男名还是女名,见例6-1。

【例6-1】 NLTK 使用朴素贝叶斯分类判断姓名对应的性别。

def gender_feature(name):

return ''isdt{_'flilθ],ame)//2]}

#提取姓名中的首字母、中位字母、末尾字母为特征

import nltk

import random

from nltk.corpus import names

#获取名字-性别的数据列表

male_names =[(name,'male')for name in names.words('male.txt')]

female_names =[(name,'female')for name in names.words('female.txt')] names_all =male_names +female_names

random.shuffle(names_all)

#生成特征集

feature_set =[(gender_feature(n),g)for(n,g)in names_all]

#拆分为训练集和测试集

train_set_size =int(len(feature_set)*0.7)

train_set =feature_set[:train_set_size]

test_set =feature_set[train_set_size:]

classifier =nltk.NaiveBayesClassifier.train(train_set)

for pr:\t.fo:lassify(gender_feature(name))))

程序中使用 “Amn” (女名)、“Sherlock” (男名)、“Cecilia” (女名)作为输入,输出为:

Ann: female

Sherlock: male

Cecilia: female

最后,使用 classifier.show_most_informative_features) 方法可以查看影响最大的一些特征 值,部分输出如下。

Most Informative Features

mid_letter ='w'

first_letter ='W'

first_letter ='U'

mid_letter ='f'

male :female =

male :female =

male :female =

male :female =

5.8 :1.0

4.7 :1.0

3.3 :1.0

2.9 :1.0

可见,通过简单的训练,已经获得了相对满意的预测结果。

最后要说明的是, NLTK 在文本分析和自然语言处理方面拥有很丰富的沉淀,语料也支 持用户定义和编辑。如上所述, NLTK 在配合一些统计学习方法(这里可以笼统地称之为 “机器学习”)处理文本时能获得非常好的效果,上面的姓名-性别分类就是一个小例子。统 计学习方法涉及的数学知识和 Python 工具较为复杂,已经超出了本书的讨论范围,在此就 不再赘述了。NLTK 还有很多其他功能,包括分块、实体识别等,都可以帮助人们获得更 多、更丰富的文本挖掘结果。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_7.3 爬虫的部署和管理
下一篇:打开《Python 可视化数据分析》_学会挖掘大数据的价值_5.1 由 Matplotlib 开始数据可视化
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×