python自然语言处理学习笔记(二)—— 语料库

一、获取文本语料库

1. 古腾堡语料库

NLTK包含古腾堡项目(Project Gutenberg)电子文本档案的经过挑选的一小部分文本。该项目大约有 25,000(现在是 36,000 了)本免费电子图书

python自然语言处理学习笔记(二)—— 语料库_第1张图片
查看语料
python自然语言处理学习笔记(二)—— 语料库_第2张图片
简·奥斯丁的《爱玛》

在之前的章节中,使用了text1.concordance()直接对text1这样的文本进行索引,但对现在这种情况的数据,需要多加一步才能使用诸如.concordance()的方法:

python自然语言处理学习笔记(二)—— 语料库_第3张图片

2. 网络和聊天文本

NLTK的网络文本集合的内容包括 Firefox交流论坛、在纽约无意听到的对话、《加勒比海盗》的电影剧本和个人广告和葡萄酒的评论等。

python自然语言处理学习笔记(二)—— 语料库_第4张图片
网络文本

即时消息聊天会话语料库,最初由美国海军研究生院为研究自动检测互联网幼童虐待癖而收集的。语料库包含超过 10,000 张帖子,以“UserNNN”形式的通用名替换掉 用户名,手工编辑消除任何其他身份信息,制作而成。语料库被分成 15 个文件,每个文件包含几百个按特定日期和特定年龄的聊天室(青少年、20 岁、30 岁、40 岁、再加上一个通 用的成年人聊天室)收集的帖子。

python自然语言处理学习笔记(二)—— 语料库_第5张图片
即时消息聊天会话语料库

3. 布朗语料库

布朗语料库是第一个百万词级的英语电子语料库的,由布朗大学于 1961 年创建。这个 语料库包含 500 个不同来源的文本,按照文体分类,如:新闻、社论等。

python自然语言处理学习笔记(二)—— 语料库_第6张图片
布朗语料库每一部分的示例文档

使用from nltk.corpus import brown 加载语料

4. 路透社语料库

路透社语料库包含 10,788 个新闻文档,共计 130 万字。这些文档分成 90 个主题,按照 “训练”和“测试”分为两组。因此,fileid 为“test/14826”等的文档属于测试组。

使用from nltk.corpus import reuters 加载语料

5. 就职演说语料库

使用from nltk.corpus import inaugural 加载语料

6. 标注文本语料库

许多文本语料库都包含语言学标注,有词性标注、命名实体、句法结构、语义角色等。 NLTK 中提供了很方便的方式来访问这些语料库中的几个,还有一个包含语料库和语料样本 的数据包,用于教学和科研的话可以免费下载。

python自然语言处理学习笔记(二)—— 语料库_第7张图片
python自然语言处理学习笔记(二)—— 语料库_第8张图片
python自然语言处理学习笔记(二)—— 语料库_第9张图片

7. 文本语料库的结构

  • 最简单的一种语料库是一些孤立的没有什么特别的组织的文本集合
  • 一些语料库按如文体(布朗语料库)等分类组织结构
  • 一些分类会重叠,如主题 类别(路透社语料库)
  • 一些语料库可以表示随时间变化语言用法的改变(就职演说语 料库)
python自然语言处理学习笔记(二)—— 语料库_第10张图片
NLTK中定义的基本语料库函数

8. 载入你自己的语料库

使用PlaintextCorpusReader加载自己的语料库:

from nltk.corpus import PlaintextCorpusReader
corpus_root = '/usr/share/dict' # 假设语料库所在的目录是这个
# PlaintextCorpusReader 参数分别是语料库所在地址和正则表达式
wordlists = PlaintextCorpusReader(corpus_root, '.*') 

使用BracketParseCorpusReader加载语料

from nltk.corpus import BracketParseCorpusReader
# 假设语料存放在这个地址
corpus_root = r"C:\corpora\penntreebank\parsed\mrg\wsj"
# file_pattern用来与它的子文件夹中包含的文件匹配
file_pattern = r".*/wsj_.*\.mrg"
ptb = BracketParseCorpusReader(corpus_root, file_pattern)


二、条件频率分布

1. 条件和事件

频率分布计算观察到的事件,如文本中出现的词汇。为此需要将文本处理成配对序列:(条件,事件)

这里按文体处理整个布朗语料库,将有 15 个条件(每个文体一个条件)和 1,161,192 个事件(每一个词一个事件)

2. 按文体计数词汇

from nltk.corpus import brown

# brown.words(categories=genre) 用来遍历出这种问题的所有文本的每个字
# brown.categories() 得到所有的问题
# 使用下面的代码得到在这种文体下,这个字出现的次数
cfd = nltk.ConditionalFreqDist((genre, word) for genre in brown.categories() for word in brown.words(categories=genre))

书中只使用了两种文体来做为例子:

python自然语言处理学习笔记(二)—— 语料库_第11张图片

使用此配对链表创建一个 ConditionalFreqDist,并将它保存在一个变量 cfd 中:

python自然语言处理学习笔记(二)—— 语料库_第12张图片

2. 绘制分布图和分布表

条件是词 america 或 citizen ,被绘图的计数是在特定演讲中出现的词的次数。它利用了每个演讲的文件名——例如 1865-Lincoln.txt——的前 4 个字符包含年代的事实。这段代码为文件 1865-Lincoln.txt 中每 个小写形式以america开头的词——如:Americans——产生一个配对('america', '1865')

# 绘制分布图和分布表

from nltk.corpus import inaugural
%matplotlib inline

cfd = nltk.ConditionalFreqDist((target, fileid[:4]) 
                               for fileid in inaugural.fileids()
                               for w in inaugural.words(fileid) 
                               for target in ['america', 'citizen'] 
                               if w.lower().startswith(target))

cfd.plot()
python自然语言处理学习笔记(二)—— 语料库_第13张图片
NLTK 中的条件频率分布
python自然语言处理学习笔记(二)—— 语料库_第14张图片


三、更多关于 Python:代码重用

主要包含函数和模块的内容


四、词典资源

词典或者词典资源是一个词和/或短语以及一些相关信息的集合,例如 :词性和词意定 义等相关信息。词典资源附属于文本,通常在文本的帮助下创建和丰富。

1. 词汇列表语料库

词汇语料库是 Unix中的/usr/dict/words 文 件,被一些拼写检查程序使用。
除了这个语料之外,还有停止词语料,这个语料是在NLP处理中经常使用的。因为诸如‘的’等高频但没有意义的词很多时候会妨碍算法的判断,所以常在应用算法前使用停止词语料来处理一遍,去除这些高频但无意义的词。

可使用from nltk.corpus import stopwords加载停止词语料

2. 发音的词典

一个稍微丰富的词典资源是一个表格(或电子表格),在每一行中含有一个词加一些性 质。NLTK 中包括美国英语的 CMU 发音词典nltk.corpus.cmudict.entries(),它是为语音合成器使用而设计的。

3. 比较词表

表格词典的另一个例子是比较词表。NLTK中包含了所谓的斯瓦迪士核心词列表(Swa desh wordlists),几种语言中约 200 个常用词的列表。语言标识符使用 ISO639 双字母码。
可使用from nltk.corpus import swadesh加载


五、WordNet

WordNet 是面向语义的英语词典,类似与传统辞典,但具有更丰富的结构。NLTK 中包 括英语 WordNet,共有 155,287 个词和 117,659 个同义词集合。我们将以寻找同义词和它们 在 WordNet 中如何访问开始。
这个在知识图谱里也有接触,是目前最著名的词典知识库。

你可能感兴趣的:(python自然语言处理学习笔记(二)—— 语料库)