perl打印格式错误

perl打印格式错误,perl,Perl,我有一个perl代码段从输入文本生成解析树,但它生成了格式错误的解析树。我需要根据编号生成()和S括号 后缀、前缀和词干 代码> 预期产量> অগ্নিসংযোগসহ (S(S(অগ্নি:stem) (সংযোগ:suffix)) (সহ:suffix )) 它产生错误的输出。在生成的输出中,您可以看到许多错误,例如:() 如何生成预期格式的结果?我认为您错误地分割了原始行。我懂一点孟加拉语,但我不知道你正在处理的文件的语法 我认为这就像从源数据中提取所有以括号分隔的子字符串一样

我有一个
perl
代码段从输入文本生成解析树,但它生成了格式错误的解析树。我需要根据编号生成
S
括号 后缀、前缀和词干

代码>

预期产量>

অগ্নিসংযোগসহ      (S(S(অগ্নি:stem) (সংযোগ:suffix)) (সহ:suffix )) 
它产生错误的输出。在生成的输出中,您可以看到许多错误,例如:
()


如何生成预期格式的结果?

我认为您错误地分割了原始行。我懂一点孟加拉语,但我不知道你正在处理的文件的语法

我认为这就像从源数据中提取所有以括号分隔的子字符串一样简单,如下所示

use strict;
use warnings 'all';

use List::Util 'reduce';

while ( <> ) {

    my ($word, $ss) = / \( ( [^()]* ) \) /gx;

    my @ss = split ' ', $ss;

    my $str = reduce { sprintf 'S (%s) (%s)', $a, $b } @ss;

    printf "%s (%s)\n", $word, $str;
}

@卡鲁:好吧,但我的解决方案对你有用吗?它看起来很符合您的要求@Borodin当出现不匹配时,我这里有一些问题অক্টোবর (অক্টোবর), 举个例子,我只需要移除above@karu:这不是错配,这是身份证明。你的问题只要求翻译最后一行。你真的需要我陪你回家吗?如果你还有其他问题,请以新帖子的形式提交。编程不是从一个网站复制软件并将其发布到另一个网站上以进行更改。请自己做一些工作。我刚才提到代码无法捕获它。它没有mean@karu:啊,好的。你是说我的答案解决了你的问题吗?如果是的话,那么在评论中这样说会有帮助。你可以等一会儿——如果你愿意的话,等几天——看看是否会有更好的答案
অগ্নিসংযোগসহ      (S(S(অগ্নি:stem) (সংযোগ:suffix)) (সহ:suffix )) 
 (অংশ) ((অংশ))
    (অংশগ্রহণও) (S (S (S ((অংশ:stem) (গ্রহণ:suffix)) (ও:suffix)) ()))
    (অংশজুড়েই) (S (S (S ((অংশ:stem) (জুড়ে:suffix)) (ই:suffix)) ()))
    (অংশত্ব) (S (S ((অংশ:stem) (ত্ব:suffix)) ()))
    (অংশসহ) (S (S ((অংশ:stem) (সহ:suffix)) ()))
    (অংশীদারত্বে) (S (S (S (S (S ((অংশ:stem) (ী:suffix)) (দার:suffix)) (ত্ব:suffix)) (ে:suffix)) ()))
    (অকল্পনীয়) (S (S (S ((অ:prefix) (কল্প:suffix)) (নীয়:suffix)) ()))
    (অকাণ্ড) (S (S ((অ:prefix) (কাণ্ড:suffix)) ()))
    (অক্টোবর) ((অক্টোবর))
    (অক্টোবরে) (S (S ((অক্টোবর:stem) (ে:suffix)) ()))
    (অখাদ্যে) (S (S (S ((অ:prefix) (খাদ্য:suffix)) (ে:suffix)) ()))
    (অগণিত) (S (S ((অ:prefix) (গণিত:suffix)) ()))
use strict;
use warnings 'all';

use List::Util 'reduce';

while ( <> ) {

    my ($word, $ss) = / \( ( [^()]* ) \) /gx;

    my @ss = split ' ', $ss;

    my $str = reduce { sprintf 'S (%s) (%s)', $a, $b } @ss;

    printf "%s (%s)\n", $word, $str;
}