Я ищу помощь, чтобы сделать этот код более точным. Для любого заданного текста ($ my_block_of_text) сценарий ниже разбивает содержимое на предложения, основываясь на том, где заполняются стоп-стопы, восклицательные знаки и аналогичные знаки препинания в конце предложения.Использование регулярных выражений для создания массивов предложений из текстового содержимого
$parts = preg_split('/([.?!:\]])/', $my_block_of_text, -1, PREG_SPLIT_DELIM_CAPTURE);
$sentences = array();
for ($i=0, $n=count($parts)-1; $i<$n; $i+=2) {
$sentences[] = $parts[$i].$parts[$i+1];
}
if ($parts[$n] != '') {
$sentences[] = $parts[$n];
}
Проблема с этим кодом однако, является то, что регулярное выражение используется в функции preg_split не принимать во внимание случаи г-жи мисс. Г-жа Как исключение может быть добавлен к регулярное выражение, чтобы избежать этих случаев?
Спасибо.
Есть бесконечное количество сокращений, где вы не хотите, чтобы разбить содержимое. Нет простого решения. То, что мы, люди, можем сделать с легкостью, может быть очень сложно зафиксировать в алгоритме. –
Вы посмотрели http://stackoverflow.com/questions/16377437/split-a-text-into-sentences? он не решает проблему вашего г-на и миссис, но ее как можно ближе. Существует также расширенное решение: http://stackoverflow.com/questions/5032210/php-sentence-boundaries-detection – Marc
То, что я лично делаю в этом случае, заменяет подстроки проблемы заменой. Например, вы можете заменить г-на = MR =. Тогда ваше preg_replace будет работать. Когда вы закончите, вы отмените замену, заменив = MR = на Mr. Поскольку вы заменяете массив значений массивом значений, весь процесс становится заменой, разбиением, заменой. Я чувствую, что это менее сложно, чем чудовищное регулярное выражение. – kainaw