Авто генерировать резюме из строк - PullRequest
4 голосов
/ 04 марта 2011

С учетом ввода строк нам нужно создать очень простую форму сводки, обрезав конец строк до заданной длины.

Вот первая версия функции:

// 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 товар §Metus sapien porta §king королева

Это достаточно хорошо, но это может быть гораздо более оптимальным, я уверен в этом. Например, результат теста составляет менее 80 букв, пробел в конце строки после обрезки, слова обрезаются и т. Д.

Прежде чем я уйду по касательной и сверну свою собственную, я хотел бы спросить сообщество, спрашивалось ли об этом раньше и / или существует ли уже алгоритм для этого.

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

Вы также можете построить алгоритм автоматического суммирования текста, как написано в статье Суммирование на основе извлечения с использованием алгоритма кратчайшего пути .Этот подход не очень сложен для реализации.

удачи!

2 голосов
/ 04 марта 2011

Вы можете использовать wordwrap и затем посчитать, сколько строк в результирующей строке.Если их больше одного, ваш текст был длиннее необходимого, поэтому вы добавляете разделитель в конец первой строки и удаляете другие строки.Если есть только одна строка, ваш текст был короче, поэтому обрезка не выполнялась.

Похоже, что wordwrap не знает utf8, но есть комментарий , который показывает utf8_wordwrapрабочая функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...