В мире компьютеровПравила переноса слов

Русский язык и современные информационные технологии

Модератор: Роксана

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007
Правила переноса слов

Сообщение Andrey » 10 сен 2007, 17:54

Всем здравствуйте.
Я начинающий программист и столкнулся с задачей вывода текста в окне шириной не более N символов. Стало интересно, поискал, для освежения в памяти русского языка, в интернете правила переноса слов и за выходные накропал программу. Чтение результирующего текста выявило, что найденных правил недостаточно.

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

Руча-юсь, неча-янно, влияни-ем, - так не перенесла, перенесла левее: ру-чаюсь, не-чаянно, влия-нием.

Полученные результаты подчиняются правилам, написанным ниже. Какие правила я не учел при составлении программы?

Правила работы программы:
1. Алгоритм сдвигается по слову влево, пока не найдёт точку переноса или возвращает значение "нельзя переносить". Слово не переносится, если в нем найден не буквенный символ.
2. Крайние символы самостоятельно не переносятся.
3. Можно переносить:
- гласная - согласная;
- согласная ("ъ" или "ь") - гласная;
- согласная - согласная (если правая согласная не "ъ" или "ь";
- гласная, затем "й" - гласная;
- гласная - гласная (если левая гласная - это окончание приставки "при", "пре" или "про");
4. Нельзя переносить (проверяется, для каждой найденной точки переноса по правилам п.3.)
- если правее, правой согласной буквы, стоит "ь";
- если слева или справа две одинаковых согласных;

А может и ещё есть какие-то правила переноса, которые просто не встретились при обработке текста?

Добавлено спустя 2 минуты 6 секунд:

Что - то тема раздвоилась? Я нажимал кнопку "Отправить" один раз.
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Реклама
Аватара пользователя
Елена
-
Сообщений в теме: 3
Всего сообщений: 3745
Зарегистрирован: 10.10.2005

Сообщение Елена » 10 сен 2007, 20:15

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

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 10 сен 2007, 21:38

Спасибо за отзыв, но вы меня не правильно поняли.

Мне нужно для слов, которые перенесены не правильно, объяснение почему данный, конкретный перенос, который стоит в слове перечня слов, не правильный.
То, что надо перенести слово бунтовщикам - бун-товщикам, я понимаю. Программа так - бы и перенесла, но из данного слова оказалось на границе 3 символа "бун", и, т. к. надо оставить еще место под дефис, остается бу-..., что согласуется с моим перечнем правил. Вот если - бы ввести еще правило, которое бы указало, что бу-... переносить нельзя, то перенос слова "бунтовщиками", с границей "бун|товщиками" оказался бы запрещен и слово целиком перенеслось на следующую строку.
В других словах, более длинных слева от границы, был бы (должен быть, но у меня нет формализованных правил) найден правильный перенос левее.

В трех словах, которые написаны во второй группе слов граница, с которой производился поиск места для переноса позволяла поставить правильный перенос правее, чем он был поставлен, тут наоборот надо ввести разрешающее правило.

Моя программа, хоть и переносит произвольный текст, предназначена для переносов названий, выводимых в иконки большого размера 156 на 156. Для данной задачи работает вполне приемлемо. (Например в Windows вообще нет никаких правил для переноса названий, слова просто обрезаются, там, где их встретила граница.)

Но меня этот вопрос заинтересовал, сижу ищу в интернете (пока безрезультатно).

Добавлено спустя 15 минут 5 секунд:

Извините, не внимательно сразу прочитал ответ. Отвлекло цитирование перечня слов с исправлениями и первое слово "бунтовщикам" с кучей переносов.

Если все такие переносы разрешены (а было протестировано слов в несколько раз больше, чем "сомнительные результаты"), получается, что программа работает на 95% правильно и я зря начал беспокоиться по этому поводу. :)

Для полного счастья осталось найти словарь слов из одного слога.
:roll:

Добавлено спустя 7 минут 55 секунд:

Ради интереса понаблюдаю, как нибудь, попутно, как переносит слова "MS Word".
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Аватара пользователя
Елена
-
Сообщений в теме: 3
Всего сообщений: 3745
Зарегистрирован: 10.10.2005

