免费注册 查看新帖 |

Chinaunix

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

实现汉英双语翻译每句自动对齐 [复制链接]

论坛徽章:
0
发表于 2014-08-05 10:09 |显示全部楼层
本帖最后由 大山里出来的孩子 于 2014-08-14 17:21 编辑

求大神帮忙句自动对齐实现

论坛徽章:
0
发表于 2014-08-12 16:34 |显示全部楼层
加我qq 2296302715 ,我 把代码 和 文件发给你测试一下 ,谢谢 !:wink: 回复 55# pitonas


   

论坛徽章:
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
发表于 2014-08-12 16:30 |显示全部楼层
这非常复杂,
我需要很长的时间来思考下 ~ {:2_168:}

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


   

论坛徽章:
0
发表于 2014-08-12 16:23 |显示全部楼层
一句英文如下:
   Egypt's state media is also reporting the deaths of 23 Egyptians in the Libyan capital, Tripoli, after a rocket hit there home naer the airport,where deadly fighting between rival militias is entering a third week.
对应的中文翻译如下:
埃及国家电台也报道说,有23名埃及人在利比亚首都的里波里丧生,此前一枚火箭弹击中了这些埃及人在机场附近的住所。
当地对立民兵组织之间的激战已经进入了第三个星期。

CHECK: [ Egypt|s|state|media|is|also|reporting|the|deaths|of|23|Egyptians|in|the|Libyan|capital|Tripoli|after|a|rocket|hit|their|home|near|the|airport
|where|deadly|fighting|between|rival|militias|is|entering|a|third|week ] 让英文的每个单词在字典中找出对应的中文词语然后与下面的中文句子匹配

匹配情况:Egypt   埃及 = ok
state   状态|国家|州 = ok
media   电台|媒体 = ok
also    也 = ok
the     那|这 = ok
Egyptians       埃及人 = ok
the     那|这 = ok
capital 首都|资本 = ok
Tripoli 里波里 = ok
rocket  火箭 = ok
home    家|故乡|回家 = ok
the     那|这 = ok
airport 机场 = ok

只找到了airport那里,第一句中文就匹配完了,怎样让第二句中文和所where 及其以后的单词对应的中文词语进行匹配呢??

foreach my $w (@word) {      #@word里就是整个英语句子的单词
             
                  my $wi=lc($w);

            next unless exists $dic{$wi};  

            my $c = $dic{$wi};                       

            if ( $CH[$i] =~ /$c/ ) {            
                      
                      #say $CH[$i];

                say "$w\t$c = ok";               

                $ok++;

            }

后面该怎样写才能让第二句中文接着去匹配完 ??



回复 52# pitonas


   

论坛徽章:
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
发表于 2014-08-12 16:21 |显示全部楼层

我们爬下. 陡峭的斜坡 ( 2 句 )
1: 我们爬下
2: 陡峭的斜坡

不用“,”进行分割
We climbed down an abrupt descent
climbed OK
down OK
abrupt NO ( bad %dic or NOT 完成 )
decent NO ( bad %dic or NOT 完成 )


2 / 4 => 0.5
回复 51# 大山里出来的孩子


   

论坛徽章:
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
发表于 2014-08-12 16:01 |显示全部楼层
这个看不懂啊 ( upload a zip => c.txt, e.txt, code.pl, E-C-dic.txt )

输入的第一句中文与第一个小分句的英文匹配好了.
之后紧接着和第二句小英文匹配,
此时的中文没有进入下一句

我们爬下. 陡峭的斜坡 ( 2 句 )
1: 我们爬下
2: 陡峭的斜坡

We climbed down, an abrupt descent. ( 2 小分句 )

和第二句小英文匹配 => 为检查是否完成
if NOT => 也许 E:1 , C:2

1: 我们爬下
We climbed down ( check OK )
an abrupt descent ( check NOT OK => 还有一句 )

论坛徽章:
0
发表于 2014-08-12 15:42 |显示全部楼层

我现在讲英文的每句话(不用“,”进行分割),让每个单词对应的中文个句子进行匹配 ,怎样去解决 如果这句中文都匹配完了而英文句子还没完,怎样让下一句中文与该局继续匹配???



回复 47# pitonas


   

论坛徽章:
0
发表于 2014-08-12 10:21 |显示全部楼层
本帖最后由 大山里出来的孩子 于 2014-08-13 08:44 编辑

大神 ,我那你那个代码锚点匹配的地方改了改为这个:my $index =  [ 0..$#{$ws}] ; 对整句话进行锚点 ,打印后面的输出乱了 ,应该怎样去匹配和输出 ?? 求指点 ,谢谢:wink:



            next unless exists $dic{$wx};  

            my $c = $dic{$wx};                       

            if ( $CH[$i] =~ /$c/ ) {               
                      
                      #say $CH[$i];

                say "$w\t$c = ok";                  

                $ok++;
               
            }
            elsif($ok=0){
                   
                    $i++ ;
                   
                    }
            
        }
                  
                              
        }
        
       #unless( $ok >0) {           

            #say "FAIL !!\tcheck next sentence";      
            #goto NEXT;
            #$i++ ;        
       #sleep 1;

    #}
   





回复 30# pitonas


   

论坛徽章:
0
发表于 2014-08-11 09:27 |显示全部楼层
大神。谢谢你 ,我再好好想想 ,咱交个朋友吧 :wink: 回复 47# pitonas


   

论坛徽章:
0
发表于 2014-08-07 17:18 |显示全部楼层
大神,快出来把这个给我讲讲吧,结合上面的句子讲啊 ,拜托~~


for my $ws (@sentence) {

          my $index = $#{$ws} >= 3 ? [ 0, $#{$ws} / 2, -1 ] : [ 0, -1 ];

          my @word  = @$ws[@$index];
回复 33# pitonas


   

论坛徽章:
0
发表于 2014-08-07 16:33 |显示全部楼层
本帖最后由 大山里出来的孩子 于 2014-08-13 08:45 编辑

先帮我解释下这几句话:注释一下,这个看不懂啊
for my $ws (@sentence) {

         my $index = $#{$ws} >= 3 ? [ 0, $#{$ws} / 2, -1 ] : [ 0, -1 ];

      

回复 41# pitonas


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP