利用Python对自然语言进行简单处理

2019-03-21 00:23刘家岐
现代商贸工业 2019年7期
关键词:字符串组块自带

刘家岐

摘要:随着人工智能的发展,人们逐渐开始利用编程语言来实现对于自然语言的处理,在现实生活中,这一发展也有着广阔的应用前景。但是,受制于编程语言的局限性,对于自然语言的处理也只是在较为简单的阶段。因此介绍利用Python代码来对自然语言进行处理的简单步骤及相关知识。

关键词:自然语言处理;Python

中图分类号:G4文献标识码:Adoi:10.19311/j.cnki.1672-3198.2019.07.085

在日常生活中,聊天机器人的应用已经十分普遍,例如可以自动回复的聊天客服机器人。但是,在大多数情况下,这些聊天机器人只能处理简单的文字或符号,有些聊天机器人甚至需要要求使用者输入特定的语言或符号,才能对其进行处理。在使用Python相关代码进行构建的情况下,聊天机器人便可以对自然语言的文本进行处理,包括对单词进行分类,统计特定文字或单词的使用率,以及找出文本与作者或年代的联系。由于相关领域还处于发展阶段,所以Python代码目前主要实现对于英文文本的处理。

1利用Python语言实现对于文本的简单处理

在Python中,对于文本的处理是基于变量的。但是,不同于一般的程序,在处理自然语言文本时,变量变为了单词,词组,甚至可以是一个句子。编写相关代码,便可以对文本变量进行处理。

1.1利用Python函数

在Python中,有很多程序自带的函数可以对文本变量进行处理。与对于其他变量的处理相同,可以自行输入单词和文本。每个单词可以看作一个单一的变量,除了输入单一的单词之外,还可以输入文本,将以类似于字符串的形式储存。在输入文本之后,Python自带的函数可以完成对于单个单词长度的统计,即单词的字母数量,以及文本中特定单词的搜索和统计。除此之外,多个以字符串形式储存的文本还可以进行合并,对于单个文本可以进行对于特定单词的搜索和文本词数的统计。

1.2对于文本的延伸处理

除了对于文本中特定的单词进行搜索和整体次数的统计,我们还可以对于文本进行其他处理,获取其他关于文本的数据,从而丰富我们对于文本的了解。首先,可以对文本中特定单词的使用情况进行统计,从而获得不同单词的使用频率。依据此数据,我们可以了解不同单词的使用情况,从而获得文本的用词特点,分析出作者的写作习惯。其次,利用编程语言中简单的分支结构,可以对文本中每个单词进行判断。例如,筛选出文本中所有长度大于某个值的单词,并进行计数,我们便可以判断出文本的难易程度,并可以以这个数据为基础,对文本的难易程度进行量化。除此之外,我们还可以利用Python中自带的collocation函数,对于文本中的词组进行提取,从而对文本进行进一步分析,也可以得出作者的习作习惯。

1.3对文本进行简化处理

在文本中,除了单词之外,标点和数字也是文本的组成部分。但是,在大部分情况下,我们只需要对文本中的单词进行分析,所以我们需要获得纯文本来帮助我们更好地进行相关处理。除此之外,在某些情况下,我们只需要对文本中较长的单词进行处理,来了解作者的写作习惯和用词倾向。在这种情况下,我们可以设置一个合适的单词长度,并以此作为标准对文本进行筛选。

2获得字数较多的文本(语料库)

虽然在Python程序中,我们可以通过手动输入来输入单词和文本,但是在需要输入文字较多的文本,甚至获得一个语料库时,这个方法很明显将不再适用,所以我们需要新的方法来获取字数较多,更为复杂的文本。

2.1Python程序中自带的语料库

在Python中,有一些自带的文本可以輕松获取,这些语料库中的文本可以用于试验新的代码,并且为初学者提供了素材。其中,Python自带的语料库包括:gutenberg corpus,web and chat text,brown corpus,reuters corpus,inaugural address corpus和annotated text corpus。除此之外,Python还自带一些其他语言的语料库,包含超过300种不同的语言。

