Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.12;
Скачать: CL | DM;

Вниз

Поиск   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.039 c
1-1180448040
DevilDevil
2007-05-29 18:14
2007.08.12
TListBox.MultySelect.DragDrop.


2-1184349062
RIMED
2007-07-13 21:51
2007.08.12
весь текст в буфер


3-1177412617
DelphiN!
2007-04-24 15:03
2007.08.12
Очень долгий Insert в таблицу БД FireBird 1.5


15-1184238783
Megabyte
2007-07-12 15:13
2007.08.12
Правила формирования xml-файлов


15-1184382310
Riply
2007-07-14 07:05
2007.08.12
Велик могучим С++ языка ! :)