2015-03-25 2 views
0

Я ищу помощь, чтобы сделать этот код более точным. Для любого заданного текста ($ 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 не принимать во внимание случаи г-жи мисс. Г-жа Как исключение может быть добавлен к регулярное выражение, чтобы избежать этих случаев?

Спасибо.

+1

Есть бесконечное количество сокращений, где вы не хотите, чтобы разбить содержимое. Нет простого решения. То, что мы, люди, можем сделать с легкостью, может быть очень сложно зафиксировать в алгоритме. –

+0

Вы посмотрели http://stackoverflow.com/questions/16377437/split-a-text-into-sentences? он не решает проблему вашего г-на и миссис, но ее как можно ближе. Существует также расширенное решение: http://stackoverflow.com/questions/5032210/php-sentence-boundaries-detection – Marc

+0

То, что я лично делаю в этом случае, заменяет подстроки проблемы заменой. Например, вы можете заменить г-на = MR =. Тогда ваше preg_replace будет работать. Когда вы закончите, вы отмените замену, заменив = MR = на Mr. Поскольку вы заменяете массив значений массивом значений, весь процесс становится заменой, разбиением, заменой. Я чувствую, что это менее сложно, чем чудовищное регулярное выражение. – kainaw

ответ

0

Лучший ответ, который я нашел для создания массивов когерентных предложений, - это решение регулярных выражений, найденное в ссылке, предложенной @Marc в комментариях выше.

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

https://stackoverflow.com/a/7438782/3662086

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