【问题标题】:Auto generate a summary from strings从字符串自动生成摘要
【发布时间】:2011-07-08 19:51:15
【问题描述】:

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

这是第一个版本的功能:

// 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 diam risus t§Cursus metus commod§Metus sapien porta§king 女王

这已经足够好了,但我确信它可以更优化。比如测试输出小于80个字母、修剪后的字符串末尾有空格、单词被截断等。

在我开始切线并自己动手之前,我想问问社区之前是否有人问过这个问题和/或是否已经存在用于此的算法。

【问题讨论】:

  • str_word_count 效果更好,尤其是您不想破坏 HTML 实体
  • @ajreal 不担心 HTML 实体。使用 str_word_count 你是说显示最常用的词是显示摘要的更好方式吗?
  • 不,如果要得到一个包含单词数的数组,你可以做一个循环来检查总共有多少个组合词长度不会超过一定的长度,如果超过,从位置/词向前

标签: php algorithm text-processing


【解决方案1】:

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

wordwrap 似乎不支持 utf8,但有一个 comment 显示 utf8_wordwrap 工作函数。

【讨论】:

  • 我们需要摘要包含所有输入字符串的一部分,而不仅仅是开头的字符串。
  • 不,你不明白我的意思。对于每个输入字符串,wordwrap 将返回格式化为每行某个最大宽度的字符串。如果某些输入字符串太长,它将以多行字符串的形式返回。你得到第一行,附加你的分隔符并丢弃其余的行。然后对每个其他输入字符串执行相同的操作。
  • 我现在明白了。感谢您的提示。
【解决方案2】:

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

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2020-10-14
    相关资源
    最近更新 更多