![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
переводчик
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)