Сообщение Елена » 10 сен 2007, 21:43

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

Я не знаю, насколько это реально.

Неточно написала я:
Елена: ошибка была лишь в слове вдруг
согласные не могут быть отдельно от гласных. Имею в виду, что есть ещё слова с ошибками: Стро-го, вспом-нил, вдруг.

Упустила ли я что-то? ИЛи что-то снова не уловила?

Добавлено спустя 2 минуты 38 секунд:

Вообще, может быть, компьютерно-языковые специалисты что-нибудь подскажут, если сюда придут.

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 10 сен 2007, 23:36

Елена:Andrey,
чтобы программа работала абсолютно точно, она должна отличать гласный от согласного и видеть, где рядом несколько согласных. Просто обычно при делении слова на слоги играет роль "закрытость" слогов (на стыке согласных - одна из них остаётся - другая "уходит") и наличие гласной в слоге (без неё слог не существует).

Я не знаю, насколько это реально.
Вполне реально, именно так и работает (уже) программа!
Вы то же не внимательно читали сообщения. Повторю кусочек из первого сообщения.
-------Программа использует следующие правила-------------
Можно переносить:
- гласная - согласная;
- согласная ("ъ" или "ь") - гласная;
- согласная - согласная (если правая согласная не "ъ" или "ь";
- гласная, затем "й" - гласная;
- гласная - гласная (если левая гласная - это окончание приставки "при", "пре" или "про");
Нельзя переносить:
- если правее, правой согласной буквы, стоит "ь";
- если слева или справа две одинаковых согласных;
-------------------------------------------------------------------------
Эти правила можно дополнить, что я и хочу сделать.
Но, кроме них, я, к сожалению, пока ничего нового не нашел, кроме правила: "не переносится слово из одного слога". На которое, в том числе и вы обратили мое внимание.
------------------------------------------------------------------------
Поясню, что значит "правая", "левая", "правее" и т. п.
Программе передается слово с указанием места, с которого надо найти место переноса, например: пролет|арий, здесь левая буква - "т", левее - "е", правая - "а".
Можно, при необходимости анализировать любые куски слова.
Т. к. пролет-арий перенести нельзя, то анализируется место слова левее, т. е.проле|тарий, и так до тех пор, пока не будет найдено место, где подойдет к. л. правило переноса и не будет ни одного запрета, т. е. ответ программы: проле-тарий.

Если программе передали все слово, пролетарий|, то правильный ответ должен быть пролета-рий.
Если передали пр|олетарий, то правильный ответ будет - "нельзя перенести" и все слово уйдет на новую строку.
--------------------------
Уф.

Добавлено спустя 7 минут 42 секунды:
Елена:Просто обычно при делении слова на слоги играет роль "закрытость" слогов (на стыке согласных - одна из них остаётся - другая "уходит") и наличие гласной в слоге (без неё слог не существует).
Вот и правило:
"слово (целиком) в котором только одна гласная нельзя переносить".

Утверждаете скрижаль помощника писаря с высот мастера слова ?
:oops:
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Аватара пользователя
Елена
-
Сообщений в теме: 3
Всего сообщений: 3745
Зарегистрирован: 10.10.2005

Сообщение Елена » 11 сен 2007, 07:33

Andrey:Утверждаете скрижаль помощника писаря с высот мастера слова ?
Нет, что Вы.... Просто написала
Andrey: объяснение, почему данный, конкретный перенос, который стоит в слове перечня слов, неправильный.
Andrey:Вот и правило:
"слово (целиком) в котором только одна гласная нельзя переносить".
не совсем соответствует тому, что при делении слова на слоги играет роль "закрытость" слогов (на стыке согласных - одна из них остаётся - другая "уходит") и наличие гласной в слоге (без неё слог не существует).
Сколько гласных - столько может быть и переносов, по большому счёту.

Мне-то кажется, что Ваша программа и так довольно точна. Добиться по этому вопросу ещё более точной работы программы (больше 95%), наверное, сложно.

Аватара пользователя
Вячеслав Кургин
заслуженный писатель форума
заслуженный писатель форума
Сообщений в теме: 2
Всего сообщений: 454
Зарегистрирован: 21.11.2005

Сообщение Вячеслав Кургин » 11 сен 2007, 09:03

Andrey:Эти правила можно дополнить, что я и хочу сделать.
На примере неправильного переноса "ст-рого" можно добавить еще одно правило: "Переносить надо стро-го по слогам". Т.е., для компьютера должна быть еще такая вводная: на верхней строке должна оставаться, по крайней мере, одна гласная.

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 11 сен 2007, 19:25

Спасибо.
Совсем обобщив, получается одно, более широкое, запрещающее правило.
Правда сформулировал как разрешающее.

"Перенос разрешен, если и слева и справа от предполагаемого места переноса есть гласная буква".

"Тему не закрываю". :oops:
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Аватара пользователя
Хорхе7
заслуженный писатель форума
заслуженный писатель форума
Сообщений в теме: 4
Всего сообщений: 323
Зарегистрирован: 01.07.2007
Откуда: Москва

Сообщение Хорхе7 » 23 сен 2007, 22:52

Andrey:"Перенос разрешен, если и слева и справа от предполагаемого места переноса есть гласная буква
Надо ещё подумать, но сдаётся, что,

если перенос попадает между гласной и согласной, а в соседней позиции справа или слева есть его положение между двумя согласными (при сохранении процитированного правила), то именно это положение - истинно.

Не ли-стья, а лис-тья.
Не ки-рпич, а кир-пич.

На первый взгляд выглядит верно. :shock:

Аватара пользователя
Дима
поэт-прозаик
поэт-прозаик
Сообщений в теме: 7
Всего сообщений: 235
Зарегистрирован: 22.08.2007
Откуда: Финляндия, Espoo
Контактная информация:

Сообщение Дима » 24 сен 2007, 07:12

А как насчёт слова "чувство" :?:
Оно переносится как:
а) чув-ство
б) чувс-тво
в) чувст-во
:( :?:
_____
_/ Дима )
`O------O'

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 24 сен 2007, 12:29

Спасибо за отклики.
Я тоже продвинулся в своем вопросе.
Сейчас программа работает практически без ошибок, вечером выложу, как этого достиг, но еще есть вопросы улучшения алгоритма.

Добавлено спустя 2 минуты 23 секунды:
Хорхе7:
Andrey:"Перенос разрешен, если и слева и справа от предполагаемого места переноса есть гласная буква
Вы неправильно поняли - это извращенная формулировка запрета на перенос, для точки переноса найденной ранее по разрешающим правилам.
:wink:
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 24 сен 2007, 20:16

Хотел выложить результаты и вопросы после набора некоторой статистики (совмещая полезное с приятным, т. е. чтением книг), где то через 2 - 3 месяца, но раз есть интересующиеся, что - бы им не искать то, что уже найдено.

На то, что получилось сейчас, я вышел понаблюдав как переносит WORD (и, естественно читая то, что "напереносила" моя программа) - оказалось, что WORD выполняет переносы в простых случаях (хотя утверждать не берусь, статистику не набирал).
Это натолкнуло меня на запрещающее правило - если справа от предполагаемого места переноса согласная, то следующая должна быть гласная, иначе перенос запрещен. Другими словами две согласных справа от переноса запрещено кроме некоторых случаев.
Таких случаев пока 1 - сочетание "ств" справа.

Кстати для вопроса Димы: варианты а) и в) получаются разрешенными.

Применение этого правила запрещает в некоторых случаях верные переносы, но зато резко сокращает ошибки.

Выкладываю свои правила на текущий момент:
/*
Правила работы поиска места переноса в слове:
Функция получает: слово и позицию, начиная с которой надо найти позицию правильного переноса в слове
1. Алгоритм сдвигается по слову влево, пока не найдёт точку переноса или возвращает значение "нельзя переносить".
2. Крайние символы самостоятельно не переносятся.
3. Оценивается наличие не более трех "знаков препинания" в правой стороне слова левее позиции переноса.
Для выполнения правила 2 справа.
4. Оценивается наличие не более трех "знаков препинания" в начале слова.
Для выполнения правила 2 слева.
Если слева или справа больше "знаков препинания" чем 3, то перенос этого слова не гарантирует
правильность.
-----------------------------------------------------------------------------------
Цикл (Сдвинуть место переноса левее (если слово кончилось, вернуть: "нельзя переносить" - конец функции))
5. Если найдено место переноса:
- (согласная ("ъ" или "ь") - гласная) или (гласная, затем "й" - гласная)
идём к 6.1 и последовательно ниже
- гласная - гласная (если левая гласная - это окончание приставки "при", "пре" или "про")
идём к 6.5
- гласная - согласная (если левая гласная - это окончание приставки "при", "пре" или "про")
идём к 6.5
- (гласная - согласная) или (согласная - согласная (если правая согласная не "ъ" или "ь")
идём к 6.1 и последовательно ниже
Если ничего по п.5 не подошло - перейти в начало цикла.
----------------------------------------------------------------------------------
6. Нельзя переносить (проверяется, для каждой найденной точки переноса по правилам п.5.)

6.1 - если правее, правой согласной буквы, стоит "ь";
6.2 - если слева или справа две одинаковых согласных;
6.3 - если слева или справа две одинаковых гласных;
6.4 - если правее правой согласной не гласная буква, за исключением буквосочетания "ств";
6.5 - если или слева или справа от предполагаемого места переноса нет гласной буквы (не непосредственно слева/справа, а в левой/правой части слова. Это запретит перенос слова из одного слога, например: "вдруг" или запретит например: "вд-ругой" или "упорядочи-ть".)
Если запретов не найдено вернуть позицию места переноса - конец функции.
При выполнении первого найденного запрета - перейти в начало цикла.
----------------------------------------------------------------------------------
Примечание: к "знаку препинания" относятся символы .,/()[]{}!"'№;\%:?*-+=<>
*/

К сожалению пришлось эти правила написать несколько в виде алгоритма, что - бы была видна вся картина действий.

Пока алгоритм не идеален и, в частности, хотелось бы найти ответы на следующие вопросы:

Ошибки:
спецп-рокуратурой, спецс-лужбой, предс-тавитель.

Новое правило запретило правильные переносы:
(хотя, повторяюсь, сильно сократило ошибки)
Вариант б) Димы: чувс-тво,
рас-стоянии, нер-вно, ме-ста, упу-стить, кре-стьянским, карель-ской, кон-кретного, не-много, рас-сказывал.

И вопрос стоящий с самого начала работы - как разрешить перенос гласная - гласная? В большинстве случаев это не правильный перенос, но например в нижеуказанных был - бы правильный:
кута-ясь, наде-ясь, засме-явшись, радио-обмен, вы-езжать, со-образительный, хво-инки, по-озирался, стреля-ют, Ге-оргий, специ-альной, не-обходимой, сто-яла.

Кое что уже несколько проясняется в описанных проблемах, но без набора б'ольшей статистики, я, как не специалист в вопрсах русского языка, не могу переносить в категорию "выводы".
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Аватара пользователя
Хорхе7
заслуженный писатель форума
заслуженный писатель форума
Сообщений в теме: 4
Всего сообщений: 323
Зарегистрирован: 01.07.2007
Откуда: Москва

Сообщение Хорхе7 » 24 сен 2007, 20:17

Andrey:Вы неправильно поняли - это извращенная формулировка запрета на перенос
Как же можно переносить, если нет гласных в обеих частях?
Вот уж теперь, действительно, не понял... :shock:

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 24 сен 2007, 20:29

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

Добавлено спустя 2 минуты 13 секунд:
Хорхе7:
Andrey:Вы неправильно поняли - это извращенная формулировка запрета на перенос
Как же можно переносить, если нет гласных в обеих частях?
Вот уж теперь, действительно, не понял... :shock:
Мыслите правильно - если в слове одна гласная или все гласные остались левее или правее места переноса, то это не правильный перенос.
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 25 сен 2007, 23:40

Несколько погорячился выкладывая предыдущий большой пост и результат в виде файла.
Обнаружил ошибки, причем как в алгоритме, так и чисто программные, здесь не видимые.
Сегодня поработал, можно, как говориться поставить точку с запятой.

Что получилось выкладываю ниже.
/*
Правила работы поиска места переноса в слове:
Функция получает: слово и позицию, начиная с которой надо найти позицию правильного переноса в слове
1. Алгоритм сдвигается по слову влево, пока не найдёт точку переноса или возвращает значение "нельзя переносить".
2. Крайние символы самостоятельно не переносятся.
3. Оценивается наличие не более трех "знаков препинания" в правой стороне слова левее позиции переноса.
Для выполнения правила 2 справа.
4. Оценивается наличие не более трех "знаков препинания" в начале слова.
Для выполнения правила 2 слева.
Если слева или справа больше "знаков препинания" чем 3, то перенос этого слова не гарантирует правильность.
--------------------------------------------------------------------------------
Цикл (Сдвинуть место переноса левее (если слово кончилось, вернуть: "нельзя переносить" - конец функции))
5. Ищем место переноса:
5.1 - если (позиция переноса == 3) и (первые 4 буквы == "пред")
(здесь, предположительно, будет обращение к словарю с вопросом на запрет переноса "пред-...")
идём к 6.6 и последовательно ниже
5.2 - если (позиция переноса == 2) и (первые 3 буквы == "пре" или "при" или "про")
(здесь, предположительно будет обращение к словарю с вопросом на запрет переноса "при-...", "пре-...", "про-...")
5.2.1 если (буква 3 != "д") - перейти в начало цикла (здесь, предположительно, будет обращение к словарю с вопросом на разрешение переноса "пре-д...", "про-д...")
5.2.2 если (буква 3 != "й") - перейти в начало цикла
идём к 6.6 и последовательно ниже
5.3 - если (согласная ("ъ" или "ь") - гласная) или (гласная, затем "й" - гласная)
идём к 6.1 и последовательно ниже
5.4 - если (гласная - согласная) или (согласная - согласная (если правая согласная не "ъ" или "ь")
идём к 6.1 и последовательно ниже
Если ничего по п.5 не подошло - перейти в начало цикла.
----------------------------------------------------------------------------------
6. Нельзя переносить (проверяется, для найденной точки переноса по правилам п.5.)

6.1 - если правее, правой согласной буквы, стоит "ь";
6.2 - если правее правой согласной не гласная буква, за исключением буквосочетания "ств";
(здесь, предположительно, будет обращение к словарю с вопросом на разрешение переноса, если правее две согласных)
6.3 - если (позиция переноса == 4) и (первые 4 буквы == "пред")
6.4 - если (позиция переноса == 3) и (первые 3 буквы == "пре" или "при" или "про")
6.5 - если (позиция переноса == 2) и (первые 3 буквы == "пре" или "про") и (буква 3 == "д") (здесь, предположительно, будет обращение к словарю с вопросом на разрешение переноса "пре-д...", "про-д...")

6.6 - если слева или справа две одинаковых согласных;
6.7 - если слева или справа две одинаковых гласных;
6.8 - если или слева или справа от предполагаемого места переноса нет гласной буквы.
Если запретов не найдено вернуть позицию места переноса - конец функции.
При выполнении первого найденного запрета - перейти в начало цикла.
----------------------------------------------------------------------------------
Пояснения:
1. Может показаться, что проверка 6.5 лишняя, но дело в том, что может быть найдено место:
про-д (пре-д) по правилам п.5.4 - этот вариант надо запретить;
2. К "знаку препинания" относятся символы .,/()[]{}!"'№;\%:?*-+=<>
3. Позиции считаются начиная с нуля (количество считается как и обычно 1, 2, 3 и т. д.);
4. "перейти в начало цикла" означает, что в данной точке перенос не разрешен - проверяем сл. точку - левее;
5. Пока я упускаю правильную обработку слов написанных без пробелов через дефис, например: "Вообще-то".
*/

Добавлено спустя 7 минут 25 секунд:

Более ранние вопросы остаются в силе, к ним добавляется:

Ошибки:
пред-елах, пред-елами,
пред-упреждаю, пред-упрежден, пред-упредил, пред-упреждением, пред-упредили, пред-упредительно, пред-упредить, пред-упредила,
пред-атель, пред-ательства, пред-атели, пред-али, пред-аваться, пред-ательское,
пред-остаточно, пред-отвратить(ошибка?), пред-ыдущие,
пред-ъявить, при-нципиальности, при-нципе,
при-нтер, про-чный, про-звище, про-сьбе, про-бный,
про-нзительными, про-чности, про-шлая,

Мне кажется, хотя хотелось - бы ошибаться, что эти ошибки, написанные ранее, разрешение некоторых переносов с двумя согласными правее, разрешение некоторых переносов гласная - гласная - это уже вопросы словаря с соответствующими словами.

Пока до свидания на несколько месяцев (если не будет вопросов ко мне или комментариев).

Желающие могут ознакомиться с моей "точкой с запятой" ниже.
Книги с переносами.rar
Книги с переносами.
(475.53 КБ) 638 скачиваний
Программа переноса слов.part2.rar
Программа ч2 архива
(430.73 КБ) 660 скачиваний
Программа переноса слов.part1.rar
Программа ч1 архива
(976.56 КБ) 893 скачивания
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Аватара пользователя
Хорхе7
заслуженный писатель форума
заслуженный писатель форума
Сообщений в теме: 4
Всего сообщений: 323
Зарегистрирован: 01.07.2007
Откуда: Москва

Сообщение Хорхе7 » 30 сен 2007, 21:17

Дима:А как насчёт слова "чувство"
Ну и что? Нужен вариант переноса, а не все варианты. По-моему.
Прочёл алгоритм иочень удивлюсь, если он будет работать верно.
Не понял обращение к словарю. Это - возможно? Если так, то тогда задача перестала быть интересной. Я думал, что в том-то и соль вся - придумать общий алгоритм переноса, используя только общие нотации, правила. Выработать универсальный алгоритм. Он должен уметь перносить слово "кракозябра" etc.
А так... :отказать:

Аватара пользователя
Дима
поэт-прозаик
поэт-прозаик
Сообщений в теме: 7
Всего сообщений: 235
Зарегистрирован: 22.08.2007
Откуда: Финляндия, Espoo
Контактная информация:

Сообщение Дима » 30 сен 2007, 22:08

Я просто хотел узнать, действительно ли слово "чувство" можно переносить всемя тремя способами. К программе отношения не имел.
_____
_/ Дима )
`O------O'

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 01 окт 2007, 20:21

