APP下载

PERL语言在语料库文本处理中的应用

2018-09-03侯晋荣

智富时代 2018年7期
关键词:字符串语料库

侯晋荣

【摘 要】Perl是一种强大的脚本语言,快捷实用,支持正则表达式,是处理字符串的理想程序。鉴于此,Perl语言可以广泛应用于语料库的文本处理,尤其是文本中字符串的匹配、替换和转换。经验证,Perl可轻松实现语料库文本标注形式的替换以及XML和普通文档之间的相互替换。

【关键词】Perl;字符串;替换;语料库

一、引言

语料库是指以电子形式保存的语言材料(Kennedy 2000:3),具有海量存储,共现语境等优点。目前,语料库已广泛应用于二语习得、外语教学、话语分析、语言测试、翻译研究、文体分析等各个研究领域。语料库语言学与计算语言学、理论语言学、描述语言学、应用语言学、认知语言学、翻译等学科融会贯通,形成了一系列的交叉学科,如语料库翻译学,语料库文体学。

文本处理是语料库建设最基础最关键的一步,文本清洁、格式统一对于后续研究的数据提取和数据分析具有至关重要的作用。简单的文本清洁和统一的格式处理可以通过Word的“查找、替换”实现。为便于深入分析文本特征,语料库建设者往往“对语料库添加信息”(Hunston, 2002:79)并且进行词类标注(POS tagging)和语义标注(semantic annotation)。标注代码往往有几十种甚至上百种,Word很难对标注文本进行统一的格式替换和更改,而应用程序可轻松实现这一目的。PERL语言灵活自由,功能强大,正是文本处理的理想程序。

二、PERL语言的功能

1987年,Larry Wall开发出Perl(Practical Extraction and Report Language),填补了C语言与Unix shell之间的空白,融合了编程语言和脚本语言的优点。这种跨平台的语言从各种汇编语言中借鉴了语法规则,提供了许多冗余语法,增加系统的稳定性,使程序设计者可以忽略计算机内部资料存储、类型、处理方法、运算规则、甚至内存越界等等的细节,而将思考中心放在所需要的程序逻辑上。最重要的是Perl内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN(Comprehensive Perl Archive Network)。Perl突出的文本处理、丰富的正则表达式、面向对象程序设计以及免费的自由软件和易学易用的特性,使perl成为语料库文本处理的首选程序语言。

三、文本处理的程序设计

只要计算机中装载了Java平台和ActivePerl,即可使用Perl进行程序设计和操作。设计者可选择编辑器如Notepad或者Editpad编写程序。基于强大的正则表达式功能,Perl可轻松地进行字符串的匹配(m)、替换(s)和转换(tr)。下面就语料库文本处理中可能遇到的几个问题尝试Perl程序的解决方案。

不同语料标注软件采用的赋码方式不尽相同,早期的语料库标注采用尖括号内加词类代码(如want),目前大部分软件如Claws和Gotagger采用下划线后接词类代码的标注方法(want_VAV)。中国科学院计算技术研究所研制的汉语词法分析系统ICTCLASi对现代汉语进行文本切分与词性标注则采用反斜线后加词类代码(如举行/v 活动/vn)。研究者欲对搜集的多个语料库的标注文本进行分析研究,必然要统一标注形式。Perl语言的替换程序可满足使用者不同的转换要求,在各种标注形式之间进行转换。

(一)尖括号替换为下划线

程序1.

步骤1 opendir (DIR, ".") or die "Could not open the current directory"; #open the current dir

@files=readdir (DIR); #read all files in the dir and save them in an array

closedir (DIR); #close the dir

步驟2 foreach $file (sort (@files)) #loop dealing with each file

{

步骤3 next if ($file eq "."); #skip the file named "."

next if ($file eq ".."); #skip file name ".."

next if ($file=~/format\.pl/); #skip the perl script itself|

步骤4 open (FHI, $file) or die "Could not open $file"; #open the file or exit

步骤5 $output="new_".$file; #name the output file

步骤6 open (FHO, ">$output") or die "Could not open $output"; #create output file

步骤7 while ($line=) #read each line in the file

{

$line=~s/<(\S+)>/_$1/g; #matching and replacing all

print FHO $line; #print to the output file

}

步骤8 close (FHI); #close the input file

close (FHO); #close the output file

}

