• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      PERL語言在語料庫文本處理中的應(yīng)用

      2018-09-03 03:47:26侯晉榮
      智富時代 2018年7期
      關(guān)鍵詞:字符串語料庫

      侯晉榮

      【摘 要】Perl是一種強大的腳本語言,快捷實用,支持正則表達式,是處理字符串的理想程序。鑒于此,Perl語言可以廣泛應(yīng)用于語料庫的文本處理,尤其是文本中字符串的匹配、替換和轉(zhuǎn)換。經(jīng)驗證,Perl可輕松實現(xiàn)語料庫文本標注形式的替換以及XML和普通文檔之間的相互替換。

      【關(guān)鍵詞】Perl;字符串;替換;語料庫

      一、引言

      語料庫是指以電子形式保存的語言材料(Kennedy 2000:3),具有海量存儲,共現(xiàn)語境等優(yōu)點。目前,語料庫已廣泛應(yīng)用于二語習(xí)得、外語教學(xué)、話語分析、語言測試、翻譯研究、文體分析等各個研究領(lǐng)域。語料庫語言學(xué)與計算語言學(xué)、理論語言學(xué)、描述語言學(xué)、應(yīng)用語言學(xué)、認知語言學(xué)、翻譯等學(xué)科融會貫通,形成了一系列的交叉學(xué)科,如語料庫翻譯學(xué),語料庫文體學(xué)。

      文本處理是語料庫建設(shè)最基礎(chǔ)最關(guān)鍵的一步,文本清潔、格式統(tǒng)一對于后續(xù)研究的數(shù)據(jù)提取和數(shù)據(jù)分析具有至關(guān)重要的作用。簡單的文本清潔和統(tǒng)一的格式處理可以通過Word的“查找、替換”實現(xiàn)。為便于深入分析文本特征,語料庫建設(shè)者往往“對語料庫添加信息”(Hunston, 2002:79)并且進行詞類標注(POS tagging)和語義標注(semantic annotation)。標注代碼往往有幾十種甚至上百種,Word很難對標注文本進行統(tǒng)一的格式替換和更改,而應(yīng)用程序可輕松實現(xiàn)這一目的。PERL語言靈活自由,功能強大,正是文本處理的理想程序。

      二、PERL語言的功能

      1987年,Larry Wall開發(fā)出Perl(Practical Extraction and Report Language),填補了C語言與Unix shell之間的空白,融合了編程語言和腳本語言的優(yōu)點。這種跨平臺的語言從各種匯編語言中借鑒了語法規(guī)則,提供了許多冗余語法,增加系統(tǒng)的穩(wěn)定性,使程序設(shè)計者可以忽略計算機內(nèi)部資料存儲、類型、處理方法、運算規(guī)則、甚至內(nèi)存越界等等的細節(jié),而將思考中心放在所需要的程序邏輯上。最重要的是Perl內(nèi)部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN(Comprehensive Perl Archive Network)。Perl突出的文本處理、豐富的正則表達式、面向?qū)ο蟪绦蛟O(shè)計以及免費的自由軟件和易學(xué)易用的特性,使perl成為語料庫文本處理的首選程序語言。

      三、文本處理的程序設(shè)計

      只要計算機中裝載了Java平臺和ActivePerl,即可使用Perl進行程序設(shè)計和操作。設(shè)計者可選擇編輯器如Notepad或者Editpad編寫程序?;趶姶蟮恼齽t表達式功能,Perl可輕松地進行字符串的匹配(m)、替換(s)和轉(zhuǎn)換(tr)。下面就語料庫文本處理中可能遇到的幾個問題嘗試Perl程序的解決方案。

      不同語料標注軟件采用的賦碼方式不盡相同,早期的語料庫標注采用尖括號內(nèi)加詞類代碼(如want),目前大部分軟件如Claws和Gotagger采用下劃線后接詞類代碼的標注方法(want_VAV)。中國科學(xué)院計算技術(shù)研究所研制的漢語詞法分析系統(tǒng)ICTCLASi對現(xiàn)代漢語進行文本切分與詞性標注則采用反斜線后加詞類代碼(如舉行/v 活動/vn)。研究者欲對搜集的多個語料庫的標注文本進行分析研究,必然要統(tǒng)一標注形式。Perl語言的替換程序可滿足使用者不同的轉(zhuǎn)換要求,在各種標注形式之間進行轉(zhuǎn)換。

      (一)尖括號替換為下劃線

      程序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)兩部分構(gòu)成,在執(zhí)行字符串的替換前后,有必要對字符串的搜索和文件的處理進行聲明解釋。步驟1調(diào)用opendir()函數(shù)打開目錄句柄,從中讀取文件數(shù)列,然后關(guān)閉目錄句柄;步驟2是設(shè)置循環(huán)語句,依次處理各個文件,直至整個程序結(jié)束;步驟3跳過點文件(.),點點文件(..)以及程序文件.pl;步驟4打開源文件;步驟5定義輸出文件名為“new_$file”($file指源文件);步驟6創(chuàng)建并將結(jié)果寫入輸出文件(“>”表示寫入);步驟7是整個程序的核心,while控制結(jié)構(gòu)內(nèi),定義$line為變量,用運算符=~進行匹配,s函數(shù)進行替換(s///把第一個變量替換為第二個)。Perl中自動定義出現(xiàn)的第一個( )中的內(nèi)容為變量1,即$1,第二個( )中的內(nèi)容為變量2,即$2,在這里,$1指任何一個字符以上的非空格字符串(\S+),通過命令s/<(\S+)>/_$1/,文件中尖括號非空格字符串的組合,替換成下劃線后加相同的字符串。語句末尾的g是Perl中的常用參數(shù),表示匹配所有可能的模式,即所有符合條件的字符串都將被替換。需要注意的是,如果不添加參數(shù)g,Perl語句僅僅對符合條件的第一個字符串進行替換。之后替換結(jié)果打印到輸出文件。步驟8關(guān)閉輸入文件和輸出文件。

      將上述編輯的命令以“另存為…”的方式選擇后綴名.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函數(shù)替換所有含下劃線字符串為尖括號內(nèi)含相同字符串。將上述編輯的命令以“另存為…”的方式選擇后綴名.pl保存,保存完畢后運行該程序,Do_VBV you_PP want_VAV to_TO go_VB there_ADV ?_?

      替換為Do you want to go there ?<?>

      (二) 普通文本替換為XML文本

      擴展標記語言XML(Extensible Markup Language)是一門新興的標記語言,可以自定義標簽,輕松表達多層結(jié)構(gòu)的數(shù)據(jù),方便地與數(shù)據(jù)庫中的表進行相互轉(zhuǎn)換,使計算機能夠很簡易地讀取和統(tǒng)計數(shù)據(jù)。XML文件內(nèi)容和形式分離的特性,使文檔的更改和搜索變得極為方便。鑒于XML文件的以上特征,大型語料庫多以XML文件格式存儲。下劃線標注的普通文本可編寫以下程序替換為XML文本。

      程序3

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

      XML使用表示單詞的開始,表示單詞的結(jié)束。其中開始標記括號中可以添加標簽的特性,意思是隨后的單詞標記為名詞。定義下劃線前的單詞為變量1,下劃線后的賦碼標記為變量2,使用s函數(shù)進行替換,使詞類標記碼提到單詞前面開始標記內(nèi),在單詞之后添加結(jié)束標記。將上述編輯的命令以“另存為…”的方式選擇后綴名.pl保存,保存完畢后運行該程序

      堅持_VV 和_CC 完善_VV 社會主義_NN 民主_NN 制度_NN 。_PU

      替換為:

      堅持 完善 社會主義 民主 制度 。

      在文本開頭添加指令<?xml version="1.0" encoding="GB2312"?>(XML支持多種語種,GB2312指簡體中文),添加文本開始標簽和結(jié)束標簽,以及等元數(shù)據(jù),XML文檔就替換完成了。

      四、結(jié)語

      以上探討了Perl語言輔助語料庫文本處理的兩種情況,這僅僅是Perl語言在語料庫應(yīng)用中發(fā)揮的少許作用,Perl語言的強大功能有待于進一步的探索??傊?,Perl是一種強大腳本語言,快捷實用,支持正則表達式,是處理字符串的一把好手。

      注釋:

      i ICTCLAS: Institute of Computing Technology, Chinese Lexical Analysis System中科院漢語詞法分析系統(tǒng)

      【參考文獻】

      [1] Conway, D. Perl Best Practices. OReilly公司編譯. Perl語言最佳實踐[M]. 南京:東南大學(xué)出版社, 2008.

      [2] Hoffman, P. Perl for Dummies(3rd edition). 楊皓譯. 輕松學(xué)用Perl[M]. 北京:電子工業(yè)出版社, 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]. 北京:電子工業(yè)出版社, 2001.

      [6] Thackeray , W. M. Vanity Fair. 楊必譯.名利場[M].北京:人民文學(xué)出版社, 1957.

      猜你喜歡
      字符串語料庫
      基于文本挖掘的語詞典研究
      《語料庫翻譯文體學(xué)》評介
      基于語料庫“隱秘”的詞類標注初步探究
      把課文的優(yōu)美表達存進語料庫
      基于JAVAEE的維吾爾中介語語料庫開發(fā)與實現(xiàn)
      語言與翻譯(2015年4期)2015-07-18 11:07:45
      一種新的基于對稱性的字符串相似性處理算法
      高效的top-k相似字符串查詢算法
      依據(jù)字符串匹配的中文分詞模型研究
      一種針對Java中字符串的內(nèi)存管理方案
      基于網(wǎng)絡(luò)語料庫的“給力”研究
      虎林市| 福建省| 揭东县| 正定县| 永康市| 麻栗坡县| 甘谷县| 布拖县| 离岛区| 嘉荫县| 正镶白旗| 永嘉县| 临武县| 疏附县| 怀来县| 郸城县| 简阳市| 敦煌市| 焉耆| 佛山市| 宁远县| 邵阳市| 桐乡市| 西畴县| 资中县| 勃利县| 巧家县| 象州县| 东乡族自治县| 安义县| 进贤县| 侯马市| 汝南县| 临潭县| 南和县| 绵竹市| 莱州市| 安丘市| 安达市| 东港市| 郯城县|