2.2语料库的不同结构

不同的语料库有着不同的结构。最简单的语料库是文本的集合,没有特殊的结构,Python中自带的gutenberg corpus和web and chat text就是这种语料库。有些语料库会根据文本的类型,风格,作者和语言进行分类,例如Python中自带的brown corpus。有些时候一个文本可能同时属于多个类别,即分类时有重叠,例如Python中自带的reuters corpus。除此之外,还有按时间顺序对文本进行分类的语料库,这类语料库通常为新闻文本,例如Python中自带的inaugural address corpus。与以上的几种语料库都不同的是annotated text corpus,这个语料库中包含有注释,例如语法结构,词性和在文本中的语义角色。

2.3添加自己需要的语料库

除了Python中自带的语料库之外,也可以添加自己准备好的语料库来进行处理。在程序中利用corpus_root函数,加上想要引用的语料库的文件地址便可以引入自己的需要的语料库。

3对原始文本进行处理

尽管Python中已经有许多自带的语料库,但绝大多数情况下,我们需要处理的对象还是自己的文本和语料库。在Python中,对于文本的处理是基于单词和简单文本的,例如一个或多个单词,以及一句话,我们将它们成为strings。因为单词由多个字母组成,字符串是基本的处理单位,所以在处理自然语言时,字符串就像是一个最单一的基本变量。

3.1对于字符串的简单处理和操作

在Python中,与其他编程语言相同,多个字符串可以进行合并,但是不能删减其中的元素。单个字符串可以进行乘法,以倍数增加字符串中的元素,例如一个单词在进行乘法后,会变为三个单词储存在一个字符串内。但是,字符串同样不能进行除法。

3.2获取单词中的特定字母和substring(子字符串)

除此之外,因为字符串是以单个字母为最小基本单位进行储存的,并且存在顺序,所以,我们可以轻易获得单词中的特定字母。在字符串中,第一个字母的位置是0,可以说它是字符串中第0个元素,以此类推,所以第五个字符是第四的元素。在大多数情况下,字符串的长度为12,也就是说一个字符串可以包含12个字母。我们也可以用负数来表示这个字母在字符串中的位置,第一个字母,也就是第0个元素,对应的是第负12元素,以此递增,最后一个字母,第11个元素,对应的是负一。

基于以上的原理,我们可以从一个字符串中获得一个子字符串。写出想要获得的第一个和最后一个元素的位置,便可以获得一个子字符串。众所周知,英文中有构词法,所以单词由词根词缀,当我们可以获得子字符串时,我们就可以借此来提取出单词的词根词缀,将其分解。

3.3字符串与列表的差别

在进行字符串的相加合并时,有一点需要注意的是,字符串只能与字符串进行相加合并,而无法和lists,也就是列表,进行相加合并。因为列表与字符串不同的地方在于,字符串内的元素都是紧密相连的,即使里面包含两个单词,也会连在一次。但是在列表中,单词之间有逗号相隔,可以理解为列表储存了多个单个单词的字符串。

3.4在语料库中进行有条件的搜索

在处理文本时,我们经常需要获得我们需要的单词,所以我们就要用到搜索。在Python中,我们可以根据单词最开始几个字母的顺序,或者末尾几个字母的顺序,也就是词缀词根来进行搜索。除此之外,我们还可以设定一个想要搜索到的单词的范围,并在语料库中搜索进行搜索。在我们想要研究不同单词的使用频率时,我们可以设定一个最低出现次数,当某个单词达到了这个出现次数后,便满足了搜索条件,从而达到我们的目的。

4对单词进行标注

在我们日常学习和使用语言时,会发现每个单词都有自己在句子中的位置和特定的属性,比如动词,名词,副词,形容词,介词等等。在用编程语言处理文本时,对于单词的分类也依然重要,这可以帮助我们分析句子的结构,从而进一步对语义进行分析。

4.1标签的使用

