搜索
查看: 6531|回复: 16

【Panda姐-perl练习题1】统计文本中的每个单词出现次数并排序

[复制链接]

58

主题

103

帖子

756

积分

版主

Rank: 7Rank: 7Rank: 7

积分
756
QQ
发表于 2016-8-28 15:16:34 | 显示全部楼层 |阅读模式
本帖最后由 Panda姐 于 2016-8-30 19:09 编辑

用Perl语言写一段代码,计算出文本 1.txt 中有多少个单词(重复的也算),并按照 ascii码表顺序输出每个单词在文本中的频率。
要求如下格式化输出:
A                   =>         3
All                 =>         1
Books               =>         3
But                 =>         4
Companionship       =>         1
Darkness            =>         1
示例:example
代码记录:
[Perl] 纯文本查看 复制代码
#! usr/bin/perl
use strict;
my(@line,$line,@character,@words,$word,$count,%count);
open INPUT,"1.txt";
open OUTPUT,">result.txt";
@line=<INPUT>;
foreach $line(@line){
chomp($line);
$line=~s/\p{Punct}|“|”|‘//g;
@character=split /\s+/,$line;
push @words,@character;
}
foreach $word(@words){
$count{$word}+=1;
}
foreach $word(sort keys %count){
print OUTPUT "$word\t=>\t$count{$word}\n";
}


1.txt 和example文件见下方压缩包:






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:人类基因或转录本的长度分布特征如何?
下一篇:【Panda姐-perl练习题2】找出两条序列的最长共有序列
回复

使用道具 举报

11

主题

52

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2016-8-30 00:11:59 | 显示全部楼层
[Perl] 纯文本查看 复制代码
#! usr/bin/env perl
my $infile = "1.txt";
my $outfile = "result.txt";
open INPUT,$infile;
open OUTPUT,">$outfile";
local $/=undef;
my $words=<INPUT>;
map{$count{$_}++;} $words =~ /(\w+)/g;
for (sort keys(%count)){print OUTPUT "$_\t=>\t$count{$_}\n";}

只能减到这么少了。
回复 支持 3 反对 0

使用道具 举报

0

主题

14

帖子

227

积分

中级会员

Rank: 3Rank: 3

积分
227
发表于 2016-9-2 22:58:30 | 显示全部楼层
分享个python版的,欢迎相互交流~
[Python] 纯文本查看 复制代码
# coding=utf-8
import os
import string

os.chdir('C:/workspace/1')

fh = open('1.txt')

read_fh = fh.read().split()
fh.close()
x_dict = {}

for x in read_fh:
    #去掉,。等符号
    delset = string.punctuation
    x = x.translate(None,delset)
    x = x.lower()
    #去除句首中文单引号和双引号的影响
    if x[0].isalpha():
        pass
    else:
        x = x[3:]
    if x not in x_dict:
        x_dict[x] = 1
    else:
        x_dict[x] = x_dict[x]+1

a = sorted(x_dict.iteritems(),key=lambda b:b[0],reverse=False)
for y in a:
    print('%s \t => \t %s'%(y[0],y[1]))
回复 支持 1 反对 0

使用道具 举报

23

主题

62

帖子

484

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
484
发表于 2016-8-29 20:59:09 | 显示全部楼层
这个练习题针对的人群是啥?
回复 支持 反对

使用道具 举报

58

主题

103

帖子

756

积分

版主

Rank: 7Rank: 7Rank: 7

积分
756
QQ
 楼主| 发表于 2016-8-29 21:36:25 | 显示全部楼层
果子 发表于 2016-8-29 20:59
这个练习题针对的人群是啥?

刚看完小骆驼的perl初学者
回复 支持 反对

使用道具 举报

7

主题

34

帖子

216

积分

中级会员

Rank: 3Rank: 3

积分
216
发表于 2016-9-2 22:15:36 | 显示全部楼层
虽然以前学过perl,但是panda姐你分享的题目依然对我产生了蛮大的帮助, 我是 panda弟,哈哈,我俩头像是同一物种
欢迎关注https://www.jianshu.com/u/4f5e357a6212
回复 支持 反对

使用道具 举报

11

主题

54

帖子

242

积分

中级会员

Rank: 3Rank: 3

积分
242
QQ
发表于 2016-10-8 20:00:21 | 显示全部楼层
楼主,谢谢!
这里不懂:
$line=~s/\p{Punct}|“|”|‘//g;
能解释下这个替换吗?
谢谢啦!
苛求远离完美
回复 支持 反对

使用道具 举报

11

主题

54

帖子

242

积分

中级会员

Rank: 3Rank: 3

积分
242
QQ
发表于 2016-10-8 20:18:14 | 显示全部楼层
dongye 发表于 2016-8-30 00:11
[mw_shl_code=perl,true]#! usr/bin/env perl
my $infile = "1.txt";
my $outfile = ">result.txt";

赞一个,好厉害!学习了!
苛求远离完美
回复 支持 反对

使用道具 举报

0

主题

20

帖子

287

积分

中级会员

Rank: 3Rank: 3

积分
287
发表于 2016-10-10 10:21:36 | 显示全部楼层
dongye 发表于 2016-8-30 00:11
[mw_shl_code=perl,true]#! usr/bin/env perl
my $infile = "1.txt";
my $outfile = ">result.txt";

多了个大于号,我觉得不用追加更好
回复 支持 反对

使用道具 举报

11

主题

52

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2016-10-11 11:46:38 | 显示全部楼层
jasonxu 发表于 2016-10-10 10:21
多了个大于号,我觉得不用追加更好

是的,写的有误,已经去掉
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2019-6-16 19:46 , Processed in 0.036003 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.