【Python自然语言处理】第一章学习笔记——搜索文本、计数统计和字符串链表
这本书主要是基于Python和一个自然语言工具包(Natural Language Toolkit, NLTK)的开源库进行讲解
NLTK
- 介绍:NLTK是一个构建Python程序以处理人类语言数据的平台,它为50多个语料库和词汇资源(如WordNet)提供了易于使用的接口,以及一套用于分类、标记、解析和语义推理等的文本处理库。
- 配置:在安装Python和Anaconda之后直接
import nltk
本文是使用jupyter notebook进行编译。
函数:
搜索文本
- 搜索单个词出现的地方:A_text.concordance("A_word")
- 搜索跟一个词出现在相似上下文的所有词:A_text.similar("A_word")
- 搜索两个词出现的相同上下文,也就是分别先找到这两个词的上下文,然后取交集:A_text.common_contexts{["word1", "word2"]}
- 用离散图表示一个词在文本中出现的位置,横坐标为从文本开头算起的词数目,也就是一个词在文本中出现的位置,每一行为一个文本,纵坐标为要搜索的单词(可以是多个,用逗号隔开):A_text.dispersion_plot(["w1", "w2", "w3"]
生成文本:根据一篇文本生成相似风格的新文本。A_text.generate() 这个功能已经被注释掉,不能使用,就先当不存在吧。。。
计数统计
- 统计文本长度即单词和标点数目:len(A_text)
- 统计文本中有多少个不同的单词和标点:先将文本转化为集合得到一个词汇表,由于集合中的元素都不是不重复的,所以可以通过统计集合大小来获取:len(set(A_text)
- 可以用sorted函数来有序输出词汇表中的词汇:sorted(set(A_text)
- 统计每个单词平均被使用的次数,即文本词汇丰富度:len(A_text)/len(set(A_text)
- 统计一个单词在一个文本中的出现次数:A_text.count("A_word")
文本:
将文本表示为词链表:sent1=['Call', 'me', 'Ishmael', '.']
- 链表的加法为头尾连接两个链表:sent1+sent2; 乘法是复制自己并拼接在一起:sent1*2
- 在链表中追加一个元素:sent1.append(""A_word")
- 链表的连接:'X'.join(['Monty', 'Python']), X是任意连接符
- 链表的分隔:sent1.split(‘X’)
链表索引,即下标,从0开始
- 通过下标定位到某个词:text4[173]
- 找出一个词第一次出现时的索引,即下标:text4.index('awaken')
- 不取第16735个数。
- 第一个数字省略时表示从头开始取起,第二个省略则表示一直取到末尾
- 两个值可以都是负数,因为链表是个循环链表,但是起点正值的时候不能超过链表长度,终点可以。
- 可以用新内容替换一个片段,新内容长度可小于、等于、大于片段长度
切片,即从大文本中抽取一个片段,得到一个子链表:text5[16715:16735]。注:
简单文本统计:
获取文本中每个词的频次,以键值对的形式存储:FreqDist(A_text)
- 获取FreqDist中的key值,以list存储:list(FreqDist(A_text).keys())
- 获取FreqDist中的键值对,以dict_items字典存储:FreqDist(A_text).items()
- 获取FreqDist中频次为1的key的列表,以list存储:FreqDist(A_text).hapaxes()
- 取某个key的频次:FreqDist(A_text)[A_key]。如果是字符,要加引号
- 取频次最大的key值:FreqDist(A_text).max()
- 取某个key值的频率:FreqDist(A_text).freq(A_key)
- 取样本总数:FreqDist(A_text).N()
- 绘制频次分布表:FreqDist(A_text).tabulate()
- 绘制频次分布图:FreqDist(A_text).plot()
- 绘制累积频率分布图:FreqDist(A_text).plot(cumulative=True)
- 测试样本在fdist1中出现的概率是否小于fdist2
寻找长词且高频词
-
寻找常见词语搭配和双连词:
- 枚举所有双连词:list(bigrams(A_text))
- 寻找最常见的双连词:A_text.collocations()

- 比较两字符
- s.startswith(t)
- s.endswith(t)
- t in s
- s.islower():测试s中所有字符是否都是小写字母
- s.issupper():大写
- s.isalpha():测试s中所有字符是否都是字母
- s.isalnum():是否都是字母或数字
- s.isdigit():是否都是数字
- s.istitile():s中所有词是否都首字母大写
【Python自然语言处理】第一章学习笔记——搜索文本、计数统计和字符串链表的更多相关文章
- 《Think Python》第17章学习笔记
目录 <Think Python>第17章学习笔记 17.1 面向对象的特性(Object-oriented features) 17.2 打印对象(Printing objects) 1 ...
- 《Think Python》第16章学习笔记
目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...
- 《Think Python》第15章学习笔记
目录 <Think Python>第15章学习笔记 15.1 程序员定义的类型(Programmer-defined types) 15.2 属性(Attributes) 15.3 矩形( ...
- Spring实战第一章学习笔记
Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...
- Day1 《机器学习》第一章学习笔记
<机器学习>这本书算是很好的一本了解机器学习知识的一本入门书籍吧,是南京大学周志华老师所著的鸿篇大作,很早就听闻周老师大名了,算是国内机器学习领域少数的大牛了吧,刚好研究生做这个方向相关的 ...
- [蛙蛙推荐]SICP第一章学习笔记-编程入门
本书简介 <计算机程序的构造与解释>这本书是MIT计算机科学学科的入门课程, 大部分学生在学这门课程前都没有接触过程序设计,也就是说这本书是针对编程新手写的. 虽然是入门课程,但起点比较高 ...
- 《Think Python》第8章学习笔记
目录 8.1 字符串是一个序列(A string is a sequence) 8.2 len 8.3 用一个 for 循环进行遍历(Traversal with a for loop) 8.4 字符 ...
- 《Django By Example》第一章 学习笔记
首先看了下目录,在这章里 将会学到 安装Django并创建你的第一个项目 设计模型(models)并且生成模型(model)数据库迁移 给你的模型(models)创建一个管理站点 使用查询集(Quer ...
- 《Java基础教程》第一章学习笔记
Java 是什么呀! 计算机语言总的来说分成机器语言,汇编语言,高级语言.其中Java一种高级计算机语言,它是一种可以编写跨平台应用软件,完全面向对象的程序设计语言. Java划分为三个技术平台,Ja ...
随机推荐
- 清华集训2017D2T1 小 Y 和地铁(metro)
题目:https://www.luogu.org/problem/show?pid=P4005 题意:一条线段,给定n个点(n<=44)其中每个点可能对应另外一个点.如果一个点有对应点,那么就要 ...
- CodeForces - 1110C-Meaningless Operation(打表找规律)
Can the greatest common divisor and bitwise operations have anything in common? It is time to answer ...
- 【贪心】洛谷 P1199 三国游戏 题解
这个题尽管题目长,主要还是证明贪心的正确性(与博弈关系不大) 题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战 ...
- 队列 102 Binary Tree Level Order Traversal
队列的基本应用 - 广度优先遍历 1)树 : 层序遍历: 2)图:无权图的最短路径. 使用队列来实现二叉树的层序遍历,需要多关注一个层数的信息 /** * Definition for a binar ...
- Oj 24260: Lilypad Pond (神奇广搜题,状态搜索)
题目 为了让奶牛们娱乐和锻炼,约翰建造了一个美丽的池塘.这个池塘是矩形的,可以分成M×N个方格.一些格子是坚固得令人惊讶的莲花,还有一些是岩石,其余的只是美丽,纯净,湛蓝的水.贝西正在练习芭蕾舞,她站 ...
- express运行www后,在http://localhost:3000/查看返回会报 Cannot find module 'jade'
解决方法:npm install --save express jade
- Webstorm和 Eclipise 快捷键,慢慢总结下。
Eclipise: 查找代码: ctrl + H 快速选择一行: shift + 下/shift + 上 到指定行: ctrl + L Webstorm: 查找 ...
- Oracle KEEP的用法
[摘录自] http://blog.itpub.net/12932950/viewspace-687036/ http://flyfx.iteye.com/blog/1994993 聚合函数MIN, ...
- Promise 多重链式调用
Promise对象是用于异步操作的. Promise的真正强大之处在于它的多重链式调用,可以避免层层嵌套回调.如果我们在第一次ajax请求后,还要用它返回的结果再次请求呢? 使用Promise,我们就 ...
- 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
