Comments 38
А толку, если это с правилами русского языка не согласуется?
Вот правила: gramota.ru/spravka/rules/? rub=perenos
Если написано нельзя — значит и не надо оправдывать неправильные переносы. Лучше вообще не переносить, чем переносить чёрт знает как.
Вот правила: gramota.ru/spravka/rules/? rub=perenos
Если написано нельзя — значит и не надо оправдывать неправильные переносы. Лучше вообще не переносить, чем переносить чёрт знает как.
По моему увидев перенос «хоккей — 141143 — хо-ккей;» мало кто поверит, что надо «хо-ккей» а не привычное «хок-кей». И я побоюсь использовать такие переносы.
ну, привычнее, не привычнее, но это правильно. погуглите на тему «принцип восходящей звучности»
Так вон же выше ссылку привели на правила:
7. Нельзя оставлять в конце строки или переносить в начало следующей две одинаковые согласные, стоящие между гласными.
То есть «хок-кей» правильно, а «хо-ккей» — неправильно.
7. Нельзя оставлять в конце строки или переносить в начало следующей две одинаковые согласные, стоящие между гласными.
То есть «хок-кей» правильно, а «хо-ккей» — неправильно.
так в примере речь не про перенос а про слогораздел. наверное, я нелостаточно чётко выразился. слогораздел и перенос слов разные вещи. а что программа перенсёт слово не так, это да. но в коце сатьи я написал, что в принципе, эту бадягу можно обойти правилами на основе регулярных выражений. а реализацию оставил вам на сладкое. сам тоже над ней работаю =)
это с правилами русского языка согласовано: слогораздел именно так и происходит. А перенос слов по слогам вполне возмоден. Читайте: www.gramma.ru/RUS/? id=4.21
\\возможен
>> Недавно я столкнулся с проблемой реализации переноса слов средствами PHP.
Вот это и наводит на мысль что не слогораздел а именно перенос по слогам =)
Вот это и наводит на мысль что не слогораздел а именно перенос по слогам =)
ну да, такой способ переноса слов в принципе возможен [ www.gramma.ru/RUS/? id=4.21 ]. и для него принципиален слогораздел))
Вообще-то есть специализированный софт для этого дела.
И вот он как раз всё делает по правилам (ну или почти всё).
И вот он как раз всё делает по правилам (ну или почти всё).
ну есть то-есть, а где его найти в паблике? я не нашёл, и озадачился. сейчас работаю над реализацией морфемного способа переноса. как сделаю словарь — выложу на хабре.
кстати, скорее всего такой софт работает на основе морфем…
если есть сомения на счёт слогораздела, почитайте forum.gramota.ru/forum/read.php? f=15&i=5072&t=5072, все мои примеры оттуда родом.
Очень не плохо!
Для лучшего восприятия кода, советую воспользоваться source.virtser.net/
Для лучшего восприятия кода, советую воспользоваться source.virtser.net/
Ну про сам алгоритм написали выше.
Напишу про код — он очень, очень странный.
Зачем переводить строку из cp1251 в юникод и потом жутко извращенным способом отщипывать символы из старой кодировки и переводить в новую, может стоит сразу использовать mb_string?
function win2uni($s) — это вообще очень странная функция, этакий аналог iconv('windows-1251', 'utf-8', $s).
У вас чуть менее чем полностью код состоит из copy-paste. Так писать не следует.
$group_[1-4] сгруппируйте в один массив, если вы все еще так настойчиво сам код сохраняете в кодировке cp1251, а потом переводите символы своим велосипедом в utf8, то либо сохраните наконец-то его в utf8, либо используйте array_map.
Вместо этого ужаса if… elseif… elseif и тд по одной строчке в каждом переделайте код на switch case.
Напишу про код — он очень, очень странный.
Зачем переводить строку из cp1251 в юникод и потом жутко извращенным способом отщипывать символы из старой кодировки и переводить в новую, может стоит сразу использовать mb_string?
function win2uni($s) — это вообще очень странная функция, этакий аналог iconv('windows-1251', 'utf-8', $s).
У вас чуть менее чем полностью код состоит из copy-paste. Так писать не следует.
$group_[1-4] сгруппируйте в один массив, если вы все еще так настойчиво сам код сохраняете в кодировке cp1251, а потом переводите символы своим велосипедом в utf8, то либо сохраните наконец-то его в utf8, либо используйте array_map.
Вместо этого ужаса if… elseif… elseif и тд по одной строчке в каждом переделайте код на switch case.
согласен, код не красивый. но вылизывать его не хватило терпения, хотелось побыстрее написать на хабр, как тока он заработал…
Поспешишь — людей насмешишь :-)
Привести код в порядок занимает не так уж и много времени.
Привести код в порядок занимает не так уж и много времени.
Вы «ландскнехт» неправильно написали :)
Да что там скрипт, даже с поиском алгоритма возникли трудностиАааа… Держите меня семеро. Ну сколько нужно времени чтобы найти суперсекретную статью в ультранедоступном источнике с названием Wikipedia? Версии для PHP там нет, правда (есть где руки кодеру размять, да), но есть для Perl и Ruby. Таблицы для русского языка берутся из естественного места.
Оставьте студентов-филологов в покое: всё уже украдено до вас!
Не знаю можно так переносить или нельзя, но выглядит как то неорганично. Особенно «я-стреб». «Яст-реб» как то привычнее (Викисловарь тоже так считает).
Нельзя оставлять одну букву на строке. Алгоритм Кнута это учитывает отдельно. \lefthyphenmin=2 \righthyphenmin=2 для русского, \lefthyphenmin=2 \righthyphenmin=3 для английского…
Вы не путайте орфографию и типографику пожалуйста.
Oops. Я и не заметил что там вообще слово было неправильно разбито на слоги. Посыпаю голову пеплом. Кстати правила для русского языка из babel'я работают хуже, чем для английского — что можно заметить и по количеству исключений (184 для русского и 14 для английского). Но по сравнению с тем, что эти эвристики творят это всё мелочи, конечно…
Sign up to leave a comment.
Программное разбиение слова на слоги