perl程序被网友狠批,呵呵,爽!

发信人:jiangfei(afei),信区:Perl
标题:特殊符号的匹配问题
发信站:水木社区(SunJun2611:07:122005),转信

我想把每个词后面的词性信息去掉(/xxx形式)词性信息中可能有各种各样非字字符
而且必须对应词性表去删除(词性表中有的词性信息才可删除)
我下面的程序先定义词性表,然后对文件中每句话匹配删除,
可是例子中的/prep$和/m(variable)无法正确匹配,请指教。。

#!
#输入:
1(5:5)规则/a->(1:1)RULES/A
1(2:2)壶/ng->(3:3)PLAY/NNP
2(2:5)壶/prep$之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/NNPPLAY/NNP
2(1:5)冰/m(variable)壶/ng之/usde竞赛/ng规则/ng->(1:3)RULES/NNPOF/NNPPLAY/NNP
#输出:
1(5:5)规则->(1:1)RULES
1(2:2)壶->(3:3)PLAY
2(2:5)壶之竞赛规则->(1:3)RULESOFPLAY
2(1:5)冰壶之竞赛规则->(1:3)RULESOFPLAY

openIN,"input.txt"ordie"cannotopenfile,$!\n";
openRESULT,">output.txt"ordie"cannotopen>out.txt,$!\n";

@all=<IN>;
my@pos_table;

#初始化@pos_table
@pos_table[0]='/a';
@pos_table[1]="/A";
@pos_table[2]="/prep$";
@pos_table[3]="/m(variable)";
@pos_table[4]="/NNP";
@pos_table[5]="/usde";
@pos_table[6]="/ng";
my$pos_num=7;

for(my$count=0;$count<@all;$count+=1)
{
my$str=@all[$count];

#$str=~s/\/[\S]+//g;#warning
for(my$i=0;$i<$pos_num;$i++)
{
$str=~s/$pos_table[$i]//g;
}

printRESULT$str;


}
print"warning:如果发现结果不正确,请用记事本程序打开源程序\n查看warning句后是否正确初始化所有词性\n";
print"按任意键结束\n";
$wait=<STDIN>;


--

※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*]

[本篇全文] [回复文章] [回信给作者] [本篇作者:rogerz] [进入讨论区] [返回顶部] 2
发信人:rogerz(章鱼·相遇之后向前走),信区:Perl
标题:Re:特殊符号的匹配问题
发信站:水木社区(SunJun2611:13:062005),转信

pos_table里的特殊字符得转义吧,/,$等等

【在jiangfei(afei)的大作中提到:】
:我想把每个词后面的词性信息去掉(/xxx形式)词性信息中可能有各种各样非字字符
:而且必须对应词性表去删除(词性表中有的词性信息才可删除)
:我下面的程序先定义词性表,然后对文件中每句话匹配删除,
:...................

--

╭───────────────┬──今夏的亮点
├☆十年岁月≮~~~≯╰╮
├☆辉煌水木╰╮十年水木纪念站衫
├★我们的bbs│
├★我们自己创造@@│欢迎访问T_shirt


※来源:·水木社区newsmth.net·[FROM:211.151.90.*]

[本篇全文] [回复文章] [回信给作者] [本篇作者:jiangfei] [进入讨论区] [返回顶部] 3
发信人:jiangfei(afei),信区:Perl
标题:Re:特殊符号的匹配问题
发信站:水木社区(SunJun2611:26:242005),转信

我转义试过了也不好时的
【在rogerz(章鱼·相遇之后向前走)的大作中提到:】
:pos_table里的特殊字符得转义吧,/,$等等



--

※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*]

[本篇全文] [回复文章] [回信给作者] [本篇作者:rogerz] [进入讨论区] [返回顶部] 4
发信人: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] [进入讨论区] [返回顶部] 5
发信人:jiangfei(afei),信区:Perl
标题:Re:特殊符号的匹配问题
发信站:水木社区(SunJun2612:24:532005),转信

非常感谢
!我现在试试
【在rogerz(章鱼·相遇之后向前走)的大作中提到:】
:()和$也要转义的,直接用quotemeta?
:#!/usr/bin/perl-w
:usestrict;
:...................



--

※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*]

[本篇全文] [回复文章] [回信给作者] [本篇作者:jiangfei] [进入讨论区] [返回顶部] 6
发信人: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] [进入讨论区] [返回顶部] 7
发信人: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] [进入讨论区] [返回顶部] 8
发信人: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] [进入讨论区] [返回顶部] 9
发信人: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] [进入讨论区] [返回顶部] 10
发信人: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] [进入讨论区] [返回顶部] 11
发信人: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] [进入讨论区] [返回顶部] 12
发信人: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] [进入讨论区] [返回顶部] 13
发信人: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] [进入讨论区] [返回顶部] 14
发信人:Andor(柠檬汁),信区:Perl
标题:Re:特殊符号的匹配问题
发信站:水木社区(SunJun2613:50:112005),转信

【在rogerz(章鱼·相遇之后向前走)的大作中提到:】
:这个肯定错了,应该是$all[$count];
:ps:
:我觉得你写的程序更像c语言……
呵呵,我觉得也不太像C。
C的话那里不会用“+=1”,也不会加“my$wait=”……

--

※来源:·水木社区newsmth.net·[FROM:143.89.144.*]

[本篇全文] [回复文章] [回信给作者] [本篇作者:jiangfei] [进入讨论区] [返回顶部] 15
发信人:jiangfei(afei),信区:Perl
标题:Re:特殊符号的匹配问题
发信站:水木社区(SunJun2615:09:152005),转信

以前一直这样用,呵呵!
痛改前非!
【在rogerz(章鱼·相遇之后向前走)的大作中提到:】
:这个肯定错了,应该是$all[$count];
:ps:
:我觉得你写的程序更像c语言……



--

※来源:·水木社区http://newsmth.net·[FROM:61.167.60.*]

[本篇全文] [回复文章] [回信给作者] [本篇作者:jiangfei] [进入讨论区] [返回顶部] 16
发信人: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));
:...................



--

你可能感兴趣的:(.net,perl,bbs)