PERL语言在语料库文本处理中的应用
2018-09-03侯晋荣
侯晋荣
【摘 要】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
(一)尖括号替换为下划线
程序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=
{
$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/
将上述编辑的命令以“另存为…”的方式选择后缀名.pl保存,保存完毕后双击文件,程序即运行。标注方式Do
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
(二) 普通文本替换为XML文本
扩展标记语言XML(Extensible Markup Language)是一门新兴的标记语言,可以自定义标签,轻松表达多层结构的数据,方便地与数据库中的表进行相互转换,使计算机能够很简易地读取和统计数据。XML文件内容和形式分离的特性,使文档的更改和搜索变得极为方便。鉴于XML文件的以上特征,大型语料库多以XML文件格式存储。下划线标注的普通文本可编写以下程序替换为XML文本。
程序3
…
$line=~s/(\S+)_(\S+)/
…
XML使用
坚持_VV 和_CC 完善_VV 社会主义_NN 民主_NN 制度_NN 。_PU
替换为:
在文本开头添加指令<?xml version="1.0" encoding="GB2312"?>(XML支持多种语种,GB2312指简体中文),添加文本开始标签
四、结语
以上探讨了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.