LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1107|回复: 3

幫我看看這個perl程式究竟什麼地方出錯了

[复制链接]
发表于 2006-4-17 14:43:31 | 显示全部楼层 |阅读模式
為了去除詞庫文件中的重複詞條,我寫了下面這個名為「only.pl」的perl程式:

  1. $file1 = "e:\大詞庫.txt";
  2. $file2 = "e:\處理過的大詞庫.txt";
  3. open (FILE1, "$file1") || die "讀唔倒文檔 $file1";
  4. open (FILE2, ">$file2") || die "創建唔倒文檔 $file2";
  5. select FILE2;
  6. $new="";
  7. while ($line=<FILE1>)
  8. {
  9.         chomp $line;
  10.         if ($new =~ /$line/s){
  11.                 ;
  12.         }
  13.         else{
  14.         $new = "$new"."\n"."$line";
  15.         }
  16. }
  17. print $new;
  18. close FILE1;
  19. close FILE2;
复制代码


試驗下邊格式的文檔:

  1. 狼心
  2. 狼烟
  3. 狼崽
  4. 莨绸
  5. 狼心
  6. 莨苕
  7. 廊道
  8. 狼心
  9. 廊坊
  10. 廊庙
  11. 廊台
  12. 莨苕
  13. 廊道
  14. 狼心
  15. 廊坊
  16. 廊庙
  17. 莨苕
  18. 廊道
  19. 狼心
  20. 廊坊
  21. 廊庙
复制代码

可以成功得到預期結果:

  1. 狼心
  2. 狼烟
  3. 狼崽
  4. 莨绸
  5. 莨苕
  6. 廊道
  7. 廊坊
  8. 廊庙
  9. 廊台
复制代码


但是當我用它處理一個非常大的內含重複詞條的詞庫文檔(格式同上),運行十多分鐘後,出現錯誤:
/琅玕/: trailing \ in regexp at only.pl line 13; <FILE1> line 338442.
程式退出。

真是奇怪,不知道是什麼原因,誰能幫幫我找找原因?

待處理的非常大的內含重複詞條的詞庫文檔放在這裏:
http://free.ys168.com/?sxgpic
「詞條處理」目錄下「待去除相同詞條的合併大詞庫.rar」即是。
发表于 2006-4-18 01:01:07 | 显示全部楼层
perl 我也是新手 ,不知道怎么解决, 不过你那个可以用shell 来解决的

你的意思是不是要去除掉文件里重复的行.

如果 是的话 , 可以用 sort -u 来解决 !
#!/usr/bin/perl -w

use strict;

print `cat test.txt|sort -u`;


你那个待处理的 我下载了 试了下 , 应该是没问题的 , 速度也比较快 ,

没整理之前的大詞庫.txt   是618629 条  , 整理过之后是442259  , 大致的看了下,没重复的,应该符合要求
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-18 13:09:49 | 显示全部楼层
我寫了另一個程式,解決了問題。利用哈希,處理速度很快。
如果改一下還可以統計出每一個詞重複的次數。
  1. $file1 = "大詞庫.txt";
  2. $file2 = "處理過的大詞庫.txt";
  3. open (FILE1, "$file1") || die "讀唔倒文檔 $file1";
  4. open (FILE2, ">$file2") || die "創建唔倒文檔 $file2";
  5. select FILE2;
  6. while ($line=<FILE1>)
  7. {
  8.         chomp $line;
  9.         $wordlist{$line}+=1;
  10. }
  11. @mygod = keys (%wordlist);
  12. foreach $word (@mygod){
  13.         print "$word\n";
  14. }
  15. close FILE1;
  16. close FILE2;
复制代码

不過我先前寫的那個程式也應該沒有問題啊,就是奇怪啦。
回复 支持 反对

使用道具 举报

发表于 2006-4-25 08:09:20 | 显示全部楼层
我没有找到你的词库,不过,问题应该是出在你直接使用$line进行内插,试试看改成qr($line),应该可以解决!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表