Chinaunix

标题: 数组嵌套问题, 求大神帮忙,急 [打印本页]

作者: TrishaTie    时间: 2016-12-07 23:44
标题: 数组嵌套问题, 求大神帮忙,急
6f41f212-e96e-11e2-b0af-001517a36ca5: HEY h ey HEY hh ey
0d77a328-e427-11e2-b0af-001517a36ca5: ALLMAN aa l m ax n ALLMAN ao l m ax n
65defa18-e5de-11e2-a387-001517a3798d: OF ah v OF ax v; YOUR y ao r YOUR y ax r
39cbd594-e57e-11e2-87b7-001517a331f1: FOR f ax r FOR f ao r
b92e5823-ea7f-11e2-b869-001517a36ded: WHO h uw WHO hh uw
8eb46f0a-e9b5-11e2-a387-001517a3798d: WI d ah b ax l y uw ay WI w ay
eb993574-e9d3-11e2-b869-001517a36ded: WHAT w aa t WHAT w ah t; YEARS y ih r z YEARS y iy r z; WERE w er r WERE w ax r; THE dh ax THE dh ah; HOLOCAUST h aa l ah k ao s t HOLOCAUST hh aa l ax k ao s t
68c77618-e7ed-11e2-b0af-001517a36ca5: HUT h ah t HUT hh ah t; TEXAS t eh k s ax s TEXAS t eh k s ih s
dedf0820-e808-11e2-b0af-001517a36ca5: THE dh ax THE dh iy; OF ah v OF ax v; THE dh ax THE dh ah; WHAT w aa t WHAT hh w ah t


如上面的文件,格式为 ID: file1_word1 \t phone1 \t file2_word1 \t phone2;\s file1_word2 \t phone1 \t file2_word2 \t phone2,  phone 里面是用空格隔开。

想找出 满足条件的 utt ID, 条件为 每个分号间的两个单词的 phone 的个数是一样, 比如 第一条,h ey  = hh ey , 则第一个满足条件,
最后一个 w aa t  <  hh w ah t, 则最后一条 不满足条件。


我写的代码,老是循环不对,哈希里面多了一部分不满足条件的, 求改正。

my %samephCountUtt_hash;
my @diffphCountUtts;

