Chinaunix

标题: per l查找单词发音 [打印本页]

作者: mingoing    时间: 2014-01-09 10:52
标题: per l查找单词发音
给定英文单词列表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. }
复制代码
请问各位大神,我的程序哪里出错了?谢谢啦
作者: mingoing    时间: 2014-01-09 11:23
本帖最后由 mingoing 于 2014-01-09 11:24 编辑

莫得人呢,都在抢票呢?,单词后面的一串是发音,我用split分开他们的。
作者: mcshell    时间: 2014-01-09 11:48
  1. $key=@word[0];
  2. $hash{$key}=@word[1];
复制代码
  1. $key=$word[0];
  2. $hash{$key}=$word[1];
复制代码

作者: mingoing    时间: 2014-01-09 12:10
还是不行。。回复 3# mcshell


   
作者: pitonas    时间: 2014-01-09 12:31
据说很难,我也就不试试了。

作者: xiumu2280    时间: 2014-01-09 12:32
本帖最后由 xiumu2280 于 2014-01-09 12:33 编辑

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


   
作者: yestreenstars    时间: 2014-01-09 13:18
要不你说一下你想得到怎样的oov.txt和oov1.txt?
作者: MMMIX    时间: 2014-01-09 15:05
回复 1# mingoing


    这代码风格也太惨不忍睹了点,哪学的?
作者: 只是一个红薯    时间: 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. }
复制代码

作者: pitonas    时间: 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. }

复制代码

作者: mingoing    时间: 2014-01-10 08:41
自学中。。回复 8# MMMIX


   
作者: MMMIX    时间: 2014-01-10 09:07
mingoing 发表于 2014-01-10 08:41
自学中。。回复 8# MMMIX


多找点好书看看吧,Learning Perl, Perl Best Practices,都不错,可以顺着看,然后多模仿模仿人家好的风格。
作者: mingoing    时间: 2014-01-10 09:42
谢谢啦回复 9# 只是一个红薯


   
作者: mingoing    时间: 2014-01-10 09:42
谢谢啦回复 10# pitonas


   
作者: qidunhu    时间: 2014-01-10 13:35
目测是看的《perl实例精解》
回复 12# MMMIX


   
作者: MMMIX    时间: 2014-01-10 16:23
qidunhu 发表于 2014-01-10 13:35
目测是看的《perl实例精解》
回复 12# MMMIX

看楼主的用法,应该是看的比较老的版本(不知道是否有更新的版本),不过学成这样也是读者的问题。

像 Perl 这种变化快速的语言,要看书就要看最新版本的,同时要结合它的在线文档。
作者: mingoing    时间: 2014-01-10 16:26
我看的perl语言入门(第四版),结合第六版看的回复 16# MMMIX


   
作者: MMMIX    时间: 2014-01-10 16:37
mingoing 发表于 2014-01-10 16:26
我看的perl语言入门(第四版),结合第六版看的回复 16# MMMIX


有新版的就不要看老版的了。那书不错,也是我用来入门的,可你这代码风格也太野生了点……
作者: mingoing    时间: 2014-01-10 16:43
刚学不到两周,有待加强 回复 18# MMMIX


   
作者: mingoing    时间: 2014-01-10 16:45
我新发的帖子中有我编的程序,多多指点啊 回复 18# MMMIX


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2