Скачиваний:
18
Добавлен:
22.05.2015
Размер:
31.74 Кб
Скачать

Лабораторная работа 9

Обработка текста. Часть 1.

Набор текста в режиме t9

1. Создание базы данных

Для набора текста с помощью цифровых клавиш необходимо иметь базу данных, содержащую слова русского языка и их цифровое представление. При этом одному цифровому представлению может соответствовать несколько слов русского языка. Например, цифровому набору 8344 соответствует четыре слова "щёлк", "шёлк", "щели", "щёки".

База данных может быть представлена либо в виде реляционной таблицы (динамическая БД Пролога), либо в виде дерева. Рассмотрим динамическую БД. Пусть каждый факт БД представлен в виде:

class facts - t9 d : (string Цифры, charcount ДлинаСлова, string* Слова, positive ЧислоСлов).

Тогда произвольный факт будет выглядеть так:

d("444", 3, ["кий","лил","лик","или"], 4).

Для создания БД необходимо иметь текстовый файл слов русского языка. Его можно, например, скачать из Интернета. В данной лабораторной работе файл со словами русского языка прилагается в папке EXE. Преобразование слов в набор цифр основывается на соответствии буквацифра. Однако для русского языка есть одна особенность – каждая цифра мобильного телефона соответствует ровно четырём буквам русского языка. Мобильный телефон не содержит букву «ё», поэтому в телефоне используется ровно 32 буквы. В связи с этим достаточно из кода буквы вычесть такое число, чтобы после деления без остатка на 4 получить цифру буквы. Ниже представлено консольное приложение, создающее БД из файла со словами русского языка "words.txt".

implement main     open core,console,std,string,list class facts - t9 d : (string Цифры,charcount ДлинаСлова,string* Слова,positive ЧислоСлов).

run():-init(),         Input = inputStream_file::openFile8("words.txt"),         (repeat(), S0 = Input:readline(),hasAlpha(S0),S=toLowerCase(S0),         K=concatList([toString(Q)||Q=(getCharValue(getMember_nd(toCharList(S)))-1064) div 4]),   % 1064=1072('а')+8, т.к. 'а' имеет #2         if retract(d(K,I,L,J)),! then assert(d(K,I,[S|L],J+1)) else assert(d(K,string::length(K),[S],1)) end if,         Input:endOfStream(),!; succeed()),         Input:close(),         file::save("t9.db",t9,false()),         write("Готово").

end implement main goal     mainExe::run(main::run).

На выходе получаем файл БД "t9.db".

2. Поиск в БД

Поиск в БД слова или перечня слов, соответствующих набираемой строке цифр, осуществляется вызовом простой цели в консольном приложении:

run():-init(),file::consult("t9.db",t9),         Цифры=readLine(),d(Цифры,_,Слова,_),         write(Слова),_=readline(),!;         _=readline().

Теперь, если ввести с клавиатуры некоторую последовательность цифр и нажать Enter, то на выходе увидим одно или несколько слов, соответствующих набранной последовательности.

Задача 1. Разработать GUI-проект, реализующий набор текста русского/английского языка в режиме t9. Дизайн диалога и используемые элементы управления – авторские. В программе следует учесть отображение списка всех слов, соответствующих набираемой последовательности цифр. Подсказка: используйте событие ModifiedListener с обработчиком onEditModified для обработки каждой вводимой цифры.

Соседние файлы в папке Лабораторные работы