技術討論區 > 程式討論版

請教如何改寫perl程式,以加快執行速度

頁: (1/3) > >>

chienwen:

我最近在處理一些文字轉換的工作。
我用程式去檢查錯誤。程式碼如下

--- 代碼: ---package input ;

sub check_chinese_spell {
my $s = join( ", " , @_ ) ;
$s =~ s/\xB6\xD7\xB3\xF8/\xB7\x4A\xB3\xF8/g ; # 匯報 - 彙報
$s =~ s/\xB6\xD7\xBD\x73/\xB7\x4A\xBD\x73/g ; # 匯編 - 彙編
$s =~ s/\xB6\xD7\xA5\x5A/\xB7\x4A\xA5\x5A/g ; # 匯刊 - 彙刊
$s =~ s/\xB6\xD7\xB6\xB0/\xB7\x4A\xB6\xB0/g ; # 匯集 - 彙集
# ..... (有7000筆的比對項目)....
$s =~ s/\xB4\xE5\xA6\xE6/\xB9\x43\xA6\xE6/g ; # 游行 - 遊行
$s =~ s/\xB4\xE5\xBF\xB3/\xB9\x43\xBF\xB3/g ; # 游興 - 遊興
$s =~ s/\xB4\xE5\xBE\xC7/\xB9\x43\xBE\xC7/g ; # 游學 - 遊學
$s =~ s/\xAA\xED\xB5\xFD/\xAA\xED\xC3\xD2/g ; # 表証 - 表證
$s =~ s/\xBF\xEB\xB5\xFD/\xBF\xEB\xC3\xD2/g ; # 辨証 - 辨證
$s =~ s/\xC5\x47\xB5\xFD/\xC5\x47\xC3\xD2/g ; # 辯証 - 辯證

return $s ;
} ;

1 ;

--- 程式碼結尾 ---


程式碼約7000行 (7000個比對項目)
比對的資料約有 70萬筆。(每筆大約100個中文字)

在 PIII 1.6G, Ram 1.3G 的電腦下,須 6 個小時,程式才能跑完。
不知有沒有其他方法改寫程式,以加快執行速度?
謝謝您

Yamaka:

換一台配備好一點的如何  :roll:

chienwen:

perl 的精神之一: 就是一件事,不是只能用一種方法去做。
以這個指令來說:

--- 代碼: ---s///
--- 程式碼結尾 ---

平常比對個一萬次,一百萬次,一千萬次,都感覺不出它很慢。
可是當比對49億次時 (7,000 x 700,000) 卻要花六小時。
我想,perl 應該會有更有效率的方法,只是我不會而己。

至於,是否要為這個換一台電腦?
以我目前的環境而言,我這台電腦用於架個小型網站,應該是很足夠的,
我覺得最大的瓶頸,除了人腦以外,是在於頻寬的花費,
而不是 cpu 或 ram 上面。

至於那六個小時,當然是在我睡覺的時侯完成。

Yamaka:

唔~~
您堅持 Perl 的精神,
嗯...那當我沒說過~~  :o

PS:
如果是我要處理那些資料,
我會將資料做切割,
然後分散到幾台PC做處理...
唔~~ 當我沒 說  8)

asako:

你要不要先判斷行裡有無『匯』這個字,
有的話再判斷取代
沒有的話就跳過。
這樣每行的判斷應會少點,速度也應會快點

頁: (1/3) > >>

前往完整版本