Хронология разработки программы - shyzik93/ManSPy GitHub Wiki
Всё началось с попытки написать бота для Jabber... Цель — похвастаться и удивить, но внезапно я перешёл к давней мечте — созданию искусственного интеллекта.
Условная дата начала написания кода бота — 27.04.2014.
- Март —меня пригласили на Jabber-конференцию, в которой мне приглянулись примитивные боты.
- 28 апреля — написан примитивный jabber-"бот", состоящий из двух файлов на Python. Программа просто записывает в файл полученную команду.
- 13 мая — программа разделена на файл с подключением к jabber и два модуля: пакет разбора команд и пакет разбора ЕЯ. Команды задаются в блоке условий.
- 18 июня — в программе уже есть пакет с МД и модулем их импорта. Появилось подобие ФАСИФа в виде словаря в МД в формате: "{"ИмяКоманды": [ИмяФункции, КоличествоПринимаемыхАргументов]}", располагаемых в МД.
- 23 июня — модуль разбора команд расширился: добавился модуль логики, вызывающий функцию по команде с передачей ей аргументов; пакет обработки языка, который умеет лишь разбивать строку команды на подстроки; директория, в которую сохраняется история. Появился МИ на модуле TKinter. Появился модуль с главным классом API, предоставляющие основное апи программы.
- 26 июня — модуль в пакете обработки языка слегка наполнился функцией, определяющей часть речи слова по наличию в списке. Появился пустой модуль для работы с будущей БД. Покамест вместо БД используется словарь, передаваемый в аргументах. В нём храница информация о функциях из МД.
- 27 июня — появилась функция примитивного морфологического анализа для языка Эсперанто - понимание некоторых частей речи и окончаний. Добавился словарь с описанием морфем языка.
- Примерно май-июнь — попытка составить правила командного языка, наподобие команд в Линуксе, которые должны были перерасти во ВЯ. Тем более, используя команды, легче проверять будущую логику бота. Были некоторые успехи: выполнение команд; возможность вложения команд одна в другую; память предыдущего запроса, если пользователь забыл ввести параметр команды, с целью запроса этого параметра у пользователя. Название программы - ИСУ.
- Примерно май-июнь-июль — ко мне пришла мысль, что ВЯ должен не иметь форму команд, а быть представлен определённой структурой данных - списком или словарём. А потому язык команд теперь смысла не имеет - и пакет команд был постепенно преобразован в пакет конвертации ЕЯ во ВЯ, а тот модуль, изначально предназначенный для приблизительно той же цели, был удалён из-за почти двумесячного неиспользования. Я начал больше времени уделять костяку — системе обслуживания МЛ. Задача такой системы (далее - каркас) - избавить модуль логики от зависимости от неинтеллектуальных функций: доступ к базам данных, загрузка пользовательских модулей и одного языкового, интерфейсов и прочего.
- ? — такая структура, состоящая из ядра, каркаса, интерфейсов и подключаемых модулей сделали ИСУ легко изменяемой и расширяемой. Можно независимо изменять каждый элемент ИСУ, не влезая в дебри целой системы. Но это был лишь каркас. Интеллектом ещё и не пахнет. Отличие лишь в том, что в ИСУ можно удобно развивать логику, добавлять новые языки с любым способом анализа текста, прикручивать любые интерфейсы с разным способом ввода.
- 5 июля — расширен код морфологического анализа, настройки и ассоциации слов и функций хранятся теперь в текстовом файле в законсервированном виде. Подобие ФАСИФа имеет следующий вид: " {'function': [Функция, КолвоАргументов], ИмяЯзыка: (СловоНаЕЯ) }".
- 13 июля — переписан модуль морфологического анализа.
- 22 июля — начал вести бумажную тетрадь заданий
- 3 августа — удалён модуль естественного языка, не использовавшийся с 12-го мая. Им постепенно стал модуль обработки команд. Лингвистическим модулям выделена директория. Подобие ФАСИФа слегка усложнилось. Добавлен модуль конвертации результатов морф. анализа.
- 6 августа — появляется код для анализа связей слов в предложении. Морфологический анализ расширен и нагромождён. Вероятно, в это время был переписан модуль морф. анализа.
- 8 августа — один из модулей морф. анализа был переименован в модуль постморфологического анализа.
- 27 августа — модуль логики стал пакетом
- 7 сентября — добавлен пустой модуль синтаксического анализа
- 13 сентября — написан модуль синтаксического анализа. Сформирован ФАСИФ первой версии - в виде словаря, описывающий функцию и связи в предложении.
- 12 октября — переписан МИ на TKinter'е.
- 20 ноября — написан модуль с классом объекта предложения.
- 22 ноября — добавлен модуль подготовки текста (заменяет двойные символы на символы с крышечкой).
- Сентябрь-декабрь — я больше занимался написанием надсистемы, упрощающей разработку ИСУ и её бэкапирование. А также сделаны очередные правки и переписи кода, которые подтолкнули к новым изменениям почти всех модулей.
- 24 декабря — вновь появился модуль для работы с базой SQLite3, но наполненный функциями. Расширен код объекта предложения.
- 27 декабря — появился второй вариант ФАСИФа, который значительно упростил добавление новых МД. Теперь не требуется вручную прописывать характеристики слов (часть речи, падеж, член предложения и т. д.) и их связи в предложении. Программа составит это автоматически. Правда, парсер ФАСИФа ещё не сделан.
- 25 января — добавлен модуль извлечения подлежащего, сказуемого, дополнения и прямого дополнения из предложения.
- 20 февраля — написан парсер для второго ФАСИФа - переписан модуль импорта МД.
- Январь-февраль — добавлены: модуль для работы с абстрактными группами и с синонимией. Теперь программа автоматически делает анализ предложения-шаблона и составляет описание аргументов в ЯЕ-предложении, из-за чего составлять ассоциации слов в ЯЕ-предложении с аргументами функции стало значительно удобней. А также дополнен различными мелочами МЛ.
- Середина марта - конец июля — было затишье - очень редко вносились мелкие правки.
- 30 июня — написан МИ для ВКонтакте.
- 1 июля — слегка доработан ФАСИФ, теперь корни аргументных слов можно конвертировать в произвольные значения.
- 27 июля — добавлен МД для включения света через Умный дом.
- С конца июля — сильно изменён модуль загрузки МД, так как именно он преобразует ФАСИФ в нормальную для компьютера структуру, а также приведён в порядок конвертер анализов во ВЯ, благодаря чему теперь можно добавлять таблицы вида " 'корень ЯЕ-слова':'Что-то понятное для функции' "; в этом случае конвертер заменяет при необходимости корень ЯЕ-слова на ту строку, которая привычна для конкретной функции. Например, для функции загрузки курсов валют - это код валюты, а для функции включения света - это строка "1 1 1", при приёме которой сервер на Raspberry Pi включает все три светодиодной ленты. При отсутствии такой таблицы в функцию передаются корни ЕЯ-слов. Кроме этого добавлена возможность единовременного запуска всех МИ при старте системы. Небольшой труд проделан по превращению некоторых компонентов в отдельные программы, а также приведены в порядок лингвистические модули с внесением некоторых дополнений — в основном, использование союза "kaj" и однородных связей.
- 7 августа — теперь МИ могут запускаться параллельно при старте программы. Сообщения храняться с именем МИ. Программа может отвечать в тот МИ, с которого она получила сообщение.
- 9 августа — добавлен МИ "Автоподатчик", позволяющий подавать в программу порцию предложений. Теперь нет необходимости для тестирования вводить текст вручную Плюс можно писать простенькие скрипты на ЕЯ.
- Начало августа — добавлен модуль антонимии и улучшен модуль синонимии. За три дня написан код возможности использования антонимов глаголов (или глаголов с антонимийной приставкой) с передачей в функцию первого аргумента, который указывает, был ли для её вызова использован глагол-антоним или нет.
- 21 сентября — почти написан новый модуль для БД, в которой связи слов хранятся универсально - можно создавать любые связи без существенного изменения кода и без изменения структуры базы.
- 8 октября — добавлено декартово произведение для аргументных слов среди однородных членов.
- Начало октября — модуль новой базы был задействован в программе. Улучшено распознавание однородных членов (конечно, ошибки ещё есть) и добавлена возможность использовать несколько прямых дополнений в одном предложении. По сути - это возможность совмещать команды в одном предложении.
- 15 октября — желание добавить возможность использовать условные, циклические и прочие конструкции в ЕЯ-предложениях выявили существенный недостаток текущего способа ассоциирования функции и слов: невозможно использовать словосочетания отдельно от сказуемого. Пересмотр взглядов.
- 26 октября — начал писать модуль графематического анализа. Им стал модуль подготовки текста.
- 10 ноября — теперь можно перед запуском программы выбирать версию БД: 1 или 2.
- 29 ноября — написана маленькая функция для превращения словосочетаний в hash. Она будет использована при поиске словосочетаний в базе данных.
- 5 декабря — начал писать модуль импорта МД для 3-его ФАСИФа.
- 13 декабря — в бумажной тетради всего 117 заданий, из них выполненно - менее 44. Написан код для нового варианта ассоциирования - теперь словосочетания должны превращаться не в hash, а в регулярное выражение.
- 31 декабря — почти реализован ФАСИФ 3: осталось дописать модуль вызова функций и вернуть поддержку антонимии глаголов. Модуль логики переименован в модуль вызова функций. Теперь ФАСИФ ищется путём перебора свойств слов, что оказалось более простым и гибким, но, вероятно, медленней. Вариант с превращением словосочетания в регулярное выражение пока отложено, так как оно не такое гибкое и расширяемое: его можно в будущем использовать для сокращения количества перебираемых ФАСИФов ("грубый отбор" перед перебором). Модуль извлечения в новой версии ФАСИФа извлекает сказуемое и его актанты (словосочетания).
- 09 января — возвращена поддержка антонимии. Расширен словарь Эсперанто (предлоги, союзы, местоимения и т. д.). Добавлен объект текста (примитивный). Переписан почти полностью модуль графематического анализа: теперь поддерживаются пунктуационные символы (, . ... ; : ! ? ' ")
- 02 февраля — улучшена поддержка числительных (с использованием стороннего модуля). Добавлен глагол adicii, который должен будет складывать числа, но пока лишь выводит их (и то, если он в виде существительного). Числительныне теперь представлены отдельным механизмом: http://just-idea.ru/general/difference_between_numerals_and_other_words.html .
- 06 февраля — реализована поддержка сложения, вычитания, умножения, деления. В операциях могут участвовать числа и состояния словосочетаний. Например, "adiciu dolaran cambion kaj trion" выведет сумму курса доллара и числа 3, то есть число, приближенное к 80-ти.
- 13 апреля — функция read_text теперь находится в МИ. Внутри системы сообщение представлено в виде объекта, содержащий в себе МИ, функции журналирования диалога и прочее.
- 21 апреля — МИ может передавать вместе с сообщением дополнительную информацию, например, уникальный код или адрес получателя.