Хорхе7: А так... :отказать:
:D

Торопитесь с выводами господа.

Во первых я не представляю здесь свой труд, а пришел за советами, см. п."во вторых", плюс обобщаю и воплощаю свои мысли, наблюдения и, естественно, советы форумчан.

Во вторых, разработать такой алгоритм - задача не программиста, а специалиста в предметной области. Если будут дельные советы в дальнейшем, то с удовольствием их обобщу и воплощу.

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

В четвертых словарь не должен содержать слова, как таковые, а должен содержать части слов (поясню ниже) и охватывать именно редкие случаи которые надо запретить из разрешенных или разрешить из запрещенных.

Создать программу, которая будет переносить пользуясь словарем, очень просто, НО:
оцените объем словаря со всеми вариантами переносов всех слов - раз, объем работы по созданию такого словаря - два и представьте, например Word, который (с включенной расстановкой переносов) после каждого ввода символа будет тормозить несколько секунд - расставляя переносы в абзаце - вам такой Word нужен?

Хотелось - бы не критики, а помощи (в максимальном отказе от словарей путём нахождения правил, которые будут разрешать/запрещать переносы и не будут плодить ошибок), и, в результате, надеюсь появится бесплатный алгоритм переносов слов для всех желающих.

P.S.
Кто смотрит работу программы - не обращайте внимание на неправильный перенос слов со знаками препинания справа - это программная ошибка - я её выявил и устранил.
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Аватара пользователя
Хорхе7
заслуженный писатель форума
заслуженный писатель форума
Сообщений в теме: 4
Всего сообщений: 323
Зарегистрирован: 01.07.2007
Откуда: Москва

