前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自然语言处理(二) | Python对文本的简单处理

自然语言处理(二) | Python对文本的简单处理

作者头像
量潮科技
发布2022-10-31 15:56:22
7850
发布2022-10-31 15:56:22
举报
文章被收录于专栏:量潮科技

嘿,朋友,我们又见面了。

我是Hertz。

今天将接续上一篇《自然语言处理》,

为大家继续介绍一些用Python处理文本的方法。

NLP主要是对文本的处理。在更深的应用中,我们可以根据我们的需要,去处理我们想要处理的文本(比如上次提到的“购物网站中的买家评论”)。而在开始的时候,我们一般使用NLTK中提供的语料进行练习;NLTK不仅提供文本处理的工具,而且提供了一些文本材料。

在我们已经下载的\nltk-3.2.1\nltk文件夹中,有一个book.py的模块。在Python命令窗口使用“from nltk.book import *”命令,可以导入该模块提供的文本;包括9本名著和9个句子。如下所示:

从结果中我们可以看到,9本名著的名字分别是text1~text9,9个句子的名字分别是sent1~sent9。在操作命令中,我们将使用这些名字来指代相应的文本,以对其进行处理。

下面的内容是对一些方法或函数的介绍,

分为两个层面:文本层面和词汇层面

首先,在文本层面,哪些方法可以完成以下任务:

1.在一段文本中,找出某个词语所在的上下文;

2.找出与某个词有着类似用法的词,并确定它们在文本中出现的语境;

3.在整个文本中,某个词或某些词在文本中是怎样分布的;

在2. 和3. 中,我们要处理的可能是多个词语(“它们”“某些词”)。如果有一定Python基础,那么不难猜到,我们可以用一个字符串来表示单个词语;对多个词语,我们需要用一个链表来表示。一个链表由一个英文方括号“[]”界定,方括号内的内容为有限个(可以为零个)有序的字符串(词语或其他符号),各个字符串之间用逗号分隔。可以试着执行:

得到的就是一个链表。

下面来介绍这些任务的意义。

某一些词汇的上下文可能能够给我们提供一些有价值的信息。text3是《创世纪》(The Book of Genesis),如果我们想知道《创世纪》中的一些角色活了多久,那么我们可以通过对“lived”这个词进行1. 操作,以得到相关信息。操作如下:

“concordance”是text类(可参考Python中“类”的概念)的一个方法(或函数;这里不对二者作区分),在后面的括号中以字符串的形式输入我们想要查找的词语,就可以得到其上下文。

相似地,可以用如下代码完成2. 任务:

执行第一行代码得到的结果是在text2这个文本——《理智与情感》(Sense and Sensibility)——中,与“monstrous”这个词有着相似用法的词;在第二行代码中,我们使用了“common_contexts”这个方法(中间的“_”符号相当于函数名中出现的连字符),得到的是圆括号中的词链表中两个词语共同的上下文。

第3. 个任务看起来更实用;我们可以将结果以分布图的形式输出。这时我们需要用到两个程序包:NumPy和Matplotlib。(可以到http://www.nltk.org/上进行安装,也可以到http://pan.baidu.com/s/1slSsSsH直接下载。)

通过执行代码(以由人名组成的链表为参数):

我们可以得到,整部小说中,这四位主人公大致的出场分布。现在,如果告诉你,四个人中有两人是夫妻,那么没有读过这部小说的读者也可以根据得到的分布图猜一下,这两个人是谁。

接下来介绍一些词汇层面的处理方法。

这里简单说三种:len(), set(), sorted(), count()。(明确一下:这里讲“词汇层面”并不意味着这三种方法处理的对象是词汇,而是指应用这三种方法时,我们的目的与整个文本的语境基本无关。)

len()的参数可以是text或sent(或链表;下同),处理得到的结果是这段文本或这个链表的长度,即所含词语及其它符号的数量(词语或其它符号若重复出现,将被重复计数;区别于“词汇量”)。需要注意的是,在计数过程中,标点符号(如逗号’,’)会被单独计数;而’.”’这样“句号加右双引号”的组合,会被计为一个符号。例:

set()和sorted()的参数同样是text或sent。set()可将作为参数的文本(text或sent;下同)中出现的所有词语或其他字符不重复地以链表的形式输出,相当于输出一个乱序的词汇表;而sorted()经常与set()搭配使用,相信你已经猜到它的作用了:将作为参数的文本按默认顺序排列。

这样,使用如下代码,就可得到一个文本所用的词汇表了(以text2,《理智与情感》为例;词汇表中包含除字母单词外的其他符号):

将以上三种函数配合使用,可以开发出更多考查文本属性的函数。

那么,如何计算一段文本的词汇多样性?

(注:可以用每个词汇出现的平均次数来衡量。)

count()方法的参数,

是字符串形式的词语。

如:

得到的是“monstrous”这个词在text2中出现的频次。

结合前面的介绍,不难算出这个词在该文本中出现的频率。当然,对频次和频率的统计,我们有更加方便的方法(nltk内置的FreqDist()函数),在这里暂不作介绍,在得到更丰富的文本材料后,我们将用这个函数和另一个有关频率分布的函数,完成更多有意义的操作。

(备注:对text1~9和sent1~9,我们可以像操作序列那样,进行索引、切片和遍历。)

联系我们

项目邮箱(@iGuo 的邮箱):zhangguocpp@163.com

申请加入项目,请联系人事负责人@Suri :liuxiaomancpp@163.com

文/Hertz 吃货A

排版/吃货A

【声明】

本文著作权归作者所有

如需转载请联系我们获得授权

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量潮科技 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档