【发布时间】: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