自动从字符串生成摘要

时间:2011-03-04 13:14:36

标签: php algorithm text-processing

给定字符串的输入,我们需要通过将字符串的末尾修剪为给定的长度来生成一种非常简单的摘要形式。

这是第一个版本功能:

// Take an array of strings and generate a summary within a given length
function stringSummaryFromMetadata($inArray,$len=80,$sep='§'){

    // Filter out 'false' values
    $inputs=array_filter($inArray);

    // First try just imploding array
    $res=implode($sep,$inputs);

    // Check for length
    if(mb_strlen($res, 'utf8')>$len){

        // Calculate 'z' the fixed width constant
        $x=count($inputs);
        $z=round(($len-$x)/$x);

        // Snip all strings to 'z'
        $t1=array();
        foreach($inputs as $i) $t1[]=mb_substr($i,0,$z);

        // Final answer
        $res=implode($sep,$t1);
    }

    return $res;
}

测试:

$test=array(
    'Ligula diam risus tempus lorem sit',
    'Cursus metus commodo enim odio orci',
    'Metus sapien porta sapien fusce sodales',
    'king queen'
);
$out=stringSummaryFromMetadata($test);
print $out;

给出了:

  

Ligula diamrisust§Cursusmetus   商品MMetus sapien porta§king女王

这足够好,但它可以更加优化我确信这一点。例如,测试输出少于80个字母,修剪后字符串末尾的空格,单词被切断等等。

在我进行切线并自行滚动之前,我想询问社区之前是否已经提出此问题和/或是否已存在算法。

2 个答案:

答案 0 :(得分:2)

您可以使用wordwrap,然后计算结果字符串中的行数。如果多于一个,则文本比所需的长,所以将分隔符追加到第一行的末尾,并丢弃其他行。如果只有一行,则文本较短,因此不进行修剪。

似乎wordwrap无法识别,但有comment显示utf8_wordwrap工作函数。

答案 1 :(得分:2)

您还可以构建自动文本摘要算法,如文Extraction based summarization using a shortest path algorithm所述。这种方法实施起来并不是很难。

祝你好运!