发信人: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(章鱼·相遇之后向前走),信区: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)); :...................
--
|
分享到:
相关推荐
一本关于Perl的入门级教程,循序渐进讲解如何用Perl进行程序设计
学习perl语言的可以作参考
24小时perl教程24小时perl教程24小时perl教程24小时perl教程24小时perl教程24小时perl教程
Perl5程序设计.rarPerl5程序设计.rar
本教程由perl爱好者翻译整理,原为web 文档形式,由 George Ye 收集整理,编辑成Word文档。 本文内容翔实、层次清晰、通俗易懂的PERL程序设计好教材,而且是free版本。
软件介绍 一本关于Perl5的入门级教程,循序渐进讲解如何用Perl5进行程序设计 Tags: Perl5程序设计(PDG)
一本很好perl 5学习书籍。 一本很好perl 5学习书籍。 一本很好perl 5学习书籍。 一本很好perl 5学习书籍。
此文档详细讲解Perl程序对C代码的调用,是对自己工作内容的一个总结,亲自操作,正确无误,欢迎下载。
perl下的Pdk模块编译perl程序的方法 生成EXE文件,而不再是一个单独的源代码文件的TXT格式
分享Perl Testing程序高手秘笈书籍,供大家学习、参考。
成语接龙的PERL程序IdionLink成语接龙的PERL程序IdionLink成语接龙的PERL程序IdionLink
Perl的解释程序是开放源码的免费软件,使用Perl不必担心费用。Perl能在绝大多数操作系统运行,可以方便地向不同操作系统迁移。 Perl 是一种能完成任务的语言。从一开始,Perl 就设计成可以把简单工作简单化,同时又...
统计分词数 perl程序 hash表取词 用贝叶斯算概率
利用PerlAPP可以将程序运行在HP/UX,LINUX,SOLARIS,WINDOWS等平台,可视化调试器可以远程调试,PerlNet可以编译NET部分。...为Perl程序员开发程序提供必不可少的工具,使得创建、构造程序变得容易,可以将perl程序
Perl的Email 发送程序与插件。pl 文件加 Mail:Sender插件,程序亲自测试是成功的!
很好的东西,可以让大家熟悉perl程序的基本语法,值得大家下载。
用perl程序编程 基于贝叶斯算概率(一元概率和二元概率)
Perl 5 程序设计 Perl 5 程序设计
perl脚本perl脚本perl脚本perl脚本
最新版的《Perl程序设计<第四版>》!Perl创始人唯一相关书籍!学习Perl编程语言必备! Programming Perl: Unmatched power for text processing and scripting By Tom Christiansen, brian d foy, Larry Wall, Jon ...