2012-05-08 4 views
6

Примера переменных $ текста:текста разделен на половину, но в ближайшее предложении

Lorem Ipsum моркови, усиленные скидках, но они делают время occaecat и жизнеспособность, такие как труд и ожирение. Ибо, как мы пришли к минит, который nostrud aliquip из нее преимущества упражнений, так что стимулирование усилия, если школьный округ и долговечность. DUIs cillum был cupidatat хочет быть боль в удовольствие от боли футбола в Бегите осуждаем не не платить. Excepteur cupidatat чернокожие не excepteur, успокаивающие для души, которые находятся в это вина тех, кто дезертировал офисы генерала из закусок.

расщепления пополам,

$half = strlen($text)/2;

получит меня к "O" символ в "фотографии".

1: Как найти расположение ближайшего предложения разделитель (точка) до половины текста? В данном примере это 7 символов после того, «о».

Кроме того, этот текст содержит HTML-код. 1 хотят игнорировать HTML при нахождении вне половинную точки текста, и игнорировать точки внутри атрибутов HTML и т.д.

+0

Очевидно, вы знаете, концептуально, что должно быть сделано. -Не видят проблем - то, что вы пробовали и почему он не работает? –

+1

Что делать, если следующая точка * не * конец предложения, например, пример дал? – alex

+0

@Alex, ооо злой. – JakeParis

ответ

3

Посмотрите на substr, strip_tags и strpos. С помощью strpos вы найдете позицию следующей точки и с strip_tags вы удалите все HTML-тег из обжига.

$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumt.'; 
$string = strip_tags($string); 
$half = intval(strlen($string)/2); 
echo substr($string, 0, strpos($string, '.', $half)+1); 

считают, что вы должны убедиться, что точка существует после значения $half или иначе выход не будет то, что вы хотите.

Может быть что-то вроде этого?

if (strpos($string, '.', $half) !== false) 
    echo substr($string, 0, strpos($string, '.', $half)+1); 
else 
    echo substr($string, 0, $half) . '...'; 
2

Если предположить, что предложение может заканчиваться за исключением периода символов, вы могли бы смотреть на это:

$s = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; 

// find center (rounded down) 
$mid = floor(strlen($s)/2); 
// find range of characters from center that are not ?, ! or . 
$r = strcspn($s, '.!?', $mid); 

// remember to include the punctuation character 
echo substr($s, 0, $mid + $r + 1); 

Вы, возможно, потребуется настроить его немного, но он должен сделать это работа хорошо. Для более продвинутых вещей вы ступая в НЛП (обработки естественного языка) территории, на которых имеются также библиотеки для PHP:

http://sourceforge.net/projects/nlp/

-2
function abbrevia($str, $maxChars) { $limit=$maxChars; 
    if (strlen($str)<=$maxChars) return $str; 
    else while ($str[$limit]!=" " && $str[$limit]!="." && $str[$limit]!=";" && $str[$limit]!="," && $str[$limit]!="!" && $str[$limit]) $limit++; 
    return substr($str,0,($limit))."..."; 
} 

Вы можете изменить эту функцию

Смежные вопросы