Програма для автоматизації перекладу слів
Зміст
1. Постановка задачі
. Опис алгоритму розв’язання задачі та програми
. Опис структури файлів
. Опис програми
. Специфікація функцій програми
. Оцінка достовірності результатів
Висновки
Література
Додаток
1.
Постановка задачі
Переклад є однією з важливих форм
міжкультурних взаємин. Оскільки знання іноземних мов і в давні часи, і сьогодні
не можна назвати масовим, перекладачі виступають посередниками між народами,
які спілкуються в найрізноманітніших сферах життя.
Спочатку переклад виконувався винятково
людиною, але були спроби автоматизувати та комп'ютеризувати переклад текстів
природними мовами (машинний переклад) (англ. MT - Machine Translation)
або використовувати комп'ютери в якості допоміжних засобів при перекладі
(автоматизований переклад) (англ. CAT - computer aided translation).
В наш час найчастіше використовується
автоматичний (машинний) переклад:
· переклад текстів (письмових
та усних) з однієї природної мови на іншу за допомогою комп'ютера;
· напрямок наукових досліджень,
пов'язаний з побудовою перекладних систем.
На базовому рівні робота комп'ютерних програм для перекладу
полягає у заміні слів чи словосполучень з однієї мови на слова чи
словосполучення з іншої. Однак тоді виникає проблема, що така заміна не може
забезпечити якісний переклад тексту, адже потрібне визначення та розпізнавання
слів та цілих фраз з мови оригіналу. Це спонукає активну наукову діяльність у
галузі комп'ютерної лінгвістики.
Автоматизований переклад
Замість «машинний» іноді
вживається слово автоматичний, що не впливає на сенс. Проте, термін автоматизований
переклад, має зовсім інше значення - в такому випадку програма просто допомагає
людині перекладати тексти.
Автоматизований переклад передбачає
такі форми взаємодії:
· Частково автоматизований
переклад: наприклад, використання перекладачем-людиною комп'ютерних словників.
· Системи з поділом праці:
комп'ютер навчений перекладати тільки фрази жорстко заданої структури (але
робить це так, що виправляти за ним не потрібно), а все, що не вклалося в
схему, віддає людині.
Існують два принципово різних підходи
до побудови алгоритмів машинного перекладу: заснований на правилах (rule-based)
і статистичний, або заснований на статистиці (statistical-based). Перший підхід
є традиційним і використовується більшістю розробників систем машинного
перекладу (ПРОМТ в Росії, SYSTRAN у Франції, Linguatec у Німеччині тощо).
До другого типу належить популярний
сервіс: Перекладач компанії Google, а також новий сервіс від ABBYY
Програма розробляється на мові С + +, як консольний або
діалоговий додаток.
2. Опис
алгоритму розв’язання задачі та програми
Завданням даної програми є переклад слів з однієї мови на
іншу.
Програма передбачає безпосередню роботу користувача з
файлами, які створювалися в ході розробки даного програмного продукту.
Користувачеві необхідно запустити текстовий документ у форматі txt., під назвою “translator” і ввести потрібне для
перекладу слово або ж набір слів чи цілі речення і зберегти, далі запустити
саму програму, яка автоматизує переклад слів. У разі виконання всіх вимог
програми, на екрані з’явиться переклад запитуваних користувачем слів,
словосполучень або ж речень. Програма дозволяє перекладати текст, який
записаний не лише в одному рядку.
У випадку, якщо програма не знайде збігів між введеним словом
у вихідному файлі і між словами, які збережені в основній бібліотеці слів
молодіжного сленгу, програма виконає переклад лише тих конструкцій, які є в
словнику. Решта слів залишаться без зміни, проте також будуть відображатися на
консолі в контексті з перекладом. У такому випадку це означає, що або дані
слова за своєю тематикою не належать до молодіжного сленгу, або ж свідчить про
те, що можливо було допущено помилки у його написанні.
Вирішення цієї задачі передбачає собою створення обов’язкового
елемента, без якого, рішення даного питання було б неможливим, а саме створення
структури. В даній програмі ця структура представлена способом описаним нижче.
Структура на ім'я «dictionary», містить наступні поля та методи:
- word - слово яке потрібно перекласти;
- translate - переклад слова;
Поля структури приймають значення, вказані у файлі "dictionary.txt". В результаті виконання програма виводить на консоль
початковий текст, введений користувачем та попередньо збережений у файлі “translator”, а нижче відображає і його переклад.
Програма має виконувати наступні дії:
- створення динамічного масиву
об’єктів, розмірність якого дорівнює кількості рядків у файлі;
- читання з файлу "dictionary.txt" даних у масив об’єктів dictionary;
- зчитування з файлу “translator” запитуваного слова, яке
користувач вводить з клавіатури, та пошук його перекладу у файлі “dictionary.txt.”
- вивести запитувані користувачем слова
перекладу на екран консолі;
- вивести готовий переклад;
- виводити на консоль навіть ті слова,
які перекласти не вдалося не змінюючи їх.
При введенні речень, які користувачеві потрібно перекласти,
програма спочатку розбиває рядок з запитуваним словосполученням або реченням на
лексеми - та перевіряє їх наявність у файлі-словнику. Послідовно аналізується
кожен рядок у основній бібліотеці на наявність збігів. Кожна лексема, на які
попередньо програма поділила вихідний текст, підлягає аналізу та пошукам її
безпосереднього перекладу. У разі його знаходження, програма заміняє запитуване
слово перекладом і виводить його на екран консолі.
Алгоритм розв’язку даного завдання має такий вигляд:
3.
Опис структури файлів
Для мінімального рішення необхідно створити 2 файли:
Ø “dictionary.txt” - файл у якому зберігається словник. Слова та їхній переклад
розділені між собою розділовим знаком - “;” (Мал.1.)
Мал.1. Словник “dictionary.txt”
Ø “translator” - файл у якому розміщено
вихідний текст який і потрібно перекласти. (Мал.2.)
Мал.2. Файл для введення користувачем
запиту.
4. Опис
програми
Робота даної програми базується на двох файлах:
“dictionary.txt” і “translator”, а також на структурі, яка в розробці даної
програми відповідатиме за присвоєння сленговому слову його перекладу із
словника.
Програма передбачає собою насамперед роботу користувача з
файлом під назвою “translator”. Відповідно, відкривши його, потрібно ввести
необхідне для перекладу словосполучення або ж речення. При цьому варто
пам’ятати, що після введення вихідного тексту у файлі не повинно залишитися
порожнього рядка. Програма сприймає це як помилку, тому працює неправильно.
Дані інформації обробляються за допомогою функції strtok,
після чого програма починає пошуки слів, з яких складається речення, запитуване
користувачем, у файлі “translator”. Найважливішим файлом у даній програмі
являється словник - “dictionary”. У ньому збережено слова молодіжного сленгу та
їх безпосередній переклад. Слово та переклад у файлі розділені «;». Відповідно
сама програма орієнтується на пошуки цього розділового знаку для того, щоб
розділити в файлі слово з його перекладом. При введенні слів варто звернути
увагу на їх написання. Адже одна помилка в слові не дає можливості програмі
його розпізнати, а тому замість перекладу, користувач побачить це саме слово
записане без змін. В таблиці 1 представлено
дані, які містяться у файлі “dictionary.txt”.
Таблиця
1
№
|
Слово
|
№
|
Перевод
|
1
|
абитура
|
1
|
абитуриенты
|
2
|
бабки
|
2
|
деньги
|
3
|
ботан
|
заучка
|
4
|
бошка
|
4
|
голова
|
5
|
бутер
|
5
|
бутерброд
|
6
|
виснуть
|
6
|
тормозить
|
7
|
водила
|
7
|
водитель
|
8
|
впаривать
|
8
|
продавать
|
9
|
въезжать
|
9
|
понимать
|
10
|
глюк
|
10
|
галлюцинация
|
11
|
движок
|
11
|
стимул
|
12
|
двинуть
|
12
|
ударить
|
13
|
дискач
|
13
|
дискотека
|
14
|
жратва
|
14
|
еда
|
15
|
задрало
|
15
|
надоело
|
16
|
кайф
|
16
|
наслаждение
|
17
|
кадр
|
17
|
смешной
|
18
|
кандыбать
|
18
|
идти
|
19
|
кашак
|
19
|
кот
|
20
|
косарь
|
20
|
тысяча
|
21
|
21
|
ошибка
|
22
|
ласты
|
22
|
ноги
|
23
|
лям
|
23
|
миллион
|
24
|
махач
|
24
|
драка
|
25
|
мент
|
25
|
милиционер
|
26
|
музон
|
26
|
музыка
|
27
|
напряг
|
27
|
проблема
|
28
|
нарик
|
28
|
наркоман
|
29
|
облом
|
29
|
неудача
|
30
|
опускать
|
30
|
унижать
|
31
|
отмазка
|
31
|
оправдание
|
32
|
отрываться
|
32
|
веселиться
|
33
|
погоняло
|
33
|
кличка
|
34
|
предки
|
34
|
родители
|
35
|
ржать
|
35
|
смеяться
|
36
|
стеб
|
36
|
насмешка
|
37
|
стремно
|
37
|
страшно
|
38
|
студак
|
38
|
студенческий
|
тачка
|
39
|
машина
|
40
|
терки
|
40
|
конфликт
|
41
|
уши
|
41
|
наушники
|
42
|
фейс
|
42
|
лицо
|
43
|
харе
|
43
|
хватит
|
44
|
шарить
|
44
|
разбираться
|
45
|
юзать
|
45
|
использовать
|
46
|
ящик
|
46
|
телевизор
|
5.
Специфікація функцій програми
автоматизований переклад молодіжний сленг
Одним із найважливіших завдань програми є поділ мовних
конструкцій на лексеми. Рішення цього питання ми досягли за допомогою
стандартної функції strtok, яку вдалося використати, підключивши бібліотеку
<string.h>.
Є також функції цієї ж бібліотеки: strcpy і stricmp.
· Функція strtok
#include <string.h>
char *strtok(char *str1, const char *str2);
Функція strtok () повертає показник на наступну лексему в
рядку, що адресується параметром str1. Символи, що утворюють рядок, адресуються
параметром str2, являють собою роздільники, які визначають лексему. При
відсутності лексеми, яка підлягає поверненню, повертається нульовий покажчик.
· Функція strcpy
#include <string.h>
char *strcpy (char *dst, const char *src);
Функція strcpy () копіює вміст рядка str2 в рядок str1.
Параметр str2 повинен вказувати на рядок із завершальним нульовим символом.
Функція strcpy () повертає значення покажчика str1.
· Функція stricmp
#includestricmp(const char *s1, const char *s2);
Функція stricmp виконує беззнакове порівняння рядків s1 і s2,
починаючи з першого символу в кожному рядку і, продовжуючи порівняння наступних
символів до тих пір, поки не зустрінуться неспівпадаючі символи або не
закінчаться рядки.
6.
Оцінка достовірності результатів
Необхідною умовою нормальної роботи даного словника є
безпосередній контакт користувача з файлами, та введення в них слів, які
повинні бути перекладеними. Даний словник передбачає переклад слів молодіжного
сленгу на загальновживану мову, тому використовувати його доцільно для
висловів, якими користується молодь. Варто знати, що в вихідному файлі всі
слова варто вводити російськими або українськими літерами. Для того, щоб
програма коректно переклала ваше речення або слово, потрібно ознайомитись зі
словником в текстовому файлі «dictionary», який
також можливо змінювати.
Мал.3. Результат роботи програми.
Висновки
Молодіжний сленг - соціолект людей у віці 12 - 22 років, що виник
із протиставлення себе не стільки старшому поколінню, скільки офіційній системі. Існує в середовищі
міської учнівської молоді та окремих замкнутих референтних
групах.
Дана програма була розроблена для
автоматизації не лише слів, а й певних мовних конструкцій молодіжного сленгу.
Проте спеціалізація даного словника залежить від того, якими словами заповнений
основний словник. Надалі дану програму варто вдосконалювати, а також неодмінно
поповнювати бібліотеку новими словами.
Недоліком даної програми є відсутність графічного інтерфейсу
користувача. Всі дії та результати роботи програми відображаються на екрані
консолі.
Література
1. Информатика:
Базовый курс: учебник для студентов / под ред. С. В. Симоновича. СПб.: Питер,
2002.
2. Левин
А. Ш. Самоучитель работы на компьютере / А. Ш. Левин. 8-е изд. СПб.: Питер,
2004.
. Леонтьев
В. П. Новейшая энциклопедия персонального компьютера 2003 / В. П. Леонтьев. М.:
ОЛМА-Пресс, 2003.
. Могилев
А. В. Информатика: учеб. пособие для студентов/ А. В. Могилев, Н. И. Пак, Е. К.
Хеннер; под ред. Е. К. Хеннера. М.: Академия, 2001.
. Мураховский
В. И. Железо персонального компьютера: Практическое руководство / В. И.
Мураховский, Г. А. Евсеев. М.: ДЕСС КОМ, 2001.
. Олифер
В. Г. Компьютерные сети. Принципы, технологии, протоколы: учебник для студентов
/ В. Г. Олифер, Н. А. Олифер. СПб.: Питер, 2001.
Додаток
Код програми:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string.h>namespace
std;lines=0;lines2=0;dictionary
{word[200];translate[200];
};main()
{(0, "Russian");fin("dictionary.txt"); stroki[100];(!fin)
{<<"Файл не может быть открыт";
getch(); return 1;
}(!fin.eof())
}.clear(); // сброс флага eof.seekg(0);*p;*dic=new
dictionary[lines];(int i=0; i<lines; i++)
{.getline(stroki,100);=strtok(stroki,
";");(dic[i].word, p); // копируем слово=strtok(NULL,
";");(dic[i].translate, p); // копируем перевод
}fin1("translator.txt");stroki2[100];(!fin1)
{<<"Ошибка";();1;
}(!fin1.eof())
{.getline(stroki2,100);++;<<stroki2<<endl;
}.clear(); // сброс флага eof.seekg(0);prob;(!fin1.eof())
{.getline(stroki2, 256);*p=strtok(stroki2,
".,:!?");(p!=NULL)
{=0;(int j=0; j<lines; j++)
{(stricmp(p,dic[j].word)==0)<<dic[j].translate<<"
";if(stricmp(p,dic[j].word)!=0 &&
prob==lines-1)<<p<<" ";if(stricmp(p,dic[j].word)!=0)++;
}=strtok(NULL, ",./;':><?!");
}<<"."<<endl;
}();0;
}
Блок-схема алгоритму