Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

переводчик


Страницы:   1 2

bagle ©   (2005-07-25 02:05:00) 

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


Плохиш   (2005-07-27 12:12:00) [1]


> так как я уже написал сам переводчик,остаются такие мелкие
> проблемы, которые требуют вмешателсва опытного програмиста

Мая плякаля :'-) Для написания переводчиков оказывается не требуются опытные программисты, а для разбора текста требуются.

PS. Давайте орешник обновим ;-)


bagle   (2005-07-27 11:59:00) [2]

up


bagle   (2005-07-26 23:20:00) [3]

Юрий Зотов
Спасибо огромное за внимание! Но был бы очень признателен если бы и этот вариант обсудили( на переводе остаются точки и зяпятые), так как я уже написал сам переводчик,остаются такие мелкие проблемы, которые требуют вмешателсва опытного програмиста.


vrem   (2005-07-26 14:24:00) [4]

Прилично конечно, а ведь как начинал:
http://crass.on.ru/humor/li2.html


Ega23   (2005-07-26 13:54:00) [5]

2 Kerk ©   (26.07.05 13:52) [17]

Если для него русский - не родной, то человек ОЧЕНЬ прилично пишет. Я думаю, на английском ты бы поболе ошибок сделал...


Kerk   (2005-07-26 13:52:00) [6]

Gydvin ©   (26.07.05 12:57) [16]
Интересно они в ентом универе сума чтоли все поспятили?


Действительно. Странно как ты экзамен по русскому сдал.


Gydvin   (2005-07-26 12:57:00) [7]

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

Уважаемый Defunct , а нельзяли зделать правильный перевод оставляя запятые и точки?

Интересно они в ентом универе сума чтоли все поспятили?


Юрий Зотов   (2005-07-26 12:38:00) [8]

> bagle   (26.07.05 12:10) [14]

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

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

const
 Letters = ['А'..'я']; // Набор букв

var
 T: string; // Строка, содержащая исходный текст.
 P: integer; // Текущая позиция просмотра текста.

function GetNextWord: string;
begin
 Result := '';
 // 1. Пропускаем все символы, не являющиеся буквами.
 while (P <= Length(T)) and not (T[P] in Letters) do
   Inc(P);
 // 2. Выделяем слово.
 while (P <= Length(T)) and (T[P] in Letters) do
 begin
   Result := Result + T[P];
   Inc(P)
 end
end;

Теперь можно сделать так:
 
P := 1;
repeat
 W := GetNextWord; // Получили очередное слово.
 Translate(W) // Перевели это слово.
until W = '';  // Проверили окончание текста.

Вот и весь принцип. Этот цикл разбивает текст на слова и для каждого слова вызывает процедуру Translate. Ее Вам и осталось написать.


bagle   (2005-07-26 12:10:00) [9]

уважаемый Defunct , а нельзяли зделать правильный перевод оставляя запятые и точки?


bagle   (2005-07-26 12:07:00) [10]

KilkennyCat
спасибо большое! на счот редактора, это мне не нужно. но переводчика от меня требую на университете, попался такой гадкий курсавой.
а кто еще может помочь?


KilkennyCat   (2005-07-26 01:28:00) [11]

Ну, в этом случае - неплохой русский, на мой взгляд.
Однако, по поводу практики при помощи такого сложнейшего проекта есть некоторые сомнения, так как определение точки или запятой - примитивный алгоритм, и если проблема именно в этом - то лучше начать с чего-нибудь попроще, например, с редактора текста с подсветкой синтаксиса и мощным поиском. Это, конечно, если хочется в дальнейшем все же сделать переводчик. Такой проект даст все необходимые знания о механизмах работы с текстом.
Но если в вопросе имелось ввиду грамматический разбор знаков препинания, то тут я - пас. Это и есть самое сложное. Знал бы как сделать - был бы богатым.
Вот такое мое мнение.
:)


bagle   (2005-07-26 00:46:00) [12]

во первых ошыбки на мойом посте- я не русский ребята.
Если не хотите ответить,не отвечайте.
Я просто хотел узнать ваше мнение.


Ega23   (2005-07-25 10:21:00) [13]

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


TUser   (2005-07-25 10:13:00) [14]

развод


Anatoly Podgoretsky   (2005-07-25 08:58:00) [15]

KilkennyCat ©   (25.07.05 02:25) [2]
Мелочи, будет переводчик-двоечник.


vrem   (2005-07-25 07:04:00) [16]

bagle, переводчик это не только перевод отдельных слов. Когда только, то качество перевода плохое. Тот же промт переводит абзацами - по нескольку предложений, разделённых переводом строки(98 точно так). Бывает забавно отслеживать логические цепочки как он переводит - это слово переведено так, потому что в соседнем предложении то или то..)
Впечатление, что промт воспринимает текст как некий "формат" файла - имхо похожее делает Дельфи при компиляции unit'ов.


Юрий Зотов   (2005-07-25 03:47:00) [17]

> bagle   (25.07.05 02:05)

> для практики начал писать переводчик

А почему не сразу искуственный интеллект? Что уж там мелочиться-то...


Defunct   (2005-07-25 03:19:00) [18]

походу ответ на ваш главный вопрос может быть таким:
если переводчик "типа prompt, а не PROMT" тогда просто отбрасывать все знаки препинания:

function PrepareString( SourceString: String): String;
const EN = ['a'..'z'];
     RU = ['а'..'я'];
var
  i : integer;
begin
  Result := '';

  SourceString := AnsiLowerCase( SourceString );

  for i := 1 to Length( SourceString) do
     if (SourceString[i] in EN) or (SourceString[i] in RU) then
        Result := Result + SourceString[i]
     else if SourceString[i] = ' ' then
        if (Length(Result) > 0) and (Result[ Length(Result) ] <> ' ') then
           Result := Result + SourceString[i]

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage( PrepareString(' ПриВет...!! ,./,/. чУваки') ) ;
end;


Джо   (2005-07-25 03:08:00) [19]


>  [3] Defunct ©   (25.07.05 03:03)

Я не сомневался, что автор "переводчика" допустит ошибку и в названии переводчика :0)


Defunct   (2005-07-25 03:03:00) [20]

> Джо ©   (25.07.05 02:09) [1]
:)

> bagle
> типа Prompt
prompt ничего не переводит. Start -> Run -> cmd.exe будет вам prompt.

переводчик называется PROMT ( project multilang. translator)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо