level 2
求助求助!!
老师要求用perl语言写点程序,可是我根本就不知道思路,特来求助!
要求是:随便输入一段话(不少于50个汉字),然后找出其中每个字出现的次数,其中次数出现10次以上的删掉(应该是去掉停用词之类的)。可以是分好的词,好像还要用到
hash函数,老师说这样才简单,要是有别的方法也谢谢。
我也是近三个月来在老师要求才开始学习perl的,所以简简单单的可以看懂,但是自己写的话就是有点困难了。
有劳各位大虾了!
2010年05月13日 11点05分
1
level 5
好吧,我争取明天之前给你吧,还有以后作业要自己做喔,哈哈,我也有事做的
2010年05月13日 12点05分
2
level 2
回复:2楼
谢谢楼主啊!我不是很着急,下礼拜才要交呢。可是我想在你写出来了之后我自己看看,这样才能提高自己嘛。
呵呵,谢谢楼主哦。真的很感谢你呢!
2010年05月13日 12点05分
3
level 5
#现在貌似不能处理汉字,程序写的也不是很好,有时间我再改下
$line="abcfajslijglsjfsijgishiislkjfskhfkljfasflkjcxnvlkjsnflsdkjflsnflskjfsflksjfsdlnflsijgnlvkjsalfknlsnflskjfsedeaa";
@line=split //,$line;
foreach(@line){$hash{$_}=0;}
foreach (keys %hash){
foreach $key (@line){
$r++ if /$key/;
}
$hash{$_}=$r;
$r=0;
}
print "字符统计表如下:\n";
foreach(keys %hash){
print " $_=>$hash{$_} \n";}
foreach(keys %hash){
delete($hash{$_}) if $hash{$_}>10;
}
print "删除出现频率在10次以上的字符后如下:\n";
foreach(keys %hash){
print " $_=>$hash{$_} \n";}
2010年05月13日 13点05分
4
level 5
汉字编码问题不好解决,下面这个程序可以处理utf8编码格式的汉字,至于gb码是否支持就没试过了
2010年05月13日 14点05分
5
level 5
use utf8;
local $SIG{__WARN__}=sub{};
$line="那一天闭目在经殿香雾中蓦然听见你颂经中的真言。那一月我摇动所有的转经筒,不为超度,只为触摸你的指尖。那一年磕长头匍匐在山路,不为觐见,只为贴着你的温暖。那一世转山转水转佛塔啊,不为修来生,只为途中与你相见。";
@line=split //,$line;
foreach(@line){$hash{$_}=0;}
foreach (keys %hash){
foreach $key (@line){
$r++ if /$key/;
}
$hash{$_}=$r;
$r=0;
}
print "字符统计表如下:\n";
foreach(keys %hash){
print " $_=>$hash{$_} \n";
}
foreach(keys %hash){
delete($hash{$_}) if $hash{$_}>10;
}
print "删除出现频率在10次以上的字符后如下:\n";
foreach(keys %hash){
print " $_=>$hash{$_} \n";
}
2010年05月13日 14点05分
6
level 5
楼主,如果你用的是windows系统的话,你要对cmd做个小修改
1.在cmd中输入 chcp 65001 好切换到UTF-8的代码页65001
2.修改窗口属性,改变字体
右键单机cmd窗口左上角的那个黑色图标,选择"属性"->"字体",将字体修改为True Type字体"Lucida Console",然后点击确定将属性应用到当前窗口。
好了,现在就可以了
2010年05月13日 15点05分
7
level 2
回复:7楼
版主真的很用心啊。呵呵,这些东西够我看一整天的了。谢谢您!
2010年05月13日 23点05分
8
level 2
老天,版主你太厉害了!我要一句一句的弄明白是什么意思。花费时间!不过这也不错啊。要是我自己写的话,估计要等好几年之后了。呵呵。
谢谢楼主的解答,以后要大力的支持您!!!3个月以来只看过贴,没有回过,以后我要经常过来逛!
2010年05月13日 23点05分
9
level 0
来个简单的
$a = 'asaapoiasdnkadnmkaionmqoqoqnadmaw';
@p = split //,$a;
print "@p\n";
foreach(@p){
$hash2->{$_} += 1;
}
foreach $word (keys %$hash2){
print "$word : $hash2->{$word}\n";
}
2010年05月25日 08点05分
10
level 13
楼上代码的错误我就不想说了,还好意思说别人悲剧=。=
2010年05月25日 09点05分
12
level 13
回6楼:你的代码我修改下,你看看合适不,
use utf8;
local $SIG{__WARN__}=sub{}; #这行我还没学到过,就不说啥了
$line="那一天闭目在经殿香雾中蓦然听见你颂经中的真言。那一月我摇动所有的转经筒,不为超度,只为触摸你的指尖。那一年磕长头匍匐在山路,不为觐见,只为贴着你的温暖。那一世转山转水转佛塔啊,不为修来生,只为途中与你相见。";
@line=split //,$line;
foreach (@line) { #foreach(@line){$hash{$_}=0;}
$hash{$_}++; #foreach (keys %hash){
} # foreach $key (@line){
# $r++ if /$key/;
# }
# $hash{$_}=$r;
# $r=0;
#}
print "字符统计表如下:\n";
foreach(keys %hash){
print " $_=>$hash{$_} \n";
}
foreach (@line) { #foreach(keys %hash){
print $_ if ($hash{$_} <= 10); #delete($hash{$_}) if $hash{$_}>10;
} # }
#print "删除出现频率在10次以上的字符后如下:\n";
#foreach(keys %hash){
# print " $_=>$hash{$_} \n";
# }
第一段记录次数,第二段打印字符次数,第三段按原文顺序输出并去掉应删除的字符,如果要保留到字符串中,就建一个字符串放进去。
2010年05月25日 09点05分
13