免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 42673 | 回复: 7

读取一篇英文文章将所有的单词设定为键然后赋值为1创建哈希表 [复制链接]

论坛徽章:
0
发表于 2016-08-04 17:28 |显示全部楼层
刚开始的思路是:
将整个文件读取,然后按照空格切割后保存于数组中,然后遍历数组创建哈希表。但是如果文章很长,并且有多个文章的话,
先保存数组有点不太妥,效率太低,请问如何改进,使得当读入文件的时候不创建临时数组直接创建哈希表呢?
text_in:
The U.N. Food and Agriculture Organization says it has less than half the funding it needs to help ensure food security in parts of South Sudan.
.......
(太多先不贴出来了,假设文本很规范)

创建如下的哈希表%Words:
(
    The => 1,
    U.N. => 1,
    Food => 1,
    ...
)

我之前的想法是:
my $content;

{
        local $/= undef;
  $content = <$IN1>;
        close($IN1);
        #print "$content\n";
}

my @words1 = split /\s/,$content;
my %Words1 = map{$_ => 1} @words1;

可不可以不用临时的数组呢,直接创建哈希表,那样会不会更快呢?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-08-04 18:34 |显示全部楼层
  1. perl -anle '{$h{$_}++ for @F}END{$,=",";print keys %h}' f
复制代码

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2016-08-04 22:06 |显示全部楼层
use local is easy to slurp all text to a string. not related with speed.

If you want more rapid, use array and uniq it.

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2016-08-04 23:20 |显示全部楼层
本帖最后由 jason680 于 2016-08-05 11:02 编辑

回复 1# 大山里出来的孩子

$ perl words.pl text_in
the half ensure of needs has Sudan. Food Agriculture to funding less in help says Organization it South than U.N. food parts security and The


$ cat words.pl
use strict;
use warnings;

my %hWord;

while(<>){
  chomp;
  $hWord{$_}=1 for(split);
}
print join(" ",keys %hWord),"\n";

   

论坛徽章:
0
发表于 2016-08-04 23:22 |显示全部楼层
回复 2# sunzhiguolu


    膜拜大神的单行代码!!!

论坛徽章:
0
发表于 2016-08-05 09:33 |显示全部楼层
感谢大神,我试试看

回复 4# jason680


   

论坛徽章:
0
发表于 2016-08-05 09:35 |显示全部楼层
大神还是用了数组啊

回复 2# sunzhiguolu


   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-08-05 12:32 |显示全部楼层
有一些东西你没有看见, 但并不表示它不存在.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP