当代自然语言处理都是基于统计的,统计自然需要很多样本,因此语料和词汇资源是必不可少的,本节介绍语料和词汇资源的重要性和获取方式

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

NLTK语料库

NLTK包含多种语料库,举一个例子:Gutenberg语料库,执行:

nltk.corpus.gutenberg.fileids()

返回Gutenberg语料库的文件标识符

[u'austen-emma.txt', u'austen-persuasion.txt', u'austen-sense.txt', u'bible-kjv.txt', u'blake-poems.txt', u'bryant-stories.txt', u'burgess-busterbrown.txt', u'carroll-alice.txt', u'chesterton-ball.txt', u'chesterton-brown.txt', u'chesterton-thursday.txt', u'edgeworth-parents.txt', u'melville-moby_dick.txt', u'milton-paradise.txt', u'shakespeare-caesar.txt', u'shakespeare-hamlet.txt', u'shakespeare-macbeth.txt', u'whitman-leaves.txt']

nltk.corpus.gutenberg就是gutenberg语料库的阅读器,它有很多实用的方法,比如:

nltk.corpus.gutenberg.raw('chesterton-brown.txt'):输出chesterton-brown.txt文章的原始内容

nltk.corpus.gutenberg.words('chesterton-brown.txt'):输出chesterton-brown.txt文章的单词列表

nltk.corpus.gutenberg.sents('chesterton-brown.txt'):输出chesterton-brown.txt文章的句子列表

类似的语料库还有:

from nltk.corpus import webtext:网络文本语料库,网络和聊天文本

from nltk.corpus import brown:布朗语料库,按照文本分类好的500个不同来源的文本

from nltk.corpus import reuters:路透社语料库,1万多个新闻文档

from nltk.corpus import inaugural:就职演说语料库,55个总统的演说

语料库的一般结构

以上各种语料库都是分别建立的,因此会稍有一些区别,但是不外乎以下几种组织结构:散养式(孤立的多篇文章)、分类式(按照类别组织,相互之间没有交集)、交叉式(一篇文章可能属于多个类)、渐变式(语法随着时间发生变化)

语料库的通用接口

fileids():返回语料库中的文件

categories():返回语料库中的分类

raw():返回语料库的原始内容

words():返回语料库中的词汇

sents():返回语料库句子

abspath():指定文件在磁盘上的位置

open():打开语料库的文件流

加载自己的语料库

收集自己的语料文件(文本文件)到某路径下(比如/tmp),然后执行:

>>> from nltk.corpus import PlaintextCorpusReader
>>> corpus_root = '/tmp'
>>> wordlists = PlaintextCorpusReader(corpus_root, '.*')
>>> wordlists.fileids()

就可以列出自己语料库的各个文件了,也可以使用如wordlists.sents('a.txt')和wordlists.words('a.txt')等方法来获取句子和词信息

条件频率分布

条件分布大家都比较熟悉了,就是在一定条件下某个事件的概率分布。自然语言的条件频率分布就是指定条件下某个事件的频率分布。

比如要输出在布朗语料库中每个类别条件下每个词的概率:

# coding:utf-8import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )import nltk
from nltk.corpus import brown# 链表推导式,genre是brown语料库里的所有类别列表,word是这个类别中的词汇列表
# (genre, word)就是类别加词汇对
genre_word = [(genre, word)for genre in brown.categories()for word in brown.words(categories=genre)]# 创建条件频率分布
cfd = nltk.ConditionalFreqDist(genre_word)# 指定条件和样本作图
cfd.plot(conditions=['news','adventure'], samples=[u'stock', u'sunbonnet', u'Elevated', u'narcotic', u'four', u'woods', u'railing', u'Until', u'aggression', u'marching', u'looking', u'eligible', u'electricity', u'$25-a-plate', u'consulate', u'Casey', u'all-county', u'Belgians', u'Western', u'1959-60', u'Duhagon', u'sinking', u'1,119', u'co-operation', u'Famed', u'regional', u'Charitable', u'appropriation', u'yellow', u'uncertain', u'Heights', u'bringing', u'prize', u'Loen', u'Publique', u'wooden', u'Loeb', u'963', u'specialties', u'Sands', u'succession', u'Paul', u'Phyfe'])

注意:这里如果把plot直接换成tabulate ,那么就是输出表格形式,和图像表达的意思相同

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

我们还可以利用条件频率分布,按照最大条件概率生成双连词,最终生成一个随机文本

这可以直接使用bigrams()函数,它的功能是生成词对链表。

创建python文件如下:

# coding:utf-8import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )import nltk# 循环10次,从cfdist中取当前单词最大概率的连词,并打印出来
def generate_model(cfdist, word, num=10):for i in range(num):print word,word = cfdist[word].max()# 加载语料库
text = nltk.corpus.genesis.words('english-kjv.txt')# 生成双连词
bigrams = nltk.bigrams(text)# 生成条件频率分布
cfd = nltk.ConditionalFreqDist(bigrams)# 以the开头,生成随机串
generate_model(cfd, 'the')

执行效果如下:

the land of the land of the land of the

