Форум: "Прочее";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
ВнизПоиск Найти похожие ветки
← →
Gydvin © (2007-07-09 17:49) [0]Нигде случайно не попадался словарь переносов русского языка? В текстовом формате самое оно.
Очень нужно.
← →
Правильный Вася (2007-07-09 17:50) [1]в любом языке перенос - это минус
← →
Gydvin © (2007-07-09 18:04) [2]Не перенос - плюс?
← →
Правильный Вася (2007-07-09 18:08) [3]пробел
← →
Gydvin © (2007-07-09 18:14) [4]Ну-ну
← →
Grom PE © (2007-07-09 18:35) [5]http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries/hyph_ru_RU.zip
Но как им пользоваться, я не вникал.
← →
Gydvin © (2007-07-09 18:56) [6]Спасибо, буду разбираться.
Может у кого, еще что ни будь имеется? На случай, если с этим не разберусь или пообъемнее.
← →
oldman © (2007-07-09 19:06) [7]Если память не изменяет, по новым правилам переносить можно В ЛЮБОМ месте, но так, чтобы не переносилась одна буква!
← →
VirEx © (2007-07-09 19:09) [8]за-
чем сло-
варь?
от-
крой лю-
бой учеб-
ник по рус-
скому язы-
ку, там чет-
ко и яс-
но опи-
са-
ны пра-
ви-
ла пе-
ре-
но-
са-
← →
Юрий Зотов © (2007-07-09 23:21) [9]> VirEx © (09.07.07 19:09) [8]
Угу. Перенос делается по слогам, одна буква от слова и от его корня не отрывается - и т.д.
Теперь попробуйте эти правила запрограммировать без словарей. А мы посмеемся.
← →
VirEx © (2007-07-09 23:30) [10]
> [9] Юрий Зотов © (09.07.07 23:21)
а что лучше: запихать всё огромное количество сочетаний переноса в базу, притом полной эта база не будет, или определить что такое слог (на основе гласных и согласных, ведь их - число ограничено), внести окончания, внести некоторые исключения при переносе и т.д.?
ничего собственно невыполнимого не вижу.
← →
Юрий Зотов © (2007-07-09 23:32) [11]> VirEx © (09.07.07 19:09) [8]
Я почему так говорю - потому что такой алгоритм (перенос без словарей) писал. И он даже работал. И даже процентов на 80 не ошибался (по крайней мере, при тестировании).
Но пока я этого добился, успел понять, что 100-процентная безошибочность недостижима даже со словарями, а уж без них - и мечтать нечего.
← →
TUser © (2007-07-09 23:33) [12]> Юрий Зотов © (09.07.07 23:21) [9]
Afaik, ОРФО так и работает. Не такие уж и сложные правила разбиения на слоги в русском языке.
← →
Юрий Зотов © (2007-07-09 23:35) [13]> VirEx © (09.07.07 23:30) [10]
> ничего собственно невыполнимого не вижу.
Вы сначала попробуйте, тогда и увидите. Даже разбивка на слоги - уже нетривиальная задача, а когда дело дойдет до выделения корня - полная радость настанет.
← →
Johnmen © (2007-07-09 23:36) [14]Вот базовые правила
http://spravka.gramota.ru/pravila.html?perenos.htm
там же можно найти и современные дополнения/изменения.
← →
Yanis © (2007-07-09 23:37) [15]Это английский можно запрограммировать, а великий и могучий русский нет :)
http://spravka.gramota.ru/pravila.html?perenos.htm
← →
Юрий Зотов © (2007-07-09 23:39) [16]Так. Пустословие заканчиваем. Я это ДЕЛАЛ, с эти вопросами сталкивался РЕАЛЬНО и знаю, что говорю.
Все желающие спорить - СНАЧАЛА попробуйте СДЕЛАТЬ, а ПОТОМ спорьте.
Если после РЕАЛЬНОЙ пробы желание спорить еще останется.
← →
MsGuns © (2007-07-10 00:26) [17]>Юрий Зотов © (09.07.07 23:39) [16]
Я это делал тоже. Сначала на ЕС-ском ассемблере, потом на СМ.., потом на PAL. И еще пять тысяч человек тоже делали. Конечно, не 100%, но очень близко к 100. Для подавляющего кол-ва текстов, не отличающихся высокохудожественностью, вполне удобоваримо.
Алгоритм, кстати, весьма тривиальный.
Иногда, правда, очень интересно переносит, но очень редко ;)
← →
Юрий Зотов © (2007-07-10 00:44) [18]> MsGuns © (10.07.07 00:26) [17]
Когда программа работает "вполне удобоваримо", я почему-то вспоминаю осетрину второй свежести.
← →
VirEx © (2007-07-10 01:05) [19]вот пример функции, показывающая двух-буквенные слоги
function WordToSlog(str:string):string;
function UpString(str:string):string;
var
i:integer;
a,b:char;
begin
result:=str;
for i:=1 to length(Result) do
case Result[i] of
"а".."я": Dec(Result[i], 32);
end;
end;
{
ищет в строке str с позиции index комбинацию из всех комбинаций согласной s и гласной g
}
function slog(str:string; index:integer; s,g:array of string):boolean;
var
i,y:integer;
s_,l_:string;
begin
result:=false;
for i:=0 to length(s)-1 do
for y:=0 to length(g)-1 do begin
s_:=UpString((s[i]+g[y]));
l_:=UpString(copy(str,index,2));
if s_=l_ then begin
result:=true;
exit;
end;
end;
end;
const
//а б в г д е ё ж з и к л м н о п р с т у ф х ц ч щ ь ъ э ю я
s : array[1..19] of string =("б","в","г","д","ж","з","к","л","м","н","п","р","с","т","ф","х","ц","ч","щ");
g : array[1..10] of string =("а","е","ё","и","о","у","э","ю","я","ы");
word_iskl : array[1..3] of string =("Азия","узнаю","фойе");
//slog_iskl : array[0..2] of string =("баж");
var
i:integer;
begin
result:="";
for i:=1 to high(word_iskl) do
if str=word_iskl[i] then exit;
for i:=1 to length(str) do
if slog(str,i,s,g) then
result:=result+" "+ copy(str,i,2);
end;
сначало было желание сделать проверку еще на 3х буквенные и более слоги, но! вот примеры:
караганда - ка ра га да
ставка - та ка
птенец - те не
ну и т.д.
глядя на результаты, можно даже обойтись без лишнего массива корней :)
это основные слоги, их стОит всего лишь "закрыть" по краям недостающими буквами и дело в шляпе ;)
← →
Юрий Зотов © (2007-07-10 01:16) [20]> VirEx © (10.07.07 01:05) [19]
Вы это серьезно?
А в той же, хотя бы, "Караганде" вы букву "н" куда приплюсовывать будете - к последнему слогу, или к предпоследнему? А букву "в" в слове "ставка"? А что Вы будете делать, например, с четырехбуквенными слогами? А как быть с правилом "не отрывать букву от части слова"? И т.д.
Не смешите. Если бы эта задача решалась так просто, то она давно была бы решена.
← →
VirEx © (2007-07-10 01:24) [21]счас счас, идёт креатиф)
← →
VirEx © (2007-07-10 02:12) [22]вобщем это оказалось самым сложным)
принцип окружения слога таков:
караганда - ка ра ган да
ставка - став ка
птенец - пте нец
тоесть к слогу прибавляется все символы до следующего слога,
если данный слог еще и первый, то к слогу вначале добавляются первые недостающие символы, вот и всё.
но у меня какие-то заморочки с copy(), мозги не варят, всётаки лягу спать, ибо на работу)
← →
Gydvin © (2007-07-10 07:22) [23]Господин VirEx, у меня к Вам большая просьба, не ешьте мне моск. Да я слышал, что существуют правила русского языка, и даже читал пару из них )). Тем более имеется у меня отличнейший, за пару лет перепроверенный, алгоритм автоматического переноса слов, работает он очень хорошо, ошибается, можно сказать, что мало, так что писать аналогичный алгоритм не вижу смысла. И тем не менее я настаиваю, что для более качественного переноса нужно делать на словарях или шаблонах. Если их должным образом проиндексировать то и "носиться" по словарю особо не придется. Как правильно говорит ЮЗ попробуйте сначала правильно выделить корень и т.д и т.п
← →
Gydvin © (2007-07-10 07:33) [24]Просто меньше всего хотелось бы самому набивать этот словарь
← →
boriskb © (2007-07-10 07:39) [25]Юрий Зотов © (09.07.07 23:32) [11]
такой алгоритм (перенос без словарей) писал. И он даже работал. И даже процентов на 80
Аналогично.
Это одна из подмножества задач, которые на 80 % решаются без особых проблем, но 100%-ого верного срабатывания добиться черезвычайно сложно.
Последние 5% требуют огромных и усилий и мощностей.
← →
Юрий Зотов © (2007-07-10 09:36) [26]> VirEx © (10.07.07 02:12) [22]
> к слогу прибавляется все символы до следующего слога,
> если данный слог еще и первый, то к слогу вначале добавляются первые
> недостающие символы, вот и всё.
Жаль Вас. Чтобы придумать эти правила, Вы мучались до 2-х часов ночи - но нужна, увы, всего пара минут, чтобы все Ваши мучения свести к нулю:
пионер
сутенер
автомобиль
и т.д.
А самое печальное, что так будет каждый раз, сколько бы доработок Вы ни вносили. Просто потому что алгоритма переноса слов русского языка НЕ СУЩЕСТВУЕТ.
Вот и все
© ViREx.
:o)
← →
VirEx © (2007-07-10 19:23) [27]
> [26] Юрий Зотов © (10.07.07 09:36)
> > VirEx © (10.07.07 02:12) [22]
>
> > к слогу прибавляется все символы до следующего слога,
> > если данный слог еще и первый, то к слогу вначале добавляются
> первые
> > недостающие символы, вот и всё.
>
> Жаль Вас. Чтобы придумать эти правила, Вы мучались до 2-х
> часов ночи
придумать то получилось сразу, а вот реализовать
> но нужна, увы, всего пара минут, чтобы все Ваши мучения
> свести к нулю:
> пионер
> сутенер
> автомобиль
> и т.д.
что вы этим хотели сказать? эти слова нельзя перевести? или как их правильно по вашему нужно переводить?
← →
Юрий Зотов © (2007-07-10 20:49) [28]> VirEx © (10.07.07 19:23) [27]
Я этим хотел сказать, что правило
> к слогу прибавляется все символы до следующего слога
для этих слов (и еще, наверное, пары миллионов слов) не подходит. В них (и еще, наверное, в паре миллионов слов) последний слог начинается с согласной и она относится именно к последнему, а не к предпоследнему слогу.
Пара миллионов - это все слова, которые:
- имеют суффикс "ск" (кстати, ОЧЕНЬ распространенный);
- прилагательные (во всех родах!!!), оканчивающиеся на "ный", "кой" и еще на целую кучу подобных окончаний (кстати, таких прилагательных ОЧЕНЬ много);
- и огромная куча других.
Так что правило это никуда не годится. Если Вам еще не надоело это занятие, попробуйте придумать взамен него что-то другое.
Если получится, конечно.
:о)
И если все же получится, то таким образом мы сможем покончить с МЕЛКИМ вопросом "к какому двубуквенному слогу добавлять промежуточные буквы" и перейти к ГОРАЗДО более сложным вопросам. Например, к безсловарному алгоритму разбивки слов не на слоги, а на части слов (приставка-корень-суффикс-окончание).
Вот уж где повеселимся-то...
:о)
← →
MsGuns © (2007-07-10 21:39) [29]Почетму-то мильону народы едят шашлыкы с диким удовльствием, не подозревая, что они приготовлены вовсе не по рецепту. Наверное, нет на них похвесора ;)
← →
Юрий Зотов © (2007-07-10 22:23) [30]> MsGuns © (10.07.07 21:39) [29]
Нет, они просто никогда не пробовали шашлыков, приготовленных ПО рецепту.
Поэтому они, бедняги, просто не знают, что такое шашлык. И чем он отличается от того, что они едят. И как оно называется на самом деле.
← →
Gydvin © (2007-07-10 23:18) [31]
> Почетму-то мильону народы едят шашлыкы с диким удовльствием,
> не подозревая, что они приготовлены вовсе не по рецепту.
> Наверное, нет на них похвесора ;)
Все бы фигня, так бы и продолжали его есть, если бы не нашелся один довольно крупный любитель "шашлыка", который оказался по совместительству похвесором, а терять не охота, вручную тоже делать порядком придолбало. Кроме того, есть желание еще пару "шашлычниц" открыть, освоить так сказать рынок, в который лучше сразу входить с хорошим качеством. ))
← →
TUser © (2007-07-11 00:19) [32]Вот тут проблема, кажется, только со словами вроде "москва", "краска" и т.д. (с буквами ск). Есть ли другие? Но это написано минут за сорок мною. Наверняка, если бы этим занимался программист на полном рабочем дне + лингвист с ним в связке, то за неделю все трудности бы поймали. Ну, может быть, маленький словарь исключений.
{$apptype console}
const
glas = ["ё", "у", "е", "ы", "а", "о", "я", "и", "ю", "э"];
znaki = ["ь", "ъ"];
type
TSlogs = array of
record
Start, Finish: integer;
end;
TWord =
record
Wrd: string;
Slogs: TSlogs;
Flags: array of boolean;
FreeLetters: integer;
end;
procedure InitWord (var Word: TWord);
var i, j: integer;
begin
with Word do begin
for i := 1 to length (Wrd) do
if not (Wrd[i] in ["а".."я","ё"]) then
writeln ("Incorrect word; the result will be invalid");
j := 0;
for i := 1 to length (Wrd) do
if Wrd[i] in glas then
inc (j);
SetLength (Slogs, j);
SetLength (Flags, length (Wrd));
FreeLetters := length (Wrd) - j;
if j = 0 then begin
SetLength (Slogs, 1);
Slogs[0].Start := 1;
Slogs[0].Finish := length (Wrd);
SetLength (Flags, 1);
for i := 0 to length (Wrd) - 1do
Flags[i] := true;
FreeLetters := 0;
exit;
end;
for i := 0 to length (Wrd) - 1 do
Flags[i] := false;
j := 0;
for i := 1 to length (Wrd) do
if Wrd[i] in glas then begin
Slogs[j].Start := i;
Slogs[j].Finish := i;
Flags[i-1] := true;
inc (j);
end;
end;
end;
procedure DetectSlogs (var Word: TWord);
var i, j: integer;
begin
with Word do
while FreeLetters > 0 do begin
for i := length (Slogs) - 1 downto 0 do begin
j := Slogs[i].Start;
if j > 1 then begin
dec (j, 2);
if not Flags[j] then
if not (Wrd[j+1] in znaki) then begin
Flags[j] := true;
dec (Slogs[i].Start);
dec (FreeLetters);
end;
end;
j := Slogs[i].Finish;
if j < length (Wrd) then
if not Flags[j] then begin
Flags[j] := true;
inc (Slogs[i].Finish);
dec (FreeLetters);
end;
end;
end;
end;
function WordSlogs (const Word: TWord): string;
var i, j, k: integer;
begin
with Word do begin
SetLength (result, length (Wrd) + length (Slogs) - 1);
for i := 1 to Slogs[0].Finish do
result[i] := Wrd[i];
j := Slogs[0].Finish + 1;
for i := 1 to length (Slogs) - 1 do begin
result[j] := "-";
inc (j);
for k := Slogs[i].Start to Slogs[i].Finish do begin
result[j] := Wrd[k];
inc (j);
end;
end;
end;
end;
var Word: TWord;
begin
Word.Wrd := "алгоритм";
InitWord (Word);
DetectSlogs (Word);
writeln (WordSlogs (Word));
end.
Хотя, про орфу я был не прав, у них там есть файлик EXPLAIN.DIC, наверняка, словарь, а слова, которых там нет, наверное чем-то подобным обрабатывают.
← →
Юрий Зотов © (2007-07-11 01:06) [33]> TUser © (11.07.07 00:19) [32]
> Вот тут проблема, кажется, только со словами вроде "москва", "краска" и
> т.д. (с буквами ск).
Это только кажется. Проблема с очень многими словами, в середине которых есть слог, начинающийся с нескольких согласных. Программа не знает, куда относить первую из них - к предыдущему слогу, или к следующему.
И не узнает, потому что возможен и тот, и другой вариант. А чтобы определить, какой вариант в данном конкретном случае правильный, нужно разбивать слово на его части (а не на слоги) и по ним уже смотреть, куда относится проблемная буква. А чтобы разбить слово на части, придется сначала написать искусственный интеллект, а потом еще и обучить его русскому языку. После чего можно смело бежать за Нобелевкой. Дадут точно.
Так что "если бы этим занимался программист на полном рабочем дне + лингвист с ним в связке, то за неделю все трудности бы поймали" - это немножко преувеличено. Геморрой за эту неделю они бы поймали, вот это уж наверняка.
PS
Всем, кто верит, что эту задачу можно решить за неделю (месяц, год): ну задумайтесь хотя бы на секунду - почему же в таком случае ее до сих пор не решили и тупо пишут словари переносов? Неужто дураки сидят, а?
← →
MsGuns © (2007-07-11 01:19) [34]>Это только кажется. Проблема с очень многими словами, в середине которых есть слог, начинающийся с нескольких согласных. Программа не знает, куда относить первую из них - к предыдущему слогу, или к следующему.
Можно сколь угодно долго раглагольствовать на эту тему, тем более русский язык с его неоднозначностью и полиморфимом к тому располгает.
Но если подойти к проблеме с инженерной (не прохвесорской) точки зрения, то все сводится к тому, что перенос нужен всего-навсего для экономного расположения текста и, если при этом смысл фразы не теряется и слова заведомо не коверкаются, не теряется СМЫСЛ всей фразы, то допустимы и некоторые нарушения правила переноса - главное, чтобы написанное было понято. Не так ли ?
Хотя придраться, конечно, можно и к телеграфному столбу. Особенно если очень хочется доказать кому-то что-то ;)
← →
Германн © (2007-07-11 01:23) [35]
> PS
> Всем, кто верит, что эту задачу можно решить за неделю (месяц,
> год): ну задумайтесь хотя бы на секунду - почему же в таком
> случае ее до сих пор не решили и тупо пишут словари переносов?
> Неужто дураки сидят, а?
Аргумент слабоват, однако. :)
Но тем кто верит, что эту задачу можно решить за неделю (месяц,
> год) всё равно облом. :)
← →
Юрий Зотов © (2007-07-11 01:27) [36]> MsGuns © (11.07.07 01:19) [34]
"Смысл фразы не теряется и слова заведомо не коверкаются, не теряется СМЫСЛ всей фразы" даже если переносить ВООБЩЕ без всяких правил.
Вставил черточку где попало - и всех дел.
Как слышецца - так пишецца. Даешь революцию троечников!
← →
MsGuns © (2007-07-11 01:30) [37]>Юрий Зотов © (11.07.07 01:27) [36]
>"Смысл фразы не теряется и слова заведомо не коверкаются, не теряется СМЫСЛ всей фразы" даже если переносить ВООБЩЕ без всяких правил.
Неужели ? А привести пару "веселых" переносов ? Чтобы смысл фразы АБСОЛЮТНО изменился, а ? Если, конечно, самому слабО
← →
Юрий Зотов © (2007-07-11 01:43) [38]> MsGuns © (11.07.07 01:30) [37]
А слабо ПРОЧИТАТЬ, что было написано?
← →
Petr V. Abramov © (2007-07-11 02:08) [39]>Юрий Зотов © (11.07.07 01:27) [36]
>> MsGuns © (11.07.07 01:19) [34]
> "Смысл фразы не теряется и слова заведомо не коверкаются, не теряется
> СМЫСЛ всей фразы" даже если переносить ВООБЩЕ без всяких правил.
off но рядом с сабж :)
русский язык могучеее, чем тут думают :)
знаю, что баян, но не все его знают :)
читать после ++++
Прочитали? Как романтично, не правда ли? Но не забывайте, Пьер - мужик,
а у нас, мужиков, у всех одно и то же на уме. Не верите? Прочитайте
письмо через строчку, начиная с первой, и убедитесь сами...
+++++++++++++++++++++++++++++++++++++++++++++++
Письмо Пьера Безухова Наташе Ростовой. 1807 г. (Читать до конца;
Пунктуация и речевые особенности того времени сохранены)
Дорогая Наташа, в тот великолепный летний вечер,
когда я встретил вас на балу у императора,
я понял, что всю жизнь хотел иметь
жену, такую же прекрасную, как и вы. Я глядел на
вас весь вечер, не отрываясь ни на минуту,
всматривался в ваше малейшее движение, пытался заглянуть
в каждое, пусть самое маленькое, отверстие
вашей души. Я ни на секунду не отводил глаз от
вашего великолепного тела. Но увы, все мои усилия,
чтобы привлечь ваше внимание были безуспешны. Я думаю, что
будут лишь пустой тратой времени
все мольбы и обещания с моей стороны.
Ибо я знаю, что у меня слишком маленький
статус в империи. Достоен вас лишь королевского двора постоянный
член. Но все же хочу вас заверить, что
вы самое прекрасное существо на свете.
Я никогда, никогда не встречал такой у-
дивительной женщины, которая так много сделала для нашей
родины. И лишь ваша преогромнейшая
скромность скрывает это. Мой сердце разрывает
грудь, заставляет желать вас!
Наташа, я люблю вас!
Пьер Безухов
21.X.1807
← →
Джо © (2007-07-11 04:23) [40]Ребята, о чем вы говорите? О какой формализации? Даже о термине «слог» в русской лингвистистике существует несколько различных мнения. Не говоря уж о «правилах переноса».
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
Память: 0.59 MB
Время: 0.044 c