Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1184572332
L2
2007-07-16 11:52
2007.08.12
Вычисляемые поля


2-1184651979
..::KraN::..
2007-07-17 09:59
2007.08.12
Безопасное извлечение Flash устройства


11-1167225125
mixail_shar
2006-12-27 16:12
2007.08.12
функция NewKOLStrList KOL


11-1167313840
D[u]fa
2006-12-28 16:50
2007.08.12
Memo.Add


3-1177497099
snaks
2007-04-25 14:31
2007.08.12
Объединение ячеек в DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский