fork download
  1. <?php
  2.  
  3. /*Для правильной работы со строками надо не забывать настроить кодировку в начале скрипта!*/
  4.  
  5. /*Дан неграмотно написанный текст, состоящий из нескольких предложений на русском языке. Ошибки заключаются в неправильной расстановке пробелов и отсутствии заглавных букв. Исправить текст так, чтобы все
  6.  
  7. предложения начинались с большой буквы, а после знаков запятая, точка, восклицательный и вопросительный знак стоял ровно один пробел (а перед ними - ни одного).*/
  8.  
  9. $textWithErrors_1 = "ну что. не смотрел еще black mesa.я собирался скачать ,но все как-то некогда было.";
  10. $textWithErrors_2 = "roses are red,and violets are blue.vhatever you do i'll keep it for you.";
  11. $textWithErrors_3 = "привет.есть 2 функции,preg_split и explode ,не понимаю,в чем между ними разница.";
  12.  
  13. //Массив ошибок и их исправлений
  14. $regexpAndCorrected = array(
  15. "/[ ]*,[ ]*/u" => ", ",
  16. "/[ ]*\\.[ ]*/u" => ". ",
  17. "/[ ]*![ ]*/u" => "! ",
  18. "/[ ]*\\?[ ]*/u" => "? "
  19. );
  20.  
  21. //регулярное выражение для разбивки на предложения!
  22. $regexpForSearchClause = "/(\\. |! |\\? )/u";//Круглые скобки нужны для дальнйшего использования в функции preg_split
  23.  
  24. //Функция исправления ошибок
  25. function error_correction ($text, $arrayErrorAndCorrected, $regexp)
  26. {//начинает функцию
  27. //Сначала исправим пробелы
  28. echo "Текст с ошибками:\n";
  29. echo $text;
  30. echo "\n";
  31. foreach ($arrayErrorAndCorrected as $error => $corrected)
  32. {//начинает цикл
  33. $text = preg_replace ($error, $corrected, $text);
  34. }//заканчивает цикл
  35. $text = rtrim($text); //отрезает все пробелы и символы перевода строки только с конца
  36. echo "Текст без ошибок:\n";
  37. echo $text;
  38. echo "\n\n";
  39.  
  40. //Заменим маленькие буквы на большие вначале каждого предложения
  41. $clauses = array ();//массив будет содержать предложения
  42. $clauses = preg_split ($regexp, $text, -1, PREG_SPLIT_DELIM_CAPTURE);//Разбиваем текст на предложения, -1 или 0 означает отсутствие ограничения на количество разбитий
  43. //PREG_SPLIT_DELIM_CAPTURE - если указан этот флаг, то выражение, заключённое в кргуглые скобки в разделяющем шаблоне тоже извлекается из заданной строки и возвращается функцией
  44.  
  45. foreach ($clauses as $key => $clause)
  46. {//начинает цикл
  47. $characters = preg_split('//u', $clause, -1, PREG_SPLIT_NO_EMPTY);//разбиваем каждое предложение посимвольно, PREG_SPLIT_NO_EMPTY - чтобы в массив не попали 2 пустых элемента в начале и в конце
  48. $characters[0] = mb_strtoupper($characters[0]);//Меняем первую букву на большую
  49. //var_dump ($characters[0]);
  50. //echo "\n\n";
  51. $clause = implode ($characters);//соберём обратно из символов предложение
  52. }//заканчивает цикл
  53.  
  54. $text = implode ($clauses);//соберём обратно текст из предложений
  55.  
  56. //var_dump ($clauses);
  57. //echo "\n\n";
  58.  
  59. return $text;
  60. }//заканчивает функцию
  61.  
  62. var_export ($textWithErrors_1);
  63. echo "\n\n";
  64.  
  65. $textWithErrors_1 = error_correction ($textWithErrors_1, $regexpAndCorrected, $regexpForSearchClause);
  66.  
  67. $textWithErrors_2 = error_correction ($textWithErrors_2, $regexpAndCorrected, $regexpForSearchClause);
  68.  
  69. $textWithErrors_3 = error_correction ($textWithErrors_3, $regexpAndCorrected, $regexpForSearchClause);
  70.  
  71. var_export ($textWithErrors_1);
  72. echo "\n\n";
  73.  
  74.  
  75. //mb_strtoupper($text); - меняет все маленькие буквы на большие (капс лок)
  76. ?>
Success #stdin #stdout 0.02s 26388KB
stdin
Standard input is empty
stdout
'ну что.        не смотрел еще black mesa.я собирался скачать     ,но все как-то некогда было.'

Текст с ошибками:
ну что.        не смотрел еще black mesa.я собирался скачать     ,но все как-то некогда было.
Текст без ошибок:
ну что. не смотрел еще black mesa. я собирался скачать, но все как-то некогда было.

Текст с ошибками:
roses are red,and violets are blue.vhatever you do i'll keep it for you.
Текст без ошибок:
roses are red, and violets are blue. vhatever you do i'll keep it for you.

Текст с ошибками:
привет.есть 2 функции,preg_split и explode ,не понимаю,в чем между ними разница.
Текст без ошибок:
привет. есть 2 функции, preg_split и explode, не понимаю, в чем между ними разница.

'ну что. не смотрел еще black mesa. я собирался скачать, но все как-то некогда было.'