После того, как был найден значимый шаблон, начинается поиск входящих в него классов эквивалентности. То есть в шаблоне могут быть такие вершины, которые представляют собой нечто подобное корзине, для складывания вариантов слов, которые могли бы появиться в этом контексте. Отсюда следует, что отличительной особенностью правил, которые строит ADIOS (шаблонов), является зависимость от контекста.
Далее значимый шаблон вместе с его найденным классом эквивалентности добавляется в исходный граф как новая вершина, заменяя собой все свои составляющие и относящиеся к ним дуги. Остальные же вершины и дуги остаются неприкосновенными.
Таким образом, ADIOS находит все более общие и сложные шаблоны и продолжает этот процесс до тех пор, пока более не останется ни одного нового шаблона, что может быть отражено в виде древовидной структуры в соответствии с рисунком 4 [7].

Рисунок 4 – Древовидное представление шаблона
1.2.2.3 Входной компонентПосле обнаружения всех значимых шаблонов образуется некая грамматика. Так как конечные шаблоны очень абстрактны, то ADIOS может воспринимать и новые, еще не увиденные им слова.
При использовании специального входного модуля, ADIOS дается для распознания предложение с новыми словами. Последующий процесс описывается в терминах активации уже существующих шаблонов, происходящей от листьев дерева грамматики к вершине. Начальная активность листьев может быть рассчитана по формуле:

где sl – это слово нового предложения.
Для класса эквивалентности вверх к вершине дерева продвигается самая высокая активность для его листа. Для вершины – это будет средняя активность вершин-потомков. Если же в существующий уже класс эквивалентности при сопоставлении нового предложения с шаблоном должно пойти новое слово, то такой класс отдает вверх активность, равную ε = 0.01.
В результате работы входного компонента построенная модель может «догадаться» о значении ранее не известного ей слова.
1.2.3 Тестирование ADIOSADIOS был протестирован на следующих текстовых материалах:
- с помощью простой грамматики, порожденной Rmutt [12], был составлен корпус предложений, структуру которых ADIOS благополучно выявил ADIOS был применен к коллекции CHILDES, содержащей транскрибированную речь самих детей и обращенных к ним фраз; всего было получено 317 шаблонов и 404 класса эквивалентности
В качестве языка программирования для программной реализации алгоритма ADIOS выбран REBOL (Relative Expression-Based Object Language). REBOL позволяет довольно эффективно работать с текстовыми данными. Его основными характеристиками являются:
- это язык передачи сообщений, главной задачей которого возможность создания программного кода, максимально приближенного к предложениям естественного языка, например:
Reschedule exam for 2-January-1999 at 10:30
- это не только язык программирования и язык представления данных и метаданных поддержка более 40 платформ, не требующих изменений для работы уже готовой программы быстрота работы и малый размер приложений возможность создания «диалектов» - небольших «подъязыков» для описания данных, кода и метаданных
Программы на языке REBOL представляют собой набор значений (values) различных типов (filenames, pairs, issues, binary, strings, numbers и др.) и специальных значимых слов (words). Свойства слов:
- могут выступать в роли переменных или нет, в зависимости от того, как они используются (например: show on false here). в языке REBOL нет ключевых слов - можно создать собственную функцию print и использовать ее вместо предопределенной слова регистронезависимы и могут включать символы:
+ - ` * ! ~ & ? | (например: *new-line* **** ++ )
Написание выражений на языке REBOL основывается на создании блоков (blocks), которые группируют слова и значения в определенной последовательности. Например, следующая запись представляет собой блок, представленный набором строк:
["яблок" "яблокам" "яблоками" "яблоки" ]
Ключевым понятием языка REBOL выступают «последовательности» (series). Последовательности – это упорядоченные наборы.
Пускай, например, дан такой блок (блок является типом данных «последовательности»):
colors: [ red green blue ]
В соответствии с рисунком 5, слово в первой позиции (red) называется «головой» (head), а позиция сразу за последним словом (blue) – «хвостом» (tail).

Рисунок 5 - Последовательности
В данный момент переменная colors указывает в позицию head. Чтобы изменить значение ее положение необходимо вызвать функцию next (проход вперед на одну позицию; назад – функция back). Таким образом, можно дойти до самого «хвоста» блока и вернуться к «голове» с помощью функции head.
Естественно, что после задания данных типа последовательности можно не только последовательно переходить от одной позиции внутри последовательности к другой, но и «прыгать» через несколько элементов (функция skip), вставлять, изменять, сортировать и удалять элементы, копировать подпоследовательности, искать нужные элементы.
2.3 Особенности программного кода Для удобства чтения кода все создаваемые мной функции получили имена, начинающиеся с символа «*», например:
*parsePatNodes pat
В программе были переопределены функции, осуществляющие вывод данных на консоль и в заданный файл (соответственно print - *print и echo - *echo):*echo: func
[
"writing data to file"
descr [ string! ] "description of the info"
info [ any-type! ] "info to write to file"
]
[
write/append %log. txt rejoin [ rejoin [ descr info ] newline ]
]
*print: func
[
" writing data to console"
descr [ string! ] "description of the info"
info [ any-type! ] "info to write to file"
]
[
print rejoin [ rejoin [ descr info ] newline ]
]
Рассматриваемые функции (print и echo) имеют скорее отладочный характер, поэтому после переопределения (*print и *echo) все результаты их вызова могут быть сведены к нулю комментированием всего одной строки, составляющей тело данных функций.
Стоит отметить, что слова *print и *echo в файле синтаксиса для редактора TexPad вынесены в отдельный блок и выделены специальным достаточно ярким цветом (см. рис. 6), что позволяет быстро находить их в тексте программы и удалять после успешного выполнения отладочной функции.

Рисунок 6 - Пример выделения цветом функций *echo и *print в коде
Основные функции языка REBOL заданы в структуре REBOL/Core. Графические же интерфейсы содержатся в объекте REBOL/View. В рассматриваемой программе для создания пользовательских интерфейсов были задействованы объекты из REBOL/View 3 Реализация алгоритма ADIOS
Прежде чем перейти к непосредственному описанию механизмов, лежащих в основе разработанной программы, необходимо упомянуть несколько ключевых моментов:
исходный текст не имел никакой предварительной разметки обработка его происходила в полностью автоматическом режиме, без вмешательства человека для выделения структур использовались специальные статистические критерии, многие из которых уже были упомянуты выше вновь полученные узлы имеют иерархическую структуру построение новых узлов является итеративным процессом 3.1 Выделение минимальных морфологических единицТекст, поступающий на вход алгоритма ADIOS, может делиться на составные части для построения графа составляющих в двух режимах: на слова и на ММЕ (минимальные морфологические единицы).
Для осуществления деления слов на ММЕ использовался список морфем, приведенный в первом томе Русской Грамматики [8].
В соответствии со своим типом (префиксы, суффиксы, флексии) морфемы были сохранены в трех файлах. Для удобства использования предварительно программно были созданы блоки слов для морфем каждого типа. Эти блоки были сохранены в виде. r-файлов (исполняемых файлов REBOL) с помощью функции save. Сделано это было для того, чтобы при запуске основной программы не приходилось каждый раз заново прочитывать текстовые файлы и заносить их содержимое в блок, а сразу подгружать готовый блок с помощью функции load.
Перед началом процедуры деления на ММЕ, из исходного текста удалялась вся пунктуация, за исключением точек (другие возможные концы предложения, например «!», заменялись на точки), по которым происходило разбиение текста на предложения.
Для деления на ММЕ использовался довольно формальный и искусственный метод (например, в слове «окно» выделялась приставка «о»). Такая неточность была принята позволительной в силу того, что:
- предполагается, что на второй стадии работы алгоритма ADIOS (обнаружение значимых шаблонов) все неверно распознанные части слова будут собраны вместе не был найден словарь возможных корней русского языка в электронном виде, что не позволило ввести достаточно достоверный критерий истинности при делении слова на ММЕ
Для получения составляющих слово ММЕ выбиралась самая длинная возможная морфема:
; перебираем морфемы в соответствующем блоке
foreach morf* block
[
if ( ( find/match word morf* ) <> none )
[
; выбираем самую длинную морфему
if ( length? str ) < ( length? morf* )
[
str: morf*
]
]
]
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