foreach my $dtline(@dtLines)
{
chomp($dtline);
my ($uttID, $otherstr)=split/:\t+/, $dtline;
my @wdphCPs=split/\;/, $otherstr;

foreach my $wdphCP(@wdphCPs)
{
  my @parts=split/\t+/,$wdphCP;
  my @ttsPhones=split/\s+/, $parts[1];
  my @srPhones=split/\s+/, $parts[3];
  
  unless ($#ttsPhones eq $#srPhones)
  {
   $diffcount++;
   push @diffphCountUtts, $dtline;
   last;
  }
  $samephCountUtt_hash{$uttID}=$otherstr;
}

}

作者: sunzhiguolu    时间: 2016-12-08 13:41
本帖最后由 sunzhiguolu 于 2016-12-08 13:42 编辑

有些地方不是很明白, 请解释下, 如下面这条:
65defa18-e5de-11e2-a387-001517a3798d: OF ah v OF ax v; YOUR y ao r YOUR y ax r
带有背景色的是否为 phone 部分? 如果是的话, 那么这条记录是否满足条件? 请给出比较依据。

如果方便的话, 给出示例数据的预期结果.

作者: 104359176    时间: 2016-12-11 22:56
phone 是什么东西?电话,电话号码?
作者: TrishaTie    时间: 2017-02-24 18:33
回复 3# 104359176

Sorry, 回复晚了, 在这里是发音的意思。

作者: TrishaTie    时间: 2017-02-24 18:39
回复 2# sunzhiguolu


哦, 不好意思,下面的结构就是: 标蓝的就是单词, 标绿的就是发音, 标黄的为句子ID。  表示这条句子里面有两个单词: OF YOUR, 但是每个单词有两个发音做为对比。

65defa18-e5de-11e2-a387-001517a3798d: OF ah v OF ax v; YOUR y ao r YOUR y ax r


作者: sunzhiguolu    时间: 2017-02-24 18:52
回复 5# TrishaTie
能否将你的要求具体说下,希望得到一个怎样的结果?


作者: sunzhiguolu    时间: 2017-02-24 18:55
你回帖的时间间隔可够长的啊,哈哈哈。
作者: rubyish    时间: 2017-02-24 23:21
maybe
  1. 6f41f212-e96e-11e2-b0af-001517a36ca5
  2. 0d77a328-e427-11e2-b0af-001517a36ca5
  3. 65defa18-e5de-11e2-a387-001517a3798d
  4. 39cbd594-e57e-11e2-87b7-001517a331f1
  5. b92e5823-ea7f-11e2-b869-001517a36ded
  6. eb993574-e9d3-11e2-b869-001517a36ded
  7. 68c77618-e7ed-11e2-b0af-001517a36ca5
复制代码


perl abc.pl > OK
  1. #!/usr/bin/perl
  2. use 5.010;

  3. while (<DATA>) {
  4.     my ( $id, $words ) = split ':';
  5.     my @word = split ';', $words;
  6.     my $OK = 1;
  7.     for (@word) {
  8.         my ( undef, $A, $B ) = split /\s*[A-Z]+\s*/;
  9.         my $X = split /\s+/, $A;
  10.         my $Y = split /\s+/, $B;
  11.         $OK--, last if $X != $Y;
  12.     }
  13.     say $id if $OK;
  14.     # or print line if ok
  15.     # print if $OK;
  16. }

  17. __DATA__
  18. 6f41f212-e96e-11e2-b0af-001517a36ca5: HEY h ey HEY hh ey
  19. 0d77a328-e427-11e2-b0af-001517a36ca5: ALLMAN aa l m ax n ALLMAN ao l m ax n
  20. 65defa18-e5de-11e2-a387-001517a3798d: OF ah v OF ax v; YOUR y ao r YOUR y ax r
  21. 39cbd594-e57e-11e2-87b7-001517a331f1: FOR f ax r FOR f ao r
  22. b92e5823-ea7f-11e2-b869-001517a36ded: WHO h uw WHO hh uw
  23. 8eb46f0a-e9b5-11e2-a387-001517a3798d: WI d ah b ax l y uw ay WI w ay
  24. eb993574-e9d3-11e2-b869-001517a36ded: WHAT w aa t WHAT w ah t; YEARS y ih r z YEARS y iy r z; WERE w er r WERE w ax r; THE dh ax THE dh ah; HOLOCAUST h aa l ah k ao s t HOLOCAUST hh aa l ax k ao s t
  25. 68c77618-e7ed-11e2-b0af-001517a36ca5: HUT h ah t HUT hh ah t; TEXAS t eh k s ax s TEXAS t eh k s ih s
  26. dedf0820-e808-11e2-b0af-001517a36ca5: THE dh ax THE dh iy; OF ah v OF ax v; THE dh ax THE dh ah; WHAT w aa t WHAT hh w ah t
复制代码

作者: jason680    时间: 2017-02-25 10:56
回复 7# sunzhiguolu

再等二个月...
作者: sunzhiguolu    时间: 2017-02-26 13:51
本帖最后由 sunzhiguolu 于 2017-02-26 13:54 编辑

回复 9# jason680
我先学习一下 8 楼大神的代码,不等楼主回复了。我的理解能力有限,不知到大神您老人家是否理解了。



作者: TrishaTie    时间: 2017-03-16 11:29
回复 8# rubyish

学习了大神,多谢!

作者: TrishaTie    时间: 2017-03-16 11:41
回复 6# sunzhiguolu

哈哈 没到2月我就来了。
最终结果是要输出  句子ID,满足条件为 这个句子的  每个单词对应的发音长度要完全一样,比如 OF 发音: ah v  =  ax v 长度一致, 并且 YOUR也是, 那这一条就是满足条件的句子, 输出ID就可以了。


65defa18-e5de-11e2-a387-001517a3798d: OF ah v OF ax v; YOUR y ao r YOUR y ax r


作者: sohusina    时间: 2017-03-16 13:59
my ($uttID, $otherstr)=split/:\t+/, $dtline;
这儿的\t+是不是可以去掉?




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