the的最大概率的双连词是land,land最大概率双连词是of,of最大概率双连词是the,所以后面就循环了

其他词典资源

有一些仅是词或短语以及一些相关信息的集合,叫做词典资源。

词汇列表语料库:nltk.corpus.words.words(),所有英文单词,这个可以用来识别语法错误

停用词语料库:nltk.corpus.stopwords.words,用来识别那些最频繁出现的没有意义的词

发音词典:nltk.corpus.cmudict.dict(),用来输出每个英文单词的发音

比较词表:nltk.corpus.swadesh,多种语言核心200多个词的对照,可以作为语言翻译的基础

同义词集:WordNet,面向语义的英语词典,由同义词集组成,并组织成一个网络

自己动手做聊天机器人 三-语料与词汇资源相关推荐

  1. 《自己动手做聊天机器人》教程

    开篇在: http://www.shareditor.com/blogshow/?blogId=63 http://www.shareditor.com/blogshow/?blogId=65 htt ...

  2. 自己动手做聊天机器人 一-涉及知识【转】

    转自:http://www.shareditor.com/blogshow/?blogId=63 人工智能一直以来是人类的梦想,造一台可以为你做一切事情并且有情感的机器人,像哆啦A梦一样,现在这已经不 ...

  3. 自己动手做聊天机器人 一-涉及知识

    人工智能一直以来是人类的梦想,造一台可以为你做一切事情并且有情感的机器人,像哆啦A梦一样,现在这已经不是一个梦了:iPhone里会说话的siri.会下棋的阿法狗.小度机器人.大白......,他们都能 ...

  4. 自己动手做聊天机器人 二十九-重磅:近1GB的三千万聊天语料供出

    Reference: http://www.shareditor.com/blogshow/?blogId=112 经过半个月的倾力打造,建设好的聊天语料库包含三千多万条简体中文高质量聊天语料,近1G ...

  5. 自己动手做聊天机器人教程

    GitHub链接: https://github.com/warmheartli/ChatBotCourse

  6. 聊天机器人之语料准备

    聊天机器人之语料准备 1. 分词词典 最终词典的格式: 词语 词性(不要和jieba默认的词性重复) 1.1 词典来源 各种输入法的词典          [通过下面链接下载使用] 例如:https: ...

  7. 【ChatBot开发笔记】聊天机器人准备工作——初识NLTK库、语料与词汇资源

    目录 简述 一.NLTK 1.安装 2.搜索 3.词统计 二.语料与词汇资源 1.举例 2.类似的语料库还有: 3.语料库的通用接口: 4.其他词典资源: 5.加载自己的语料库 结语 简述 2021. ...

  8. 做聊天机器人平台就是赌博

    最开始并没有操作系统,软件运行时都是竞争的:直接请求硬件资源,造成竞争.而且多人用一个计算机时,这种情况更容易发生.然后人家开始做操作系统,你觉得不可能,那怎么可能呢. 后来操作系统使用很麻烦,面对冷 ...

  9. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第02章 获得文本语料和词汇资源

    第02章 获得文本语料和词汇资源 2.1 获取文本语料库 古腾堡语料库 网络和聊天文本 布朗语料库 路透社语料库 就职演说语料库 标注文本语料库 在其他语言的语料库 文本语料库的结构 载入你自己的语料 ...

最新文章

  1. 根据windows域名找ip
  2. jQuery练习---- 超简单的表格悬停变色Demo
  3. oracle数据库在sqlplus登录时遇到的问题
  4. 一款炫酷Loading动画--载入成功
  5. c++new时赋初值_优质 quot;嵌入式C编程quot; 必备指南
  6. 声明方法java实际开发中泛型使用需要注意的一些问题
  7. Laravel 5 测试用例 记录
  8. web系统找回密码流程
  9. ASP.NET 控制页概览
  10. 银盛支付银账通进件接口php demo 签名 上传图片 进件 获取token 超简洁sdk
  11. android studio布局文件在哪,android studio布局文件详解
  12. pano2vr怎么制作漫游_Pano2VR如何制作全景图?全景图如何添加热点?
  13. Css中路径data:image/png;base64的用法详解与操作
  14. hau 1870 愚人节的礼物(栈)
  15. 数据管理平台(DMP)简介
  16. centos7:在linux世界里,一切皆文件
  17. oracle数据库导入dmp文件
  18. 科成计算机系学习部,学习部
  19. 第一章 学习Java的建议
  20. 第二单元 The Opera Singer

热门文章

  1. Java Web笔记-by戏言
  2. 软件测评师--第三小时 软件质量与评价
  3. BeautifulSoup 删除标签而不删除内容(unwrap())
  4. DeepLearing—CV系列(十八)——图像分割之U-Net的Pytorch实现
  5. echarts地图api series_echarts实现中国地图数据展示
  6. DIY基于树莓派的OpenTX航模遥控器(一)
  7. 拆机解决Thinkpad笔记本键盘显示屏接触不良问题
  8. 国内智能巡检机器人品牌Top5排行榜
  9. AI审合同丨可审哪些类型的合同?
  10. 面向ADAS/AD应用,打造独特的转向手感