fork download
  1. <?php
  2.  
  3. $text = "Goszakupki goszаkupki размещение государственного заказа на право заключение государственного контракта на выпoлнение рабoт по комплекснoму благоустрoйству двoрoвой тeрритoрии по адресу: ул.Гурьянoва д.2 к.2";
  4. //Первое слово goszakupki полностью латиницей, во втором - буква a написана кириллицей.
  5. $regexp = '/\\b\\w*([А-я][A-z]|[A-z][А-я])\\w*\\b/u';
  6. $words = array();
  7. $correcture = array();
  8.  
  9. $decryptTable = array(
  10. 'e' => 'е', 'y' => 'у',
  11. 'o' => 'о', 'p' => 'р',
  12. 'a' => 'а', 'x' => 'х',
  13. 'c' => 'с', 'E' => 'Е',
  14. 'T' => 'Т', 'O' => 'О',
  15. 'P' => 'Р', 'A' => 'А',
  16. 'H' => 'Н', 'K' => 'К',
  17. 'X' => 'Х', 'C' => 'С',
  18. 'B' => 'В', 'M' => 'М'
  19. );
  20.  
  21. if (preg_match_all($regexp, $text, $words, PREG_SET_ORDER)) {
  22. foreach ($words as $word) {
  23. $wrong = $word[0];
  24. $marked = preg_replace('/[A-z]/', '[$0]', $wrong);
  25. $correct = preg_replace_callback("/[A-z]/",
  26. function ($matches) use ($decryptTable) {
  27. return strtr($matches[0], $decryptTable);
  28. }, $wrong);
  29. $correcture[$wrong] = $correct;
  30. echo "{$marked} => {$correct}\n";
  31. }
  32. foreach ($correcture as $wrong => $correct){
  33. $text = str_replace($wrong, $correct, $text);
  34. }
  35. echo "Исправленный текст:\n{$text}";
  36. }
  37. ?>
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
[g][o][s][z]а[k][u][p][k][i] => gоszаkuрki
вып[o]лнение => выполнение
раб[o]т => работ
комплексн[o]му => комплексному
благоустр[o]йству => благоустройству
дв[o]р[o]вой => дворовой
т[e]ррит[o]рии => территории
Гурьян[o]ва => Гурьянова
Исправленный текст:
Goszakupki gоszаkuрki размещение государственного заказа на право заключение государственного контракта на выполнение работ по комплексному благоустройству дворовой территории по адресу: ул.Гурьянова д.2 к.2