《Python自然语言处理》学习笔记-第一章

来源:互联网 发布:办公文件整理软件 编辑:程序博客网 时间:2024/06/05 14:18

1.1 语言计算:文本和单词

搜索文本
(1)词语索引视图:显示一个指定单词的每一次出现,连同一些上下文一起显示。使用concordance(‘xxx’)方法。
(2)找出现在相似上下文的词,使用similar(‘xxx’)方法。
(3)获取两个或两个以上的词的共同上下文,使用common_contexts([])方法。
(4)离散图:判断词在文本中的位置,显示从文本开头算起它前面有多少个词,使用dispersion_plot([])方法。(也需要安装numpy的matplotlib包)离散图可以用来词语用法模式,随时间推移语言使用上的变化。
(5)在nltk3中没有了generate这个产生随机文本的方法。

计数词汇
(1)使用len获取长度。
(2)使用set函数去除重复的词,得到词汇表。
(3)词类型:指一个词在一个文本中独一无二的出现形式或拼写,标点符号不算。
(4)文本词汇丰富度测量:即每个词平均被使用的次数,也就是文本总词数除以词汇表长度。
(5)count方法计数特定词在文本中出现的次数。


1.2 近观Python:将文本当作词链表

链表
(1)链表:文本存储的方式,每个单词以字符串的形式作为元素。
(2)链表的加法运算相当于首尾连接。
(3)使用append方法进行链表元素追加。
(4)索引:表示链表元素的位置,可以用索引获取对应位置的元素。
(5)给定一个元素时,可以使用index方法来获取其索引值。
(6)切片操作:获取子链表,要注意的是冒号右边的索引值是不包含在内的。
(7)链表是从0开始索引的。
(8)可以通过索引来修改链表上某个元素的值,也可以通过切片操作替换一整段链表。

字符串
(1)字符串的连接可以使用join([])方法,同时也可以指定字符串连接的连接符。
(2)字符串分割使用split方法,同样可以指定分隔符。
(3)字符串的乘法相当于把相同的字符串连接多少倍,加法相当于普通连接,返回的都是字符串类型对象。


1.3 计算语言:简单的统计

频率分布
(1)频率分布是指文本中每一个词的频率,使用FreqDist对象来计算表示。FreqDist对象就像一个字典,每个元素是一个键值对,用于文本词频统计时键表示文本中出现过的单词(标点符号作为单独的词),值表示单词出现的次数。
(2)需要注意的是,新版本的nltk中FreqDist元素的显示与内部元素的存放位置是不一样的。元素的显示是按照值的降序方式来显示,但是在内部则是按照键的大小来顺序存储的,这个可以通过items方法查看。所以要想获取按照值大小排序的键时需要对FreqDist使用sorted函数按照值大小来排序,不能直接用切片。
(3)要想获得最常见的词,也就是词出现的次数较多的词,使用most_common方法。
(4)使用FreqDist的plot方法可以获取词频图,通过设置cumulative参数更是可以得到累积后的词频图,这样可以观察某些词占用了多少文本总词数。
(5)使用hapaxes方法能够得到所有只出现过一次的词。

细粒度地选择词
(1)所谓细粒度地选择词其实就是选出具有某一性质的所有的词,这可以通过列表解析的方法来实现。

词语搭配和双连词(bigrams)
(1)搭配是指异乎寻常的经常在一起的词序列,特点是其中的词不能被类似的词置换。
(2)使用bigrams方法获取词对,也就是双连词。需要使用from nltk import bigrams来导入这个方法,新版本的nltk返回的是一个所有相邻的词构成的词对元组生成器列表。
(3)除非我们更加注重包含不常见词的情况,搭配基本上就是频繁的双连词。使用collocations方法获取文本中频繁出现的双连词。

计数其他东西
(1)查看词长分布:可以使用包含每个词长度的列表构造FreqDist对象来得到。
(2)FreqDist分布类中定义了很多函数有利于我们进行文本的统计。


1.4 回到Python:决策与控制

条件
(1)Python中包含了关系运算符有利于我们根据词的数值属性来选出具有某种特征的全部的词。
(2)包含if控制语句的列表解析以及运用词比较运算符(也就是一些字符串方法)有利于我们根据词汇的各种属性选出具有相同属性的词。
(3)通过合取、析取(也就是与、或等逻辑运算)更加有利于我们去选取具有复杂特征的词。

对每个元素进行操作
(1)链表推导也叫做列表解析,能够帮助我们对多个列表元素进行相同的处理。
(2)做重复词去除的时候,有时候还要考虑大小写导致的不重复情况,把所有词都变成小写就可以解决这个情况。
(3)去除标点符号可以通过isalpha方法来筛选每个词。

嵌套代码块
(1)Python控制结构都以冒号结束,冒号表示当前语句与后面的缩进块有关联。
(2)在print语句结尾处添加一个逗号,这是在告诉python在同一行输出。


1.5 自动理解自然语言

词意消歧
(1)在词意消歧中,我们要算出特定上下文中的词被赋予的是哪个意思。
(2)自动消除歧义需要使用上下文,因为一般来说相邻词汇有相近的含义。
(3)施事:语法上指动作的主体,即做出动作或变化的人或事物。

指代消解(anaphora resolution)
(1)在英文中,主语或者宾语有时候是用代词表示的,这时我们就需要知道代词指代的什么,解决这个问题一般使用指代消解或者语义角色标注的技术。
(2)指代消解:确定代词或名词短语指的是什么。
(3)语义角色标注(semantic role labeling):确定名词短语如何与动词相关联。
(4)受事:受动作支配的人或事物。

自动生成语言
(1)自动生成语言中,经典的应用就是自动回答和机器翻译。
(2)在自动问答中,一台机器要能够回答用户关于特定文本集的问题。(3)在机器翻译中,机器要能够把文本翻译成另一种语言文字,并准确传达原文的意思。
(4)正确的翻译取决于对代词的正确理解。
(5)弄清楚词的含义、动作的主语以及代词的先行词是理解句子含义的步骤,也是我们希望语言理解系统能够做的事情。

机器翻译
(1)新版本nltk的book模块中不再有babelize_shell机器翻译服务,因此书中的关于babelize_shell的例子会有错误。
(2)机器翻译的困难在于:①词的解释有多种;②必须改变次序才能与目标语言的语法结构保持一致。
(3)文本对齐:当具有大量的语言文档文本时,我们能够得到双语文档或双语词典,这样就可以自动配对组成句子。

人机对话系统
(1)在人工智能中,主要的智能测试是一个语言测试,叫图灵测试,通俗来说就是对于一个响应用户文本输入的对话系统能否表现得自然到我们无法区分它是人工生成的响应。
(2)图灵测试(The Turing test)由艾伦·麦席森·图灵发明,指测试者与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人类智能。
(3)商业对话系统的开发者使用上下文语境假设和业务逻辑确保在用户以不同方式表达需求或提供信息时对特定应用都能有效处理。

文本的含义
(1)文本含义识别(Recognizing Textual Entailment简称RTE):根据文本判断某假设是否成立。
(2)解决这个问题需要一些语言学分析。

NLP的局限性
(1)自然语言处理研究的一个重要目标是使用浅显但强大的技术代替无边无际的知识和推理能力,以此来构建和改善“语言理解”技术。