Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Перенос слова на следующую строку

Автор Hakami, июля 6, 2012, 11:38

0 Пользователи и 1 гость просматривают эту тему.

Hakami

Здравствуйте! "Обучаю" программу грамотно выводить русские слова. Программа для мобильников, поэтому не все слова целиком вмещаются в строку. Следовательно, нужно как-то разделять их и переносить.

Хочу сделать такой алгоритм.

Разбираем слово, не влезающее в строку. Если буква - гласная, но не первая и не предпоследняя в слове, после нее ставим дефис и дописываем слово на следующей строке.

Вопросы:
1) Какие слова по этому алгоритму будут переноситься неправильно?
2) Если процент неверно переносимых слов велик, то как усовершенствовать алгоритм?


Hakami

P.S. Алгоритм будет цикличным, поэтому не должно возникать проблем со словами, в которых стыкуются приставка, оканчивающаяся на гласную, и корень, на гласную начинающийся. Переноситься должны корни, суффиксы, окончания.

P.P.S. Просьба к модератору. Пожалуйста, переместите тему в наиболее подходящий раздел. К сожалению, я не могу определить, какому из разделов она соответствует :fp:

lehoslav

Цитата: Hakami от июля  6, 2012, 11:38
Здра-вству-йте! "Обу-чаю" про-гра-мму гра-мо-тно вы-во-ди-ть ру-сские сло-ва. Про-гра-мма для мо-би-льни-ков, по-э-то-му не все сло-ва це-ли-ком вме-ща-ю-тся в стр-оку. Сле-до-ва-те-льно, ну-жно как-то ра-зде-ля-ть их и пе-ре-но-си-ть.

Хо-чу сде-ла-ть та-кой алго-ри-тм.

Ра-зби-ра-ем сло-во, не вле-за-ю-щее в стро-ку. Если бу-ква - гла-сная, но не пе-рвая и не пре-дпо-сле-дняя в сло-ве, по-сле нее ста-вим де-фис и до-пи-сы-ва-ем сло-во на сле-ду-ю-щей стро-ке.

Во-про-сы:
1) Ка-кие сло-ва по это-му алго-ри-тму бу-дут пе-ре-но-си-ться не-пра-ви-льно?
2) Если про-це-нт не-ве-рно пе-ре-но-си-мых слов ве-лик, то как усо-ве-рше-нств-ова-ть алго-ри-тм?

правильно понял алго-ри-тм?
Wenn mit mir und denn noch drey Personen es vorbey ist in unserem Dorf, alsdann wird wohl niemand recht wissen, wie ein Hund auf Wendisch genannt wirdt.

Hakami

lehoslav, спасибо  ;up:
Разве что "в стро-ку" в первом абзаце.

Значит главный минус - "ть"...
Казусы вроде "не-пра-ви-ЛЬНО", "алго-ри-ТМ"... :???
Добавить что ли цикл, определяющий наличие гласных после выбранной...

Python

«Обу-чаю», с отрывом одной буквы от корня — разве не ошибка?
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Hakami

Цитата: Python от июля  6, 2012, 14:47
«Обу-чаю», с отрывом одной буквы от корня — разве не ошибка?
Ошибка. Нужно найти все морфемы, кроме приставок, которые могут встретиться в словах, не вмещающихся в строке длиной от 100 пикселей.

Кстати, к гласным в программе можно присовокупить и "ь" (будет "сле-до-ва-те-ль-но" и "пра-ви-ль-но", но перенос-то только один, ближайший к концу, но еще не уходящий за пределы строки, т.е., например, "следователь-но", если, конечно, "следователь" влезет).

Hellerick

Я в детстве сделал программу, расставляющий мягкие переносы (потому что у меня Word отказывался переносить русские слова).
Алгоритм был примерно такой:

1. В тексте выискивались непрерывные последовательности букв, каждая из них рассматривалась отдельно (т.е. «наконец-то» интерпретировалось как два слова).
2. Стыку каждых двух соседних букв присваивался флаг «можно/нельзя переносить». Первоначально он везде принимает значение «можно».
3. Флаг на стыке согласная-гласная меняется на «нельзя». («слXовXо»)
4. Флаг правее первой буквы и левее последней меняется на «нельзя». («АXзиXя»)
5. Все флаги с начала слова до первой его гласной меняются на нельзя; потом то же самое с обратной стороны: флаги с конца слова до последней гласной меняются на «нельзя».  («сXтXроителXь»)
6. Флаги левее букв Й, Ь, Ъ меняются на «нельзя». («безXъязыкиXй»)
7. Флаги левее и правее удвоенной согласной меняются на «нельзя». («програXммXный»)
8. Там где всё еще стоят флаги «можно» расставляются мягкие переносы.

Приставками и сложными словами я не заморачивался. Результат получался, разумеется, непрофессиональный, но вполне подходил для «газетного» стиля, и для мобильников, насколько я понимаю, тоже подошел бы.

Т.е. у меня было примерно так:

ЦитироватьЗдра-в-с-т-вуй-те! "Обу-чаю" про-г-рам-му гра-мо-т-но вы-во-дить рус-ские сло-ва. Про-г-рам-ма для мо-би-ль-ни-ков, по-э-то-му не все сло-ва це-ли-ком вме-ща-ю-т-ся в стро-ку. Сле-до-ва-те-ль-но, ну-ж-но как-то ра-з-де-лять их и пе-ре-но-сить.

