Php 从字符串自动生成摘要

Php 从字符串自动生成摘要,php,algorithm,text-processing,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_filte

给定一个字符串输入,我们需要生成一个非常简单的摘要形式,方法是将字符串的末尾修剪为给定的长度

以下是第一版函数:

// 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;
其中:

小径舌苔 国王女王

这已经足够好了,但我相信它会更完美。例如,测试输出少于80个字母,修剪后的字符串末尾有空格,单词被切碎,等等

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

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


似乎
wordwrap
不支持utf8,但有一个显示
utf8\u wordwrap
工作功能的函数。

您还可以按照论文中所述构造自动文本摘要算法。这种方法并不难实现


祝你好运

str\u word\u count
效果更好,尤其是您不想破坏HTMLentities@ajreal不用担心HTML实体。使用str_word_count,您是说显示最频繁的单词是显示摘要的更好方法吗?不,如果要获得包含单词数的数组,您可以循环检查组合单词长度的总数是否不会超过特定长度,如果超过,从位置/单词开始排除我们需要摘要包含所有输入字符串的一部分,而不仅仅是开头的字符串。不,你不明白我的意思。对于每个输入字符串,
wordwrap
将返回格式化为每行某个最大宽度的字符串。如果某个输入字符串太长,它将以多行字符串的形式返回。得到第一行,附加分隔符并丢弃其余行。然后对其他输入字符串执行相同的操作。我现在明白了。谢谢你的提示。