|
||
发信人:rogerz(章鱼·相遇之后向前走),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2611:13:062005),转信 pos_table里的特殊字符得转义吧,/,$等等 【在jiangfei(afei)的大作中提到:】 :我想把每个词后面的词性信息去掉(/xxx形式)词性信息中可能有各种各样非字字符 :而且必须对应词性表去删除(词性表中有的词性信息才可删除) :我下面的程序先定义词性表,然后对文件中每句话匹配删除, :................... -- ╭───────────────┬──今夏的亮点 ├☆十年岁月≮~~~≯╰╮ ├☆辉煌水木╰╮十年水木纪念站衫 ├★我们的bbs│ ├★我们自己创造@@│欢迎访问T_shirt ※来源:·水木社区newsmth.net·[FROM:211.151.90.*] |
|
||
发信人:jiangfei(afei),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2611:26:242005),转信 我转义试过了也不好时的 【在rogerz(章鱼·相遇之后向前走)的大作中提到:】 :pos_table里的特殊字符得转义吧,/,$等等 -- ※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*] |
|
||
发信人:rogerz(章鱼·相遇之后向前走),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2612:20:192005),转信 ()和$也要转义的,直接用quotemeta? #!/usr/bin/perl-w usestrict; my@pos_table=qw(/a/A/prep$/m(variable)/NNP/usde/ng); my$rule; { local$/=''; $rule=<>; } formy$pos(@pos_table){ $pos=quotemeta($pos); $rule=~s/$pos(?=|\n|$)//gs; } print$rule; 【在jiangfei(afei)的大作中提到:】 :我转义试过了也不好时的 -- ╭───────────────┬──今夏的亮点 ├☆十年岁月≮~~~≯╰╮ ├☆辉煌水木╰╮十年水木纪念站衫 ├★我们的bbs│ ├★我们自己创造@@│欢迎访问T_shirt ※修改:·rogerz于Jun2612:20:56修改本文·[FROM:211.151.90.*] ※来源:·水木社区newsmth.net·[FROM:211.151.90.*] |
|
||
发信人:jiangfei(afei),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2612:24:532005),转信 非常感谢 !我现在试试 【在rogerz(章鱼·相遇之后向前走)的大作中提到:】 :()和$也要转义的,直接用quotemeta? :#!/usr/bin/perl-w :usestrict; :................... -- ※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*] |
|
||
发信人:jiangfei(afei),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2612:35:312005),转信 sigh! 还是不work! hehe 【在rogerz(章鱼·相遇之后向前走)的大作中提到:】 :()和$也要转义的,直接用quotemeta? :#!/usr/bin/perl-w :usestrict; :................... -- ※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*] |
|
||
发信人:rogerz(章鱼·相遇之后向前走),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2612:38:112005),转信 ??,我这里没什么问题啊 ~$perltt.plinput.txt 1(5:5)规则->(1:1)RULES 1(2:2)壶->(3:3)PLAY 2(2:5)壶之竞赛规则->(1:3)RULESOFPLAY 2(1:5)冰壶之竞赛规则->(1:3)RULESOFPLAY 【在jiangfei(afei)的大作中提到:】 :sigh! :还是不work! :hehe :................... -- ╭───────────────┬──今夏的亮点 ├☆十年岁月≮~~~≯╰╮ ├☆辉煌水木╰╮十年水木纪念站衫 ├★我们的bbs│ ├★我们自己创造@@│欢迎访问T_shirt ※来源:·水木社区newsmth.net·[FROM:211.151.90.*] |
|
||
发信人:jiangfei(afei),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2612:45:462005),转信 帅气! 好使极了! 谢谢! 如何把输出文件也设为命令行输入形式呢? 俺这几句看不懂,羞.... my$rule; { local$/=''; $rule=<>; } 【在rogerz(章鱼·相遇之后向前走)的大作中提到:】 :??,我这里没什么问题啊 :~$perltt.plinput.txt :1(5:5)规则->(1:1)RULES :................... -- ※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*] |
|
||
发信人:GunFactory(Arsenal),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2612:51:582005),转信 读出整个文件阿 看看$/什么意思 【在jiangfei(afei)的大作中提到:】 帅气! 好使极了! 谢谢! 如何把输出文件也设为命令行输入形式呢? 俺这几句看不懂,羞.... my$rule; { local$/=''; $rule=<>; } 【在rogerz(章鱼·相遇之后向前走)的大作中提到:】 :??,我这里没什么问题啊 :~$perltt.plinput.txt :1(5:5)规则->(1:1)RULES :................... -- -- ※来源:·水木社区newsmth.net·[FROM:61.167.60.*] |
|
||
发信人:rogerz(章鱼·相遇之后向前走),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2612:53:502005),转信 【在jiangfei(afei)的大作中提到:】 :帅气! :好使极了! :谢谢! :如何把输出文件也设为命令行输入形式呢? :俺这几句看不懂,羞.... :my$rule; :{ :local$/=''; perldocperlvar 默认$/是\n,所以标量环境下只读入一行,undef之后就一次性读入文件全部内容了 命令行参数用@_访问 比如tt.plinput.txtoutput.txt 那么 ($in,$out)=@_; :$rule=<>; :} -- ╭───────────────┬──今夏的亮点 ├☆十年岁月≮~~~≯╰╮ ├☆辉煌水木╰╮十年水木纪念站衫 ├★我们的bbs│ ├★我们自己创造@@│欢迎访问T_shirt ※来源:·水木社区newsmth.net·[FROM:211.151.90.*] |
|
||
发信人:jiangfei(afei),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2612:57:162005),转信 但是,我把核心部分放在我程序中,却不好使,怪啊! 因为文件太大,所以不可能一次把文件读到一个量中 要一行一行处理,又应该如何改写呢? #!/usr/bin/perl-w #输入: #1(5:5)规则/ng->(1:1)RULES/NNP #1(2:2)壶/ng->(3:3)PLAY/NNP #2(2:5)壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/INPLAY/NNP #2(1:5)冰/ng壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/INPLAY/NNP #输出: #1(5:5)规则->(1:1)RULES #1(2:2)壶/ng->(3:3)PLAY #2(2:5)壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/INPLAY/NNP #2(1:5)冰/ng壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/INPLAY/NNP usestrict; openIN,"input.txt"ordie"cannotopenfile,$!\n"; openRESULT,">output.txt"ordie"cannotopen>out.txt,$!\n"; my@all=<IN>; my@pos_table=qw(/a/A/prep$/m(variable)/NNP/usde/ng); printjoin("\n",@pos_table); for(my$count=0;$count<@all;$count+=1) { my$str=@all[$count]; formy$pos(@pos_table){ $pos=quotemeta($pos); $str=~s/$pos(?=|\n|$)//gs; } printRESULT$str; } print"warning:如果发现结果不正确,请用记事本程序打开源程序\n查看warning句后是否正确初始化所有词性\n"; print"按任意键结束\n"; my$wait=<STDIN>; 【在rogerz(章鱼·相遇之后向前走)的大作中提到:】 :perldocperlvar :默认$/是\n,所以标量环境下只读入一行,undef之后就一次性读入文件全部内容了 :命令行参数用@_访问 :................... -- ※修改:·jiangfei於Jun2612:59:492005修改本文·[FROM:61.167.60.*] ※修改:·jiangfei於Jun2613:03:042005修改本文·[FROM:61.167.60.*] ※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*] |
|
||
发信人:rogerz(章鱼·相遇之后向前走),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2613:02:252005),转信 :my@all=<IN>; :my@pos_table=qw(/a/A/prep$/m(variable)/NNP/usde/ng); :printjoin("\n",@pos_table); :for(my$count=0;$count<@all;$count+=1) :{ :my$str=@all[$count]; 这个肯定错了,应该是$all[$count]; ps: 我觉得你写的程序更像c语言…… :formy$pos(@pos_table){ :$pos=quotemeta($pos); :$str=~s/$pos(?=|\n|$)//gs; :} :printRESULT$str; :} :print"warning:如果发现结果不正确,请用记事本程序打开源程序\n查看warning句后是否正确初始化所有词性\n"; :print"按任意键结束\n"; :my$wait=<STDIN>; -- ╭───────────────┬──今夏的亮点 ├☆十年岁月≮~~~≯╰╮ ├☆辉煌水木╰╮十年水木纪念站衫 ├★我们的bbs│ ├★我们自己创造@@│欢迎访问T_shirt ※来源:·水木社区newsmth.net·[FROM:211.151.90.*] |
|
||
发信人:Andor(柠檬汁),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2613:47:052005),转信 【在jiangfei(afei)的大作中提到:】 :但是,我把核心部分放在我程序中,却不好使,怪啊! :因为文件太大,所以不可能一次把文件读到一个量中 :要一行一行处理,又应该如何改写呢? :#!/usr/bin/perl-w :#输入: :#1(5:5)规则/ng->(1:1)RULES/NNP :#1(2:2)壶/ng->(3:3)PLAY/NNP :#2(2:5)壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/INPLAY/NNP :#2(1:5)冰/ng壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/INPLAY/NNP :#输出: :#1(5:5)规则->(1:1)RULES :#1(2:2)壶/ng->(3:3)PLAY :#2(2:5)壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/INPLAY/NNP :#2(1:5)冰/ng壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/INPLAY/NNP :usestrict; :openIN,"input.txt"ordie"cannotopenfile,$!\n"; :openRESULT,">output.txt"ordie"cannotopen>out.txt,$!\n"; :my@all=<IN>; close(IN); 不过不加也没什么影响。 :my@pos_table=qw(/a/A/prep$/m(variable)/NNP/usde/ng); my@pos_table=map(quotemeta,qw(/a/A/prep$/m(variable)/NNP/usde/ng)); #建议命名为@quoted_pos_table或@regex_pos_table:) :printjoin("\n",@pos_table); 调试还应该每次用的时候检查一下,看看有没有被改变什么的, 不能光检查一下初值就了事啊^_^ :for(my$count=0;$count<@all;$count+=1) :{ :my$str=@all[$count]; my$str=$all[$count]; 虽然不改也能得到同样结果,但是逻辑上有语义错误。 然后,以上两句(从for开始),以perl的风格,建议写成: foreachmy$str(@all) { :formy$pos(@pos_table){ :$pos=quotemeta($pos); 去掉上面这行。 修改$pos会影响@pos_table本身,虽然在只用一次时不影响结果, 但这个语义错误在多次使用时会导致结果不是你预期的。 :$str=~s/$pos(?=|\n|$)//gs; 这里不需要s参数,不过加了也没影响。 另外循环体应该缩进。 :} :printRESULT$str; :} close(RESULT); 不关闭输入文件也罢了,不关闭输出文件就……;) :print"warning:如果发现结果不正确,请用记事本程序打开源程序\n查看warning句后是否正确初始化所有词性\n"; :print"按任意键结束\n"; :my$wait=<STDIN>; 这里直接写<STDIN>;就行,另外前面一行提示应该是“回车键”而不是“任意键”吧? -- ※修改:·Andor于Jun2613:55:44修改本文·[FROM:143.89.144.*] ※来源:·水木社区newsmth.net·[FROM:143.89.144.*] |
|
||
发信人:Andor(柠檬汁),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2613:50:112005),转信 【在rogerz(章鱼·相遇之后向前走)的大作中提到:】 :这个肯定错了,应该是$all[$count]; :ps: :我觉得你写的程序更像c语言…… 呵呵,我觉得也不太像C。 C的话那里不会用“+=1”,也不会加“my$wait=”…… -- ※来源:·水木社区newsmth.net·[FROM:143.89.144.*] |
|
||
发信人:jiangfei(afei),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2615:09:152005),转信 以前一直这样用,呵呵! 痛改前非! 【在rogerz(章鱼·相遇之后向前走)的大作中提到:】 :这个肯定错了,应该是$all[$count]; :ps: :我觉得你写的程序更像c语言…… -- ※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*] |
|
||
发信人:jiangfei(afei),信区:Perl 标题:Re:特殊符号的匹配问题 发信站:水木社区(SunJun2615:10:052005),转信 看了Andor的回帖,我觉得真是痛快! 呵呵,谢谢指教。 【在Andor(柠檬汁)的大作中提到:】 :close(IN); :不过不加也没什么影响。 :my@pos_table=map(quotemeta,qw(/a/A/prep$/m(variable)/NNP/usde/ng)); :................... -- |