Perl是一种解释性语言,其脚本由声明(declaration)和语句(statement)两部分构成,在执行字符串的替换前后,有必要对字符串的搜索和文件的处理进行声明解释。步骤1调用opendir()函数打开目录句柄,从中读取文件数列,然后关闭目录句柄;步骤2是设置循环语句,依次处理各个文件,直至整个程序结束;步骤3跳过点文件(.),点点文件(..)以及程序文件.pl;步骤4打开源文件;步骤5定义输出文件名为“new_$file”($file指源文件);步骤6创建并将结果写入输出文件(“>”表示写入);步骤7是整个程序的核心,while控制结构内,定义$line为变量,用运算符=~进行匹配,s函数进行替换(s///把第一个变量替换为第二个)。Perl中自动定义出现的第一个( )中的内容为变量1,即$1,第二个( )中的内容为变量2,即$2,在这里,$1指任何一个字符以上的非空格字符串(\S+),通过命令s/<(\S+)>/_$1/,文件中尖括号非空格字符串的组合,替换成下划线后加相同的字符串。语句末尾的g是Perl中的常用参数,表示匹配所有可能的模式,即所有符合条件的字符串都将被替换。需要注意的是,如果不添加参数g,Perl语句仅仅对符合条件的第一个字符串进行替换。之后替换结果打印到输出文件。步骤8关闭输入文件和输出文件。

将上述编辑的命令以“另存为…”的方式选择后缀名.pl保存,保存完毕后双击文件,程序即运行。标注方式Do you want to go there ?<?> 替换为

Do_VBV you_PP want_VAV to_TO go_VB there_ADV ?_?

如若下划线替换为尖括号仅仅把步骤7中的字符串前后颠倒即可。程序如下:

$line=~s/_(\S+)/<$1>/g; #matching and replacing all

定义任何非空格字符串(\S+)为变量1,使用s函数替换所有含下划线字符串为尖括号内含相同字符串。将上述编辑的命令以“另存为…”的方式选择后缀名.pl保存,保存完毕后运行该程序,Do_VBV you_PP want_VAV to_TO go_VB there_ADV ?_?

替换为Do you want to go there ?<?>

(二) 普通文本替换为XML文本

扩展标记语言XML(Extensible Markup Language)是一门新兴的标记语言,可以自定义标签,轻松表达多层结构的数据,方便地与数据库中的表进行相互转换,使计算机能够很简易地读取和统计数据。XML文件内容和形式分离的特性,使文档的更改和搜索变得极为方便。鉴于XML文件的以上特征,大型语料库多以XML文件格式存储。下划线标注的普通文本可编写以下程序替换为XML文本。

程序3

$line=~s/(\S+)_(\S+)/$1<\/w>/g; #matching and replacing all

XML使用表示单词的开始,表示单词的结束。其中开始标记括号中可以添加标签的特性,意思是随后的单词标记为名词。定义下划线前的单词为变量1,下划线后的赋码标记为变量2,使用s函数进行替换,使词类标记码提到单词前面开始标记内,在单词之后添加结束标记。将上述编辑的命令以“另存为…”的方式选择后缀名.pl保存,保存完毕后运行该程序

坚持_VV 和_CC 完善_VV 社会主义_NN 民主_NN 制度_NN 。_PU

替换为:

坚持 完善 社會主义 民主 制度

在文本开头添加指令<?xml version="1.0" encoding="GB2312"?>(XML支持多种语种,GB2312指简体中文),添加文本开始标签和结束标签,以及等元数据,XML文档就替换完成了。

四、结语

以上探讨了Perl语言辅助语料库文本处理的两种情况,这仅仅是Perl语言在语料库应用中发挥的少许作用,Perl语言的强大功能有待于进一步的探索。总之,Perl是一种强大脚本语言,快捷实用,支持正则表达式,是处理字符串的一把好手。

注释:

i ICTCLAS: Institute of Computing Technology, Chinese Lexical Analysis System中科院汉语词法分析系统

【参考文献】

[1] Conway, D. Perl Best Practices. OReilly公司编译. Perl语言最佳实践[M]. 南京:东南大学出版社, 2008.

[2] Hoffman, P. Perl for Dummies(3rd edition). 杨皓译. 轻松学用Perl[M]. 北京:电子工业出版社, 2001.

[3] Hunston, S. Corpora in Applied Linguistics [M]. Cambridge: Cambridge University Press, 2002.

[4] Kennedy, G. An Introduction to Corpus Linguistics[M]. Beijing: Foreign Language Teaching and Research Press, 2000.

[5] Martin C. Perl Programmes Reference. 何黎芳等译. Perl5 语言命令详解[M]. 北京:电子工业出版社, 2001.

[6] Thackeray , W. M. Vanity Fair. 杨必译.名利场[M].北京:人民文学出版社, 1957.

猜你喜欢

字符串语料库
《语料库翻译文体学》评介
基于语料库“隐秘”的词类标注初步探究
最简单的排序算法(续)
基于JAVAEE的维吾尔中介语语料库开发与实现
一种新的基于对称性的字符串相似性处理算法
高效的top-k相似字符串查询算法
依据字符串匹配的中文分词模型研究
一种针对Java中字符串的内存管理方案
基于网络语料库的“给力”研究
语料库语言学未来发展趋势