Хо-чу сде-лать та-кой ал-го-ритм.

Ра-з-би-ра-ем сло-во, не вле-за-ю-щее в стро-ку. Если бу-к-ва - гла-с-ная, но не пе-р-вая и не пре-д-по-сле-д-няя в сло-ве, по-с-ле нее ста-вим де-фис и до-пи-сы-ва-ем сло-во на сле-ду-ю-щей стро-ке.

Во-про-сы:
1) Ка-кие сло-ва по это-му ал-го-ри-т-му бу-дут пе-ре-но-си-ть-ся не-п-ра-ви-ль-но?
2) Ес-ли про-цент не-ве-р-но пе-ре-но-си-мых слов ве-лик, то как усо-ве-р-ше-н-с-т-во-вать ал-го-ритм?

Таким образом, мой алгоритм мог перенести и «пе-рвый» и «пер-вый» — что, вроде бы, соответствует формальным правилам.

Lodur

Цитата: Hellerick от июля  6, 2012, 15:37
7. Флаги левее и правее удвоенной согласной меняются на «нельзя». («програXммXный»)
Разве так переносить нельзя: «программ-ный»?
8-й Девственник Лингвофорума

If the doors of perception were cleansed, everything would appear to man as it is: infinite. (W. Blake)
Какая потребителю разница, какой продукт лучше не работает?.. (Awwal12)

Hellerick

Цитата: Lodur от июля  6, 2012, 15:54
Цитата: Hellerick от июля  6, 2012, 15:37
7. Флаги левее и правее удвоенной согласной меняются на «нельзя». («програXммXный»)
Разве так переносить нельзя: «программ-ный»?

Гм...

Цитата: http://www.gramota.ru/spravka/rules/?rub=perenos7. Нельзя оставлять в конце строки или переносить в начало следующей две одинаковые согласные, стоящие между гласными.

Получается, что можно.

Hakami

Цитата: http://www.gramota.ru/spravka/rules/?rub=perenos7. Нельзя оставлять в конце строки или переносить в начало следующей две одинаковые согласные, стоящие между гласными.
- значит, нужно оставить запрет перед одинаковыми согласными, а всякие "алл-еи" будут исключены по 3 пункту Вашего алгоритма (стык между согласной и гласной).
P.S. А в целом, алгоритм у Вас замечательный, спасибо :yes:.

Март

Алё, ребята, здесь где-то недалеко это уже было растоплено...
Грубо говоря, как хошь, так и переноси.
Если есть желание не показаться свином, одинаковые буквы разбивай.
Если хочешь показаться не свином, постарайся не разбивать морфемы.
Но ни в коем случае не разбивай слог (буква согласного + буква гласного).
Если же не хочешь выглядеть полным идиотом, не переноси не слог (без буквы гласного).
Буквы же гласного выучи наизусть в "обессмысленную" скороговорку (ибо в этом "смысла нет", однако с упором на жёсткий контроль произношения): и, э, а, о, у, ы; е, ё, ю, я - именно в этой последовательности и с учётом знаков препинания...

Март


Python

Цитировать4. Флаг правее первой буквы и левее последней меняется на «нельзя». («АXзиXя»)
5. Все флаги с начала слова до первой его гласной меняются на нельзя; потом то же самое с обратной стороны: флаги с конца слова до последней гласной меняются на «нельзя».  («сXтXроителXь»)
Кажется, перенос недопустим и с отделением начальных и конечных групп, состоящих из одних гласных (ау-тизм, си-яя).
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Hellerick

Цитата: Python от июля  8, 2012, 16:58
Кажется, перенос недопустим и с отделением начальных и конечных групп, состоящих из одних гласных (ау-тизм, си-яя).

Не слышал такого правила, но звучит разумно.

Вот что меня действительно интересует, это правила переноса в английском тексте. Нигде не могу найти внятной информации об этом.

Python

В английском перенос завязан на делении по морфемам, даже если при этом разрываются слоги. Неуверен, разбиваются ли английские корни переносами на части.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Март

К передпредыдущему.
Те же, что и в неанглийском, если речь о русской графике... Фонетико (не путпть с фонематикой) - морфемо - графические... То есть удобство (для за ради) речи/произношения/понимания/практики... Другого закона нет (хотя и были, и будут)... Но этот - главенствует (удобство)...

wangjhenbai

В английском не только по морфемам. Ещё и просто по слогам. Причём, насколько я заметил, liquida cum muta не разрываются. А вообще, в словарях даётся деление на слоги.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

Hellerick

Начнем с того, что я слышал, а Америке и Британии сложились разные традиции переноса.

Насколько я понимаю, с одной стороны нужно стремиться к тому, чтобы первая часть слова подсказывала правильное произношение (в частности, указывая на открытость-закрытость слога), и с другой стороны чтобы переносной дефис не создавал неверное впечатление о словоделении (чтобы «leg-end» не воспринималось как «конец ноги»). Но формально это описать весьма трудно.

Hellerick

Цитата: wangjhenbai от июля  8, 2012, 17:45
А вообще, в словарях даётся деление на слоги.
Не деление на слоги, а «hyphenation». Не путаем. Как раз роль слогов в этом не совсем понятна.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр