Comments 38
А толку, если это с правилами русского языка не согласуется?
Вот правила: gramota.ru/spravka/rules/? rub=perenos
Если написано нельзя — значит и не надо оправдывать неправильные переносы. Лучше вообще не переносить, чем переносить чёрт знает как.
Вот правила: gramota.ru/spravka/rules/? rub=perenos
Если написано нельзя — значит и не надо оправдывать неправильные переносы. Лучше вообще не переносить, чем переносить чёрт знает как.
+10
По моему увидев перенос «хоккей — 141143 — хо-ккей;» мало кто поверит, что надо «хо-ккей» а не привычное «хок-кей». И я побоюсь использовать такие переносы.
+6
ну, привычнее, не привычнее, но это правильно. погуглите на тему «принцип восходящей звучности»
0
Так вон же выше ссылку привели на правила:
7. Нельзя оставлять в конце строки или переносить в начало следующей две одинаковые согласные, стоящие между гласными.
То есть «хок-кей» правильно, а «хо-ккей» — неправильно.
7. Нельзя оставлять в конце строки или переносить в начало следующей две одинаковые согласные, стоящие между гласными.
То есть «хок-кей» правильно, а «хо-ккей» — неправильно.
0
так в примере речь не про перенос а про слогораздел. наверное, я нелостаточно чётко выразился. слогораздел и перенос слов разные вещи. а что программа перенсёт слово не так, это да. но в коце сатьи я написал, что в принципе, эту бадягу можно обойти правилами на основе регулярных выражений. а реализацию оставил вам на сладкое. сам тоже над ней работаю =)
0
это с правилами русского языка согласовано: слогораздел именно так и происходит. А перенос слов по слогам вполне возмоден. Читайте: www.gramma.ru/RUS/? id=4.21
0
\\возможен
0
>> Недавно я столкнулся с проблемой реализации переноса слов средствами PHP.
Вот это и наводит на мысль что не слогораздел а именно перенос по слогам =)
Вот это и наводит на мысль что не слогораздел а именно перенос по слогам =)
-2
ну да, такой способ переноса слов в принципе возможен [ www.gramma.ru/RUS/? id=4.21 ]. и для него принципиален слогораздел))
0
UFO just landed and posted this here
Вообще-то есть специализированный софт для этого дела.
И вот он как раз всё делает по правилам (ну или почти всё).
И вот он как раз всё делает по правилам (ну или почти всё).
0
ну есть то-есть, а где его найти в паблике? я не нашёл, и озадачился. сейчас работаю над реализацией морфемного способа переноса. как сделаю словарь — выложу на хабре.
0
кстати, скорее всего такой софт работает на основе морфем…
0
если есть сомения на счёт слогораздела, почитайте forum.gramota.ru/forum/read.php? f=15&i=5072&t=5072, все мои примеры оттуда родом.
0
Очень не плохо!
Для лучшего восприятия кода, советую воспользоваться source.virtser.net/
Для лучшего восприятия кода, советую воспользоваться source.virtser.net/
-1
Ну про сам алгоритм написали выше.
Напишу про код — он очень, очень странный.
Зачем переводить строку из 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.
0
согласен, код не красивый. но вылизывать его не хватило терпения, хотелось побыстрее написать на хабр, как тока он заработал…
0
Поспешишь — людей насмешишь :-)
Привести код в порядок занимает не так уж и много времени.
Привести код в порядок занимает не так уж и много времени.
+2
Вы «ландскнехт» неправильно написали :)
0
Да что там скрипт, даже с поиском алгоритма возникли трудностиАааа… Держите меня семеро. Ну сколько нужно времени чтобы найти суперсекретную статью в ультранедоступном источнике с названием Wikipedia? Версии для PHP там нет, правда (есть где руки кодеру размять, да), но есть для Perl и Ruby. Таблицы для русского языка берутся из естественного места.
Оставьте студентов-филологов в покое: всё уже украдено до вас!
+3
Не знаю можно так переносить или нельзя, но выглядит как то неорганично. Особенно «я-стреб». «Яст-реб» как то привычнее (Викисловарь тоже так считает).
+1
Нельзя оставлять одну букву на строке. Алгоритм Кнута это учитывает отдельно. \lefthyphenmin=2 \righthyphenmin=2 для русского, \lefthyphenmin=2 \righthyphenmin=3 для английского…
0
Вы не путайте орфографию и типографику пожалуйста.
+2
Oops. Я и не заметил что там вообще слово было неправильно разбито на слоги. Посыпаю голову пеплом. Кстати правила для русского языка из babel'я работают хуже, чем для английского — что можно заметить и по количеству исключений (184 для русского и 14 для английского). Но по сравнению с тем, что эти эвристики творят это всё мелочи, конечно…
0
Ну, в русском таких слов достаточно. «Изображение» или «идиот» например. Насколько я знаю, оставлять одну букву на строке можно, но не принято.
+1
Sign up to leave a comment.
Программное разбиение слова на слоги