6 学习分类文本
英文文档 http://www.nltk.org/book/
中文文档 https://www.bookstack.cn/read/nlp-py-2e-zh/0.md
以下编号按个人习惯
Learning to Classify Text
1 Supervised Classification(有监督分类)
1.1 Gender Identification(性别鉴定)
1、依据男女名字差异的特点,来建立分类器,进行分类。
2、首先要创建特征提取器,特征提取器返回一个字典,称为特征集,包括特征名称(可读、区分大小写的字符串)和特征值(简单类型)。再者准备通过特征提取器处理原始数据集,再将其分为训练集和测试集,利用训练集训练一个分类器。
3、最后可利用分类器进行分类或评估分类器。
from nltk.corpus import names
from nltk.classify import apply_features
import random
import nltk
# 特征提取器
def gender_features(word):
# 返回的字典成为特征集。映射了特征名称到其值
# 特征名称是区分大小写的字符串,可读。特征值是简单类型的值,如布尔、数字、字符串
# 当返回的特征集不同,准确性有所差距
return {
'last_letter': word[-1], 'word_length': len(word), 'first_letter': word[0]}
# return {'last_letter': word[-1]}
# 性别鉴定
def gender_identification():
labeled_names = [(name, 'male') for name in names.words('male.txt')] + [(name, 'female') for name in
names.words('female.txt')]
random.shuffle(labeled_names)
# 划分训练集和测试集。以下方法处理大型语料库,使得不会再内存中存储所有特征集对象
train_set = apply_features(gender_features, labeled_names[500:])
test_set = apply_features(gender_features, labeled_names[:500])
# 利用训练集训练一个朴素贝叶斯分类器
classifier = nltk.NaiveBayesClassifier.train(train_set)
# 进行测试分类时,要先提取特征,再进行分类
classify_result = classifier.classify(g