Python⾃然语⾔处理学习笔记之性别识别
财神节是哪天
从今天起开始写⾃然语⾔处理的实践⽤法,今天学了⽂本分类,并没⽤什么创新的东西,只是把学到的知识点复习⼀下
表示突然的词语
性别识别(根据给定的名字确定性别)
第⼀步是创建⼀个特征提取函数(feature extractor):该函数建⽴了⼀个字典,包含给定姓名的有关特征信息。
>>> def gender_features(word):
... return {'last_letter': word[-1]}
>>> gender_features('Shrek')
{'last_letter': 'k'}
第⼆步是准备数据集,该步通过导⼊现成的NLTK语料库实现
迪士尼简介>>> pus import names
>>> labeled_names = ([(name, 'male') for name in names.words('')] +
... [(name, 'female') for name in names.words('')])
>>> import random
>>> random.shuffle(labeled_names)
其中random.shuffle()的功能是将给定的列表顺序打乱,如:
>>> test=[1,2,3,4,5,6,7,8,9]
>>> random.shuffle(test)
>>> test
[5, 7, 8, 1, 4, 2, 6, 3, 9]
第三步利⽤特征提取函数对数据集进⾏处理,⽣成产⽣分类器所需要的数据集featurets,并将数据集featurets分成训练集和测试集,最后利⽤NLTK⼯具包⾃带的⽅法
ain()⽣成⼀个朴素贝叶斯分类器。
>>> featurets = [(gender_features(n), gender) for (n, gender) in labeled_names]
>>> train_t, test_t = featurets[500:], featurets[:500]
>>> classifier = ain(train_t)
o型血是熊猫血吗我们还可以使⽤⽅法nltk.classify.accuracy(classifier,test_t)来测试分类器的准确率,使⽤⽅描写桥的诗句
法classifier.show_most_informative_features(n)来观察对哪些特征该分类器的准确率最⾼。
>>> classifier.show_most_informative_features(5)
Most Informative Features张家鸿
过年吓唬人
last_letter = 'a' female : male = 33.2 : 1.0
last_letter = 'k' male : female = 32.6 : 1.0
last_letter = 'p' male : female = 19.7 : 1.0
last_letter = 'v' male : female = 18.6 : 1.0
last_letter = 'f' male : female = 17.3 : 1.0
上⾯的哪些⽐率被称为似然⽐likelihood ratios,例如33.2:1.0表⽰当名字以字母a结尾时,那这个⼈事⼥性的概率时男性的33.2倍。
中老年保健 当数据集⽐较⼤时,建⽴包含所有案例特称的列表会占⽤⼤量的内存,这时可以⽤⽅法nltk.classify.apply_features(),该⽅法会返回⼀个类似列表的对象,对不会把所有的特征都放到内存中。
>>> from nltk.classify import apply_features
>>> train_t = apply_features(gender_features, labeled_names[500:])
>>> test_t = apply_features(gender_features, labeled_names[:500])