从今天起开始写自然语言处理的实践用法,今天学了文本分类,并没用什么创新的东西,只是把学到的知识点复习一下

性别识别(根据给定的名字确定性别)

  第一步是创建一个特征提取函数(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])

最新文章

  1. python+selenium简易自动化框架,包含生成测试报告以及发送结果至Email
  2. mysql innodb 奔溃问题
  3. Android Annotations 注解例子
  4. angularjs取Sevice和directive的引用
  5. poj - 2386 Lake Counting && hdoj -1241Oil Deposits (简单dfs)
  6. [51NOD1087]1 10 100 1000(规律,二分)
  7. Swift Swift语言Storyboard教程:第二部
  8. JavaScript高级程序设计:第四章
  9. centos/linux下的安装mysql
  10. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十一)
  11. CORS(跨域资源共享) 的配置
  12. select下拉框可以直接取list里的内容 不用非得转map (不得不承认我是个ZZ,这么简单的问题才反应过来,--^--)
  13. 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)
  14. JavaScript 里,$ 代表什么?/JQuery是什么语言?/html中用link标签引入css时的中 rel="stylesheet"属性?/EL表达式是什么?
  15. 【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" '
  16. POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀自动机)
  17. (源)VC助手VA破解使用指南
  18. UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
  19. 针对Properties中实时性要求不高的配置参数,用Java缓存起来
  20. brew install mac安装失败的问题

热门文章

  1. windows下 nginx php 环境搭建
  2. python------unicode字符串转换为其他类型
  3. 用OpenSSL生成自签名证书在IIS上搭建Https站点(用于iOS的https访问)
  4. iOS开发——判断是否第一次启动
  5. linux学习小记:如何查看linux服务器的cpu数量,内核数,和cpu线程数
  6. Powerbuilder编程技巧 如何获取网页的HTML源码
  7. STM32 USB 问题汇总(转)
  8. CastleWindsor 使用说明
  9. bzoj2628: JZPSTR
  10. pandas 按照列A分组,将同一组的列B求和,生成新的Dataframe