Python自然语言处理学习笔记之性别识别
2024-09-01 18:36:38
从今天起开始写自然语言处理的实践用法,今天学了文本分类,并没用什么创新的东西,只是把学到的知识点复习一下
性别识别(根据给定的名字确定性别)
第一步是创建一个特征提取函数(feature extractor):该函数建立了一个字典,包含给定姓名的有关特征信息。
>>> def gender_features(word):
... return {'last_letter': word[-1]}
>>> gender_features('Shrek')
{'last_letter': 'k'}
第二步是准备数据集,该步通过导入现成的NLTK语料库实现
>>> from nltk.corpus import names
>>> labeled_names = ([(name, 'male') for name in names.words('male.txt')] +
... [(name, 'female') for name in names.words('female.txt')])
>>> 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]
第三步利用特征提取函数对数据集进行处理,生成产生分类器所需要的数据集featuresets,并将数据集featuresets分成训练集和测试集,最后利用NLTK工具包自带的方法
nltk.NaiveBayesClassifier.train()生成一个朴素贝叶斯分类器。
>>> featuresets = [(gender_features(n), gender) for (n, gender) in labeled_names]
>>> train_set, test_set = featuresets[500:], featuresets[:500]
>>> classifier = nltk.NaiveBayesClassifier.train(train_set)
我们还可以使用方法nltk.classify.accuracy(classifier,test_set)来测试分类器的准确率,使用方法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_set = apply_features(gender_features, labeled_names[500:])
>>> test_set = apply_features(gender_features, labeled_names[:500])
最新文章
- python+selenium简易自动化框架,包含生成测试报告以及发送结果至Email
- mysql innodb 奔溃问题
- Android Annotations 注解例子
- angularjs取Sevice和directive的引用
- poj - 2386 Lake Counting &;&; hdoj -1241Oil Deposits (简单dfs)
- [51NOD1087]1 10 100 1000(规律,二分)
- Swift Swift语言Storyboard教程:第二部
- JavaScript高级程序设计:第四章
- centos/linux下的安装mysql
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十一)
- CORS(跨域资源共享) 的配置
- select下拉框可以直接取list里的内容 不用非得转map (不得不承认我是个ZZ,这么简单的问题才反应过来,--^--)
- 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)
- JavaScript 里,$ 代表什么?/JQuery是什么语言?/html中用link标签引入css时的中 rel=";stylesheet";属性?/EL表达式是什么?
- 【Selenium】【BugList4】执行pip报错:Fatal error in launcher: Unable to create process using '";";D:\Program Files\Python36\python.exe";"; ";D:\Program Files\Python36\Scripts\pip.exe"; '
- POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀自动机)
- (源)VC助手VA破解使用指南
- UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
- 针对Properties中实时性要求不高的配置参数,用Java缓存起来
- brew install mac安装失败的问题