Автор работы: Пользователь скрыл имя, 31 Января 2014 в 09:39, лабораторная работа
Древовидный словарь
1. Создание базы данных.
Лабораторная работа 10
Обработка текста. Часть 2.
Древовидный словарь
1. Создание базы данных
Представим словарь в виде двоичного дерева типа Right-Down
domains
mark = y;n.
tree = node(tree Down,char,
dict = d(unsigned Counter,
Словарь dict содержит счётчик слов Counter и дерево Tree. Само древо представляется термом node(tree Down,char,mark Mark,
Предикаты для работы со словарём:
class predicates
create_dict: (string Text) ->
add_dict: (string Text, dict D
next_word: (string Text,
insert_Chars: (char, tree,
insert_LastChar: (char, tree)
get_item_nd: (dict,string) non
get_itemA_nd: (tree,string,
search_token: (dict, string To
search_token1: (tree, char,
insert_letter: (dict, string T
insert_letter1: (tree,char,
get_LastLetter: (tree,char End
without_letter: (dict, string
substitution_letter: (dict,
substitution_letter1: (tree,
change: (dict, string Token,
Пример 1. Консольное приложение, реализующее словарь представлено ниже.
implement main
open core,console,string
constants
className = "main".
classVersion = "".
domains
mark = y;n.
tree = node(tree Down,char,
dict = d(unsigned Counter,
class predicates
create_dict: (string Text) ->
add_dict: (string Text, dict D
next_word: (string Text,
insert_Chars: (char, tree,
insert_LastChar: (char, tree)
get_item_nd: (dict,string) non
get_itemA_nd: (tree,string,
try_search_token: (dict,
search_token: (tree, char,
insert_letter: (dict, string T
insert_letter1: (tree,char,
get_LastLetter: (tree,char End
clauses
classInfo(className,
create_dict(Text) = add_dict(t
add_dict(Text, d(C,Tree)) =
next_word(toLowerCase(
add_dict(_,Dict) = Dict.
next_word(Text,Text0,Char0,Cha
if hasAlpha(Token) the
insert_Chars(Char,empty,Chars)
frontchar(Chars,Char1,
insert_Chars(Char,node(Down,Ch
frontchar(Chars,Char1,
insert_Chars(Char,node(Down,Ch
Char>Char0,!.
insert_Chars(Char,node(Down,Ch
Char<Char0, frontchar(
insert_Chars(Char,Tree,"") =
insert_LastChar(Char,empty) =
insert_LastChar(Char,node(Down
insert_LastChar(Char,node(Down
get_item_nd(d(_,Tree), Token)
get_itemA_nd(node(_,Char,y,_),
get_itemA_nd(node(Down,Char,_,
get_itemA_nd(node(_,_,_,Right)
try_search_token(d(_,Tree), To
search_token(node(_,Char,y,_),
search_token(node(Down,Char,_,
search_token(node(_,Char1,_,Ri
insert_letter(d(_,Tree), Token
insert_letter1(node(_,Char,y,_
insert_letter1(node(Down,Char,
insert_letter1(Down,Ch
insert_letter1(node(_,Char1,_,
insert_letter1(node(Down,Char,
insert_letter1(node(Down,Char1
get_LastLetter(node(_,Char,y,_
get_LastLetter(node(_,_,_,Righ
run():-init(),
D0=create_dict("
D=add_dict("Идёт
D=d(N,T),
I=length(tostring(T)),
write("Кол-во слов: ",
foreach get_item_nd(D,
if try_search_token(D,
write([IL||insert_
_=readline().
end implement main
goal
mainExe::run(main::run).
Скопируйте этот проект в консольное приложение и исследуйте его работу.
Задача 1. Исследуйте рост размера словаря, обучая его на больших текстах.
Задача 2. Разработайте GUI-приложение, позволяющее создавать словари и сохранять их в файлах БД.
Задача 3. Усовершенствуйте программу так, чтобы она позволяла заменять неправильно написанные слова (у которых есть пропуск буквы).
Задача 4. Усовершенствуйте поиск неправильных слов на основе удаления лишних букв и обмена местами смежных букв.