Сообщение Хорхе7 » 01 окт 2007, 20:42

Це дiло!
Andrey:лучше немного запретить, чем делать кучу ошибок
Золотые слова!
Andrey:словарь не должен содержать слова, как таковые, а должен содержать части слов
Вот где собака порылась! Это меняет картину. Я, видимо, просто не понял...
Andrey:вам такой Word нужен
Нет-нет! Такой Ворд нам не нужен!
Andrey:Хотелось - бы не критики, а помощи
Буду думать.

Автор темы
Andrey
дьяк
дьяк
Сообщений в теме: 27
Всего сообщений: 34
Зарегистрирован: 09.09.2007

Сообщение Andrey » 01 окт 2007, 21:26

Все знают Word и насчет Word-а - это конечно просто пример - Word переносит нормально и быстро - иначе как бы MS требовал за свое детище кучу бабок.

Надо подразумевать приложение куда будет встраиваться наш алгоритм.

Как раз вчера, к слову "крякозябра" сказать :) , написал в программу тестовую функцию которая выводит все варианты переноса для каждого слова в тексте.

Вот что получилось (это простое слово в плане переносов):
кра-козябра крако-зябра кракозяб-ра

Если нужен вариант "кракозя-бра", то его надо записать в словарь, например так: "озя-бра" или "за-бр" (хотя, повторюсь, создание такого словаря не совсем задача программиста).

Пока нового не буду ничего выкладывать подожду (более поздней версии программы :D ).

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

2. Словарь дополнительных запретов:
"спецп-рокур", "спецс-лужб", "присутст-ву", "неп-роявл", "благоп-рият", "фроб-ло", "пред-ел", "пред-упр", "пред-ат", "пред-ал", "пред-ав", "пред-ост", "пред-ы", "пред-ъ", "при-нци", "при-нт", "про-чн", "прод-ав", "про-сь", "про-бк", "про-бн", "про-нз", "прод-олж"

3. Словарь разрешения переносов гласная-гласная:
(вынес отдельно для ускорения работы прогриммы, входим в этот словарь только если гласная-гласная)
"та-ясь", "де-ясь", "сме-яв", "вы-езж", "во-ин", "ля-ют", "ге-ор", "во-их", "ци-аль", "не-об", "то-ял", "ро-ят", "сме-ял", "за-од", "ци-аль", "ри-ум", "на-еш"

Как вариант, когда эти словари разрастутся можно их проанализировать на предмет выявления правил переносов.
Но, думаю уже вряд-ли можно будет выявить правила охватывающие много однотипных случаев.
А вместо использования словарей плодить большое количество правил - то же не правильный путь ведущий к замедлению работы программы и еще к запутыванию исходного кода.
Английский без зубрежки http://easy-study-english.blogspot.com/p/blog-page.html

Ответить Пред. темаСлед. тема
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Правила переноса слов
    vadim707 » 21 сен 2008, 09:09 » в форуме Орфография
    5 Ответы
    2725 Просмотры
    Последнее сообщение Герман
    04 окт 2008, 08:48
  • Правила переноса слов
    5 Ответы
    9224 Просмотры
    Последнее сообщение Марго
    18 сен 2013, 18:07
  • Новые правила переноса
    15 Ответы
    14248 Просмотры
    Последнее сообщение slava1947
    30 ноя 2012, 18:52
  • Что за правила чередования согласных, кажется, в корне слов?
    Владимирр » 16 апр 2013, 19:04 » в форуме Морфология
    7 Ответы
    2367 Просмотры
    Последнее сообщение Владимирр
    17 апр 2013, 09:04
  • Разделить для переноса слово "конечно"
    mtk81 » 24 сен 2012, 10:10 » в форуме 4 класс
    5 Ответы
    3250 Просмотры
    Последнее сообщение Марго
    24 сен 2012, 11:48