设为首页 收藏本站
查看: 1065|回复: 0

[经验分享] perl程序被网友狠批,呵呵,爽!

[复制链接]

尚未签到

发表于 2017-5-19 10:59:20 | 显示全部楼层 |阅读模式
发信人: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));
:...................



--

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-379030-1-1.html 上篇帖子: 如何 让Perl脚本同时只运行一个实例 下篇帖子: Perl正则表达式讲解,真的非常详细
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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