免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3531 | 回复: 19
打印 上一主题 下一主题

per l查找单词发音 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-09 10:52 |只看该作者 |倒序浏览
给定英文单词列表wordlist.txt。如下:
100
14th
1960s
2001
27
50
500000
6
8000
800000
a
able
about
abroad
access
accommodation
account
act
action
actually
affected
afford
在词典中找出词的发音输出到oov1.txt文件,没有的单词输出到oov.txt文件。词典如下:
a ah0
a ey1
able ey1 b ah0 l
about ah0 b aw1 t
abroad ah0 b r ao1 d
access ae1 k s eh2 s
accommodation ah0 k aa2 m ah0 d ey1 sh ah0 n
account ah0 k aw1 n t
act ae1 k t
action ae1 k sh ah0 n
actually ae1 k ch ah0 w ah0 l ih0
all ao1 l
allowed ah0 l aw1 d
also ao1 l s ow0
altitudes ae1 l t ih0 t uw2 d z
altitudes ae1 l t ih0 t uw2 z
am ae1 m
am ey1 eh1 m
america ah0 m eh1 r ah0 k ah0
america ah0 m eh1 r ih0 k ah0
我的程序如下:
  1. #!/usr/bin/perl
  2. my %hash;
  3. open Afile,"newdict.txt";
  4. open Bfile,"WordList.txt";
  5. open OOV,">oov.txt";
  6. open OOV1,">oov1.txt";
  7. while(<Afile>){
  8.         chomp;       
  9.         my @word=split /\s+/,$_,2;
  10.         $key=@word[0];
  11.         $hash{$key}=@word[1];
  12. }
  13. chomp (my @list=<Bfile>);
  14. foreach $kkk (@list){
  15.         if($hash{$kkk}){
  16.                 print OOV1 "$kkk =>$hash{$kkk}\n";
  17.         }
  18.         else{
  19.                 print OOV "$kkk\n";
  20.         }
  21. }
复制代码
请问各位大神,我的程序哪里出错了?谢谢啦

论坛徽章:
0
2 [报告]
发表于 2014-01-09 11:23 |只看该作者
本帖最后由 mingoing 于 2014-01-09 11:24 编辑

莫得人呢,都在抢票呢?,单词后面的一串是发音,我用split分开他们的。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
3 [报告]
发表于 2014-01-09 11:48 |只看该作者
  1. $key=@word[0];
  2. $hash{$key}=@word[1];
复制代码
  1. $key=$word[0];
  2. $hash{$key}=$word[1];
复制代码

论坛徽章:
0
4 [报告]
发表于 2014-01-09 12:10 |只看该作者
还是不行。。回复 3# mcshell


   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
5 [报告]
发表于 2014-01-09 12:31 |只看该作者
据说很难,我也就不试试了。

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
6 [报告]
发表于 2014-01-09 12:32 |只看该作者
本帖最后由 xiumu2280 于 2014-01-09 12:33 编辑

你的哈希键有重复啊,而且是出了什么问题,至少放个图什么的 回复 4# mingoing


   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2014-01-09 13:18 |只看该作者
要不你说一下你想得到怎样的oov.txt和oov1.txt?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2014-01-09 15:05 |只看该作者
回复 1# mingoing


    这代码风格也太惨不忍睹了点,哪学的?

论坛徽章:
6
卯兔
日期:2013-11-26 14:52:02丑牛
日期:2014-02-19 18:01:25卯兔
日期:2014-05-20 20:34:06白羊座
日期:2014-05-23 13:39:232015亚冠之大阪钢巴
日期:2015-08-07 20:57:582015亚冠之大阪钢巴
日期:2015-09-02 14:09:09
9 [报告]
发表于 2014-01-09 16:25 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open Afile,'<','newdict.txt';
  5. open LIST,'<','wordlist.txt';
  6. open OOV1,'>>','oov1.txt';
  7. open OOV,'>>','oov.txt';
  8. my %hash;
  9. while(<Afile>){
  10.     chomp and next if /^\s+$/;
  11.     my($a,$b)=split /\s+/,$_,2;
  12.    unless($hash{$a}){
  13.      $hash{$a}=[[$b]];
  14.     }else{
  15.     push @{$hash{$a}},[$b];
  16.          }
  17. }
  18. for my $t(<LIST>){
  19.     chomp($t);
  20.     if($hash{$t}){
  21.       print  OOV1 $t."\t".$_->[0] for @{$hash{$t}};
  22.     }else{
  23.         print OOV $t."\n";
  24.     }
  25. }
复制代码

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
10 [报告]
发表于 2014-01-09 18:14 |只看该作者
{:2_172:}
  1. #!/usr/bin/perl -w

  2. open Afile, 'newdict.txt';
  3. open Bfile, 'WordList.txt';
  4. open OOV,   '>', 'oov.txt';
  5. open OOV1,  '>', 'oov1.txt';
  6. my %newdict;

  7. while (<Afile>) {
  8.     my ( $key, $value ) = split;
  9.     push @{ $newdict{$key} }, $value;
  10. }

  11. while (<Bfile>) {
  12.     chomp;
  13.     my $key = $_;
  14.     $newdict{$key}
  15.       ? print OOV1 map { "$key\t=>\t$_\n" } @{ $newdict{$key} }
  16.       : print OOV "$_\n";
  17. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP