学习笔记CB001:NLTK库、语料库、词概率、双连词、词典

聊天机器人知识主要是自然语言处理。包括语言分析和理解、语言生成、机器学习、人机对话、信息检索、信息传输与信息存储、文本分类、自动文摘、数学方法、语言资源、系统评测。

NLTK库安装,pip install nltk 。执行python。下载书籍,import nltk,nltk.download(),选择book,点Download。下载完,加载书籍,from nltk.book import 。输入text书籍节点,输出书籍标题。搜索文本,text1.concordance("former”) 。搜索相关词,text1.similar("ship") 。查看词在文章的位置,text4.dispersion_plot("citizens", "democracy", "freedom", "duties", "America") ,可以按Ctr+Z退出。继续尝试其他函数需要重新执行python,重新加载书籍。词统计,总字数 len(text1),文本所有词集合 set(text1),文本总词数 len(set(text4)),单词出现总次数 text4.count("is") ,统计文章词频从大到小排序到列表 FreqDist(text1),统计词频输出累计图 fdist1 = FreqDist(text1);fdist1.plot(50, cumulative=True),只出现一次的词 fdist1.hapaxes(),频繁双联词 text4.collocations() 。

自然语言处理关键点,词意理解、自动生成语言,机器翻译、人机对话(图灵测试,5分钟内回答提出问题的30%)。基于规则,完全从语法句法出发,照语言规则分析、理解。基于统计,收集大量语料数据,统计学习理解语言,得益于硬件(GPU)、大数据、深度学习的发展。

NLTK语料库,Gutenberg,nltk.corpus.gutenberg.fileids()。Gutenberg语料库文件标识符,import nltk,nltk.corpus.gutenberg.fileids()。Gutenberg语料库阅读器 nltk.corpus.gutenberg。输出文章原始内容 nltk.corpus.gutenberg.raw('chesterton-brown.txt') 。输出文章单词列表 nltk.corpus.gutenberg.words('chesterton-brown.txt') 。输出文章句子列表 nltk.corpus.gutenberg.sents('chesterton-brown.txt') 。网络文本语料库,网络和聊天文本,from nltk.corpus import webtext 。布朗语料库,按照文本分类好500个不同来源文本,from nltk.corpus import brown 。路透社语料库,1万多个新闻文档,from nltk.corpus import reuters 。就职演说语料库,55个总统的演说,from nltk.corpus import inaugural 。

语料库组织结构,散养式(孤立多篇文章)、分类式(按照类别组织,但没有交集)、交叉式(文章属多个类)、渐变式(语法随时间发生变化)。

语料库通用接口,文件 fileids(),分类 categories(),原始内容 raw(),词汇 words(),句子 sents(),指定文件磁盘位置 abspath(),文件流 open()。

加载自定义语料库,from nltk.corpus import PlaintextCorpusReader ,corpus_root = '/Users/libinggen/Documents/workspace/Python/robot/txt' ,wordlists = PlaintextCorpusReader(corpus_root, '.*') ,wordlists.fileids() 。

格式转换GBK2UTF8,iconv -f GBK -t UTF-8 安娜·卡列尼娜.txt > 安娜·卡列尼娜utf8.txt 。

条件分布,在一定条件下事件概率颁上。条件频率分布,指定条件下事件频率分布。

输出布朗语料库每个类别条件每个词概率:

# coding:utf-8
import sys
import importlib
importlib.reload(sys)
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.tabulate(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'])
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'])

利用条件频率分布,按照最大条件概率生成双连词,生成随机文本:

# coding:utf-8
import sys
import importlib
importlib.reload(sys)
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')

词典资源,词或短语集合:

词汇列表语料库,所有英文单词,识别语法错误 nltk.corpus.words.words 。

停用词语料库,识别最频繁出现没有意义词 nltk.corpus.stopwords.words 。

发音词典,输出英文单词发音 nltk.corpus.cmudict.dict 。比较词表,多种语言核心200多个词对照,语言翻译基础 nltk.corpus.swadesh 。同义词集,面向语义英语词典,同义词集网络 WordNet 。

参考资料:

http://www.shareditor.com/blogshow/?blogId=63

http://www.shareditor.com/blogshow?blogId=64

http://www.shareditor.com/blogshow?blogId=65

欢迎推荐上海机器学习工作机会,我的微信:qingxingfengzi

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序你好

使用ML.Net和CSharp语言进行机器学习

本文介绍.net中的机器学习技术实现,不涉及数学方面的内容。它将重点关注在.net中的基本工作流程及其数据处理结构,以及怎么样通过使用开源项目ML.Net 0....

5553
来自专栏数据处理

Home Depot Product Search Relevance

kaggle赛题链接Home Depot Product Search Relevance,这个题目关键点就是特征提取,给的数据需要观察处理

911
来自专栏奇点大数据

阿里巴巴最新实践:TVM+TensorFlow优化GPU上的神经机器翻译

本文是阿里巴巴 PAI-Blade 团队发表于 TVM 的最新博文,文中阐述了如何将 TVM 引入 TensorFlow,使 TensorFlow 中的 bat...

4835
来自专栏WOLFRAM

版本 11.1 的新功能概要

1093
来自专栏从流域到海域

A Gentle Introduction to Autocorrelation and Partial Autocorrelation (译文)

A Gentle Introduction to Autocorrelation and Partial Autocorrelation 自相关和偏自相关的简单...

3016
来自专栏机器之心

手把手教你为iOS系统开发TensorFlow应用(附开源代码)

选自machinethink.net 机器之心编译 参与:赵华龙、邵明、吴攀、李泽南 在你使用深度神经网络做预测之前,你首先要训练神经网络。现在存在许多不同的神...

3109
来自专栏玉树芝兰

如何用 Python 和循环神经网络(RNN)做中文文本分类?

本文为你展示,如何使用 fasttext 词嵌入预训练模型和循环神经网络(RNN), 在 Keras 深度学习框架上对中文评论信息进行情感分类。

1814
来自专栏PPV课数据科学社区

大数据竞赛平台-Kaggle入门篇

本文作者: wopon_ 来源:36大数据 本文长度为1500字,建议阅读4分钟 这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且独立完成一个竞赛...

4568
来自专栏ATYUN订阅号

使用Python进行人脸聚类的详细教程

思考下面这个场景:两名劫匪在抢劫波士顿或纽约等繁华城市的银行。银行的安全摄像头工作正常,捕捉到了抢劫行为,但劫匪戴着头套,没办法看到他们的脸。

4962
来自专栏机器学习算法与理论

调用Dlib库进行人脸关键点标记

       昨天调试了人脸识别(classifier_webcam)这个程序,效果不错,响应速度也挺快。按照http://blog.csdn.net/u011...

4389

扫码关注云+社区

领取腾讯云代金券