在Python中,我们可以根据单词的词性对每个单词进行标注,将单词的词性标注在单词的后方。在经过这样的处理之后,我们便可以对整个语料库中的文本进行进一步处理,例如我们可以直接利用标签来搜索名词,或者,搜索与现有单词具有相同词性的单词,有效地将文本拆分并分类。

4.2不同词性的单词的特点

在对文本中的单词进行过标签之后,我们需要进一步了解不同词性的单词在句中的作用和位置,从而帮助我们更好的理解句意,从而进一步对文本进行处理。

4.2.1名词(noun)

名词通常为物理,地点,人或概念,一般情况下出现在定冠词或形容词的后面,可以作为整个句子的主语或宾语。

4.2.2动词(verb)

动词用来描述发生的时间或动作,在句子中,动词表达的关系涉及一个或多个名词或名词词组。

4.2.3形容词和副词(adjective and adverb)

形容词通常用来描述名词,所以形容词的出现往往意味着名词的出现,所以形容词可以作为指示或预测,来判断名词的出现。副词用来修饰动词,也可以用来修饰形容词,同时可以用来表示时间,方向和地点。

4.3词典

在Python中,不但有自带的语料库,还有自带的词典。与普通的字典相同,Python中自带的词典可以帮助我们查找一个单词的词性。除了使用Python中自带的词典之外,我们还可以自己定义一个词典,来帮我们处理文本。有些时候,我们也可以将词典进行倒置,也就是说,我们不但可以利用词典来搜索已知单词的词性,也可以根据词性来搜索相应的单词,这样可以帮助我们更好的拆分句子结构,从而进一步对文本进行处理。

5从文本中提取信息

在大多数情况下,语料库中包含的文本往往数据量十分巨大,而我们不可能对如此庞大的数据进行处理,所以我们需要从文本中提取出我们需要的信息来进行处理。通常情况下,我们需要先对文本的不同部分的信息进行分类识别,然后再进行提取。

5.1组块(chunking)

在对一个句子进行划分时,我们可以将句子分为不同的组块。组块可以是单个单词,也可以是短语。例如,在分析一个较为复杂的句子时,这个句子可能包含不止一层的结构,因此组块的大小也会因此发生变化。在第一层机构中,有些组块可能包含很多单词,但是在第二层结构中我们便可以将这些大的组块再次划分成小的组块,以此类推。在进行完这样的划分后,我们便可以清晰地了解到句子的结构,从而提取出我们需要的信息。

5.2句子中的递归结构

复杂的句子一般包含有多层结构,所以在对较为复杂的句子进行拆分时,我们可以使用递归的思想,一层一层地来进行拆分。

6理解句子含义

在理解句子含义时,我们可以将句子转化为一阶逻辑(first-order logic),但是有些句子是无法转化为一阶逻辑的,这也是目前存在的缺陷和对于语言处理的局限。

7挑战

尽管我们已经可以利用编程语言来对自然语言进行一些简单的处理,但在某些情况下,我们还是无法对所有的自然语言都进行处理。在将文本转化为一阶逻辑时,也不可避免地会出现许多直观的错误。

自然语言处理在人工智能领域有着很大的作用,但是它仍处在发展阶段。目前,我们也仅限于一些简单的处理,而未来的发展也面临一些挑战,比如在分析代词的过程中,代词在句子中的指代对象有很多种可能,仅仅通过句子结构和词性是远远不够的,而需要凭借对于语义的理解才能获得准确的判断。相信随着人工智能的发展,人们将会在处理自然语言方面有着更大的進步。

参考文献

[1]孙隽韬,陈炳,黄爱华.一种基于Python的商品评论数据智能获取与分析技术[J].现代计算机(专业版),2018,(14).

猜你喜欢
字符串组块自带
横浪作用下大型上部组块双船浮托安装动力响应特性试验研究
“好卖的产品 自带营销力。”
好的爱情自带成长属性
陆丰7-2油田导管架平台上部组块低位浮托安装关键技术
一种新的基于对称性的字符串相似性处理算法
英语词汇组块学习路径研究——组块法
依据字符串匹配的中文分词模型研究
词汇组块层次网络
一种针对Java中字符串的内存管理方案