[perl]如何用哈希表进行词频统计

haibo1979 2005-01-02 03:47:41
比如一个文档:

中国 百姓 中国
百姓 人民 中国

该文档的词频:中国3,百姓2,人民1

我考虑用哈希表来做,比如将“中国”作为哈希表的一个"key",重复次数作为"value".
不过不知道怎么具体实现,哪位大侠抽时间帮忙解答一下?
有其他好的方法实现也行。刚学PERL,实在没有头绪。
...全文
445 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyzxyz1111 2005-03-24
  • 打赏
  • 举报
回复
把[\x80-\xff]+/gi
改为[\x80-\xff]{2,2}/gi才能正确的统计汉字的词频。

--------------------------
统计的是词频,不是汉字的字频,所以无所谓了。
fibbery 2005-03-24
  • 打赏
  • 举报
回复
%d=();是初始化一个空的哈希变量,不是引用!
()是空列表,它既可以初始化数组也可以初始化哈希变量。
chenshibing 2005-03-24
  • 打赏
  • 举报
回复
把[\x80-\xff]+/gi
改为[\x80-\xff]{2,2}/gi才能正确的统计汉字的词频。
请楼上的指教下%d = ();是什么意思?指向hash表的引用?指向数组的引用?还是创建一个空的hash表
?能否顺便指教下@self = {};是什么意思
genepoet 2005-01-26
  • 打赏
  • 举报
回复
[\x80-\xff]+/gi
指的是匹配汉字,
因为汉字是双字节编码的,所以字节首位为1的代表是汉字
zrpxd 2005-01-19
  • 打赏
  • 举报
回复
不好意思,能不能问一下上面的([\x80-\xff]+/gi)是什么意思啊
haibo1979 2005-01-05
  • 打赏
  • 举报
回复
用哈希表进行词频统计,真的是比用循环嵌套快得多,呵呵,perl真是好阿(可惜我还是个生手),
谢谢“如是我闻”先生!!

xyzxyz1111 2005-01-03
  • 打赏
  • 举报
回复
#!/usr/bin/perl

open (FILE, shift) || die "Words file not specified\n";
%d = ();
while(<FILE>){
if (@uc = $_ =~/[\x80-\xff]+/gi)
{
foreach $a(@uc){
$d{$a} += 1;
}
}
}
foreach (keys %d){
printf "%s:%d\n", $_, $d{$_};
}

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