《PYTHON自然语言处理》第2章

内容简介:各种文本语料库。

古腾堡项目 www.gutenberg.org

OLAC元数据格式档 http://www.language-archives.org/

语料库邮件列表 http://clu.uni.no/corpora/sub.html

ETHNOLOGUE 世界完整语言清单 http://www.ethnologue.com/

SIL 语言项目http://www.sil.org/

2.8 练习

1.

 >>> phrase = ['abstruse']
>>> type(phrase)
<type 'list'>
>>> phrase + ['bb']
['abstruse', 'bb']
>>> phrase + ['bb'] * 3
['abstruse', 'bb', 'bb', 'bb']
>>> (phrase + ['bb']) * 3
['abstruse', 'bb', 'abstruse', 'bb', 'abstruse', 'bb']
>>> tmp = (phrase + ['bb']) * 3
>>> tmp[-3:]
['bb', 'abstruse', 'bb']
>>> sorted(tmp)
['abstruse', 'abstruse', 'abstruse', 'bb', 'bb', 'bb']
>>> tmp[-1]
'bb'

Ex1 Code

2.

 >>> import nltk
>>> nltk.corpus.gutenberg.fileids()
['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', 'bible-kjv.txt', 'blake-poems.txt', 'bryant-stories.txt', 'burgess-busterbrown.txt', 'carroll-alice.txt', 'chesterton-ball.txt', 'chesterton-brown.txt', 'chesterton-thursday.txt', 'edgeworth-parents.txt', 'melville-moby_dick.txt', 'milton-paradise.txt', 'shakespeare-caesar.txt', 'shakespeare-hamlet.txt', 'shakespeare-macbeth.txt', 'whitman-leaves.txt']
>>> per = nltk.corpus.gutenberg.words('austen-persuasion.txt')
>>> len(per)
98171
>>> len(set(per))
6132
## 区别
>>> len(set((s.lower() for s in per if s.isalpha())))
5739
##
>>> from __future__ import division
>>> len(per) / len(set(per))
16.00962165688193
>>> type(per)
<class 'nltk.corpus.reader.util.StreamBackedCorpusView'>
>>> per[20:30]
['was', 'a', 'man', 'who', ',', 'for', 'his', 'own', 'amusement', ',']

3

from nltk.corpus import brown
brown.categories()
['adventure', 'belles_lettres', 'editorial', 'fiction', 'government', 'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance', 'science_fiction']
b = brown.words(categories='humor')
print ' '.join(b[:50]) w = nltk.corpus.webtext.words('pirates.txt')
print ' '.join(w[:50])

4

  modals = ['men', 'women', 'people']

  cfd = nltk.ConditionalFreqDist(
(target,fileid[:4])
for fileid in state_union.fileids()
for w in state_union.words(fileid)
for target in modals
if w.lower().startswith(target))
cfd.plot()

8

 names = nltk.corpus.names

  cfd = nltk.ConditionalFreqDist(
(fileid, name[0])
for fileid in names.fileids()
for name in names.words(fileid)) cfd.plot

图显示,首字母H和W在男名中比女名中更常用。

9.

用词典过滤文本语料的内容。

# 函数定义
# myproc.py
from __future__ import division
import nltk
from nltk.corpus import stopwords def content_fraction(text):
"""calculate words fractioin without stop words"""
stopwords = nltk.corpus.stopwords.words('english')
content = [w for w in text if w.lower() not in stopwords]
return len(content) / len(set(content)) # 命令行
from nltk.book import *
from myproc iimport *
content_fraction(text1)
8.06865891513653
content_fraction(text2)
11.399421789409617

可以看出,去掉停用词后,<<Moby Dick>>词汇比<<Sense and Sensibility>>更丰富。(注,不去停用词,统计结果同样支持这个结论。)

疑问:如何考察文体(genre)差异? 文体上分,二者都是小说,再具体点,一个是恐怖(惊悚)小说,一个是言情(浪漫)小说。

如果有分类语料库,如BROWN,直接提供了类型。

若如TEXT1,TEXT2等TEXT词链表,如何能根据词汇统计得出“文体”的结论呢?分类语料库是如何进行文本分类的,依据是什么?搞清楚这两点,大约可以仿BROWN分类方法,将这道题目做出来了。

尝试,发现Moby dick应是写whale的, S&S应是写人的。

探查一个词在两个文本中的词义,如下。

 text1.concordance('monstrous')
text2.concordance('monstrous') text1.similar('monstrous')
text2.similar('monstrous') #还可以
text1.common_contexts("'monstrous'", "abundant")
text2.common_contexts("'monstrous'", "very")

用WordNet考察monstrous词义,会发现该词意义很单一,没有小说中那么丰富的变化。定义就是"abnormally large"。

这个意义更接近现在的词义。是否因为写于1811的S&S比写于1851年的MB在语言用法方面与现代距离更远呢?

 >>> from nltk.corpus import wordnet as wn
>>> wn.synsets('monstrous')
[Synset('monstrous.s.01'), Synset('atrocious.s.01'), Synset('grotesque.s.01')]
>>> wn.synset('monstrous.s.01').lemma_names
['monstrous']
>>> wn.synset('atrocious.s.01').lemma_names
['atrocious', 'flagitious', 'grievous', 'monstrous']
>>> wn.synset('grotesque.s.01').lemma_names
['grotesque', 'monstrous']
>>> wn.synset('monstrous.s.01').definition
'abnormally large'
>>> wn.synset('monstrous.s.01').examples
[]
>>> wn.synset('monstrous.s.01').lemmas
[Lemma('monstrous.s.01.monstrous')]

=====结束分割线=====

(待续……)

NLPP-02-Exercises的更多相关文章

  1. Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...

  2. Android游戏开发实践(1)之NDK与JNI开发02

    Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...

  3. iOS系列 基础篇 02 StoryBoard 故事板文件

    iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...

  4. [转]Tesseract 3.02中文字库训练

    下载chi_sim.traindata字库下载tesseract-ocr-setup-3.02.02.exe 下载地址:http://code.google.com/p/tesseract-ocr/d ...

  5. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock

    本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...

  6. Oracle Recovery 02 - 常规恢复之不完全恢复

    背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份. 实验环境:RHEL6.4 + Oracle 11.2.0.4 单实例. 二.常规恢复之不完全恢复:部分数据丢失 2.1 重做日志文件 ...

  7. 异步编程系列第02章 你有什么理由使用Async异步编程

    p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...

  8. star ccm+ 11.02安装

    STAR CCM+是CD-Adapco公司的主打软件,其安装方式较为简单,这里以图文方式详细描述STAR CCM+11.02安装过程. 1 安装准备工作2 正式安装3 软件破解4 软件测试 1 安装准 ...

  9. 导入项目时,有关[2016-04-03 20:38:02 - Dex Loader] Unable to execute dex: Multiple dex files 问题

    最近我在学习androidUI设计,在网上找了一个UI菜单界面开源代码示例,按照步骤导入项目,运行的时候控制台结果报了如下错误: [2016-04-03 20:38:02 - Dex Loader] ...

  10. java多线程系类:JUC线程池:02之线程池原理(一)

    在上一章"Java多线程系列--"JUC线程池"01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我 ...

随机推荐

  1. uva 10622

    http://vjudge.net/contest/140673#problem/H 求某个数字(最大到10^9,可为负值)写成完全p次方数的指数p是多少 分析: 先进行唯一分解,之后p整除各个素因子 ...

  2. JavaBean基本用法示例(二)

    JavaBean的第二种用法,是接收form组件的请求赋值. 一.修改person类.因为这一次是两个网页之间的数据传输,受中文乱码问题的影响,所以在person类中添加一个用于转码的函数,并且在每一 ...

  3. Python学习笔记——Day1

    突破从改变开始,一行行字符,熟悉的感觉,还是那个味儿...呀哈哈哈 一.变量 变量是计算机语言中能存储计算结果或能表示值的抽象概念,变量可以通过变量名访问.调用及修改.变量通常表示可变状态,即具有存储 ...

  4. libtcc使用问题一二

    问题来由: powersniff(参考博客的文章,在qq群下载最新版本)目前使用lua作为分析插件,但熟练lua的人不多.所以,移植python和tcc两类语言作为插件. tcc(即tiny c),h ...

  5. 12 factor 目录

    I. 基准代码 一份基准代码,多份部署 II. 依赖 显式声明依赖关系 III. 配置 在环境中存储配置 IV. 后端服务 把后端服务当作附加资源 V. 构建,发布,运行 严格分离构建和运行 VI. ...

  6. 在Windows上,迁移VisualSVN server

    最近在搭建自动化测试框架,顺便了解了一下SVN的搭建.对于一般的使用场景,VisualSVN还是挺方便的,而且上手特别快. 由于是第一个demo,后期要迁移到其他服务器上面,所以就熟悉了一下serve ...

  7. php实现等比例不失真缩放上传图片

    有时上传图片时因为图片太大了,不仅占用空间,消耗流量,而且影响浏(图片的尺寸大小不一).下面分享一种等比例不失真缩放图片的方法,这样,不管上传的图片尺有多大,都会自动压缩到我们设置尺寸值的范围之内.经 ...

  8. JAVA 几种引用类型学习

    1.对象的强.软.弱和虚引用    在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从J ...

  9. 51nod 1515 明辨是非 并查集 + set + 启发式合并

    给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等:否则输出NO,并忽略此次操作. 当p为0时,如果第x变量和第y个变量可以不相等,则输 ...

  10. strong reference cycle in block

    However, because the reference is weak, the object that self points to could be deallocated while th ...