Замена в тексте английских букв на схожие русские.

12
K
На сайте с 12.07.2006
Offline
295
Kpd
#11
antono:
А если просто посчитать в слове количество русских и количество латинских букв и чего окажется больше, к тому языку принадлежит слово. И делать соответственно этому преобразования.

Зависит от текста. Слово "eщe" можно написать через две латинские "e", хотя визуально это однозначно русское слово.

K
На сайте с 12.07.2006
Offline
295
Kpd
#12

Пример реализации.

// Замена графически похожих латинских букв на русские буквы в русских словах и наоборот

function RusLat ($text)
{
// Соответствие букв русского и латинского алфавита
$abc = array(
"a" => "а",
"A" => "А",
"c" => "с",
"C" => "С",
"e" => "е",
"E" => "Е",
"T" => "Т",
"H" => "Н",
"o" => "о",
"O" => "О",
"p" => "р",
"P" => "Р",
"k" => "к",
"K" => "К",
"x" => "х",
"X" => "Х",
"B" => "В",
"M" => "М",
"b" => "ь",
"r" => "г",
"y" => "у",
"Y" => "У"
);

// Незаменимые русские символы
$russian = "шщфыджэячибю";

// Незаменимые латинские символы
$latin = "qwisdfgjzv";

// Строка с результатом
$result = "";

// Разбиваем текст на слова и работаем с каждым словом
$words = split(" ", $text);
foreach ($words as $word) {
if (!preg_match("#[$latin]+#i", $word)) {
foreach ($abc as $lat => $rus) {
$word = str_replace($lat, $rus, $word);
}
} elseif (!preg_match("#[$russian]+#i", $word)) {
foreach ($abc as $lat => $rus) {
$word = str_replace($rus, $lat, $word);
}
}
$result .= $word." ";
}

return trim($result);

}
antono
На сайте с 12.07.2004
Offline
302
#13
Kpd:
Пример реализации.

При такой топорной реализации всем английским словам прийдет капут

K
На сайте с 12.07.2006
Offline
295
Kpd
#14
antono:
При такой топорной реализации всем английским словам прийдет капут

Далеко не всем :)

Можете предложить лучший вариант?

М
На сайте с 08.02.2006
Offline
59
#15

Что-то даже самому стало интересно


$str = "Пpи такой тonoрной реализации всем aнглийским словаm прийдет кaпут, naverno, а может быть и nеt";

print $str."<br>";

for($i=0;$i<strlen($str);$i++) {

if(preg_match("#[a-zA-Z]#",$str[$i])) {

// Если текущая буква латинская, а следующая русская
if(preg_match("#[а-яА-Я]#",$str[$i+1])) $str[$i] = "я";

} elseif (preg_match("#[а-яА-Я]#",$str[$i])) {

// Если текущая буква русская, а следующая латинская
if(preg_match("#[a-zA-Z]#",$str[$i+1])) $str[$i+1] = "я";

} else {

continue;

}
}

print $str;
antono
На сайте с 12.07.2004
Offline
302
#16
Kpd:
Далеко не всем :)
Можете предложить лучший вариант?

Примерно такой способ и использую :)

Просто невнимательно прочитал ваш код, посмотрел только верхнюю видимую часть.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий