Skip to content

shyzik93/ManSPy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Oct 20, 2023
5b290c2 · Oct 20, 2023
Mar 14, 2021
Aug 12, 2023
Aug 13, 2023
Oct 20, 2023
Dec 18, 2022
Aug 13, 2023
Oct 25, 2018
Apr 25, 2016
Aug 26, 2020
Mar 10, 2016
Apr 23, 2017
Oct 17, 2020
Apr 25, 2016
Aug 13, 2023
Aug 15, 2023
May 13, 2018
May 13, 2018
Jul 27, 2022
Aug 15, 2023
Sep 28, 2023
Dec 18, 2022
Aug 12, 2023
Aug 14, 2023
Dec 25, 2022
Oct 17, 2020

Repository files navigation

ManSPy: "Programmer! Please, make me smart!"

Build Status

Краткая история диалога

Поверхностный взгляд

Основная идея - попытка ответить на вопросы:

  • Что максимального удастся сделать до привлечения искусственных нейронных сетей?
  • Является ли естественный язык Тьюринг-полный?

Основные принципы:

  • генерация максимальной информации о предложении на естественном языке на всём пути вход-выход и её учёт при последующих анализах.
  • обобщение информации (аналогично нейронным сетям) на всём пути вход-выход: от предложения на естественном языке до функции с аргументами
  • восстановливаемость исходного предложения на естественном языке из результатов лингвистических анализов: это должно обеспечить качественный анализ, а в будущем - помочь с синтезом текста.
  • при обнаружении в предложении двусмысленности программа должна задать уточняющий вопрос
  • при обнаружении в предложении недосказанности программа должна задать уточняющий вопрос

В идеальных преувеличенных планах:

  • экспертная система
  • система управления (ассистент)
  • написание скриптов на естественном языке

Программа построена по принципу подключаемых модулей:

  • заменяемый лингвистический модуль синтеза текста на языке Эсперанто (реализованы графематический, морфологический и постморфологический, синтаксический анализы) (/language/*)
  • заменяемые интерфейсные модули (/interface/*)
  • заменяемые исполнительные модули (/action/*)
  • заменяемые логирующие модули (/logger/*)
  • заменяемые модули базы данных (/database/*)
  • модуль хранения семантических отношений (/manspy/relation.py)
  • модуль анализа имеет объекты единиц речи: слова, предложения, текста, имеющие удобные функции для построения алгоритмов анализа (/manspy/unit.py)

Как работает ManSPy:

  1. Из модуля интерфейса от пользователя поступает предложение
  2. В лингвистическом модуле над ним производятся анализы:
    1. Графематический
    2. Морфологический
    3. Постморфологический
    4. Синтаксический
  3. Из анализов каждого предложения вынимается сказуемое и его актанты
  4. Из базы данных вынимаются ФАСИФы для актантов глагола (словосочетаний)
  5. На основании анализов и ФАСИФа получаем функции и аргуметы: своеобразный "внутренний язык"
  6. Функция и аргументы выполняются модулем выполнения функций
  7. Ответ из функции поступает в модуль интерфейса к пользователю

А как ManSPy можно использовать уже сейчас?

  • лингвистический анализ текста на языке Эсперанто
  • "подсвечивание" текстов на языке Эсперанто (например, в редакторах Sublime Text, Notepad++, PyCharm)
  • конвертация числительных, прилагателных и существительных (производные от числительных) в число.
  • Ваш вариант :)

Установка

Для установки используйте команду pip install https://github.com/shyzik93/manspy/archive/master.zip

Для удаления: pip uninstall manspy

В программе используются следующие сторонние модули Python, которые необходимо устанавливать отдельно из-за их отсутствия в стандартной библиотеке:

Запуск

Консольная команда manspy должна работать аналогично python3 cli.py

Командная строка - режим без интерфейсов

  • manspy --text "montru sesdek du kaj dolaran kurzon" - отобразить 62 и 60
  • manspy text_example.txt - если Вы находитесь в корне репозитория, то программа прочтёт файл text_example.txt и выполнит его, выведя на экран 80 и 91

Подробнее о командной строке: manspy -h

Для запуска программы служит файл run.py, размещёнеый в корне репозитория. В файле присутствуют словарь, позволяющий включать/отключать модули интерфейсов (МИ), через которые происходит взаимодействие пользователя с программой:

interfaces = {
  'autofeed':    1, # Автоподатчик, включён
  'TKinter':     1, # Примитивный чатб включён
  'jabber':      0, # Jabber,  выключен, но можно включить
  'vkcom':       0, # ВКонтакте, выключен из-за наличия ошибок
  'Commandline': 0  # Один из первых МИ, выключен так как не имеет смысла
  }

Есть ещё файл с настройками для авторизации в Jabber и ВКонтакте. Он расположен уровнем выше директории репозитория, имеет имя IFM_passwords.txt и следующее содержимое в формате JSON:

{
  "jabber": {
    "login": "ИмяПользователя@Сервер",
    "pass": "Пароль"
  },
  "vkcom": {
    "app_id": "ИдентификаторПриложения",
    "login": "ТелефонИлиЭлАдрес",
    "pass": "Пароль"
  }
}

Данный файл необходимо создать вручную, если хотите использовать интерфейс Jabber.

Файлы, генерируемые программой

После запуска появится директория DATA_BASE (расположена уровнем выше директории проекта), в которой будут сгенерированы следующие файлы:

  • analysis.txt - результаты анализа предложений (графематический, морфологический, постморфологический, синтаксический). Сюда же пишутся предложения на внутреннем языке (ВЯ), которые строятся на основе анализов и содержат выполняемые программой функции.
  • comparing_fasif.txt - результаты сравнения актанта (словосочетания) со словосочетанием в ФАСИФе.
  • history.txt - история диалога отдельно для каждого модуля интерфейсов (МИ)

А также директория Esperanto, в которой лежит файл БД main_data.db.

Директории репозитория

Репозиторий расположен в директории ManSPy (но может быть и любое другое имя), в которой расположены ещё две директории:

  • ManSPy - сама программа
  • IFModules - модули интерфейсов (МИ), выполненные в виде отдельных маленьких программ. В них реализованы варианты взаимодействия с программой: примитивный чат на TKinter'е, автоподатчик (используется для автоматической поочередной подачи предложений), доступ из чатов Jabber'а. Там же реализован механизм параллельной работы всех запущенных МИ и программы ManSPy. Вы можете писать собственные МИ, например, для доступа к программе из социальных сетей, виртуальных миров, а с использованием распознавания речи можно написать МИ для доступа через сотовую связь, также есть возможный вариант применения интерфейсов мозг-компьютер.

В файле run.py происходит создание объекта программы и его передача в модули интерфейсов. Объект программы имеет следующие функции, которые вызываются МИ:

  • send_to_in(IF, w_text) - принимает МИ и текст на естественном языке.

В свою очередь модуль интерфейса должен содержать следующие функции, которые вызываются ManSPy:

  • init() - инициализация модуля
  • to_IF(read_text) - передаёт ответ

ФАСИФ - формат ассоциирования слов и функций.

ФАСИФ - это формат, в котором удобно описывать ассоциации между функцией и глаголом и/или словосочетанием. В ассоциациях лингвистическую информацию можно писать сразу для нескольких языков, хотя пока доступен один - Эсперанто. Существует два вида ФАСИФа.

Первый вид - это ассоциация функции и глагола. В данном случае указывается функция и имя глагола, возможно, с синонимами. В функцию будут передаваться состояния словосочетаний, которые могут быть выведены в качестве ответов, но могут быт и другие варианты использования (зависит от указанной функции). О состоянии словосочетания - ниже. Например доступен для использования глагол montru, выводящий состояния в МИ. Глаголы могут быть переопределены в ФАСИФе второго вида для каждого словосочетания отдельно.

Второй вид - это ассоциация функции и словосочетания, а также функции и глагола, связанного со словосочетанием. В нём подробно описываются аргументы функции, их соответствие словам в конкретном словосочетании. Слово, ассоциированное с аргументом функции, называется аргументным. Причём для аргументного слова указываются гиперонимы - абстрактные группы, в которые это аргументное слово может входить. Кроме этого, для аргументов, при необходимости, указывается таблица конвертации, в которой указываются возможные аргументные слова и то, на что они должны замениться перед передачей в функцию, если не указано, то в функцию передаётся корень слова.

Каждое словосочетание может иметь несколько глаголов, и для каждого - своя функция.

В данный момент реализованы ФАСИФы для получения курса валют, включения/выключения света - сейчас сделана эмуляция, получения IP-адреса компьютера.

Написание собственных МИ

Модули МИ находятся в /ifmodules и имеют имя IFM_*.py, где * (звёздочка) - имя Вашего модуля. Модуль содержит класс с именем Interface. Класс имеет слеующую структуру:

class Interface():
    def __init__(self, API):
        self.API = API
        self.settings = {} # настройки ManSPy, действующие только для данного МИ. Необязательны.

    def your_name(self):
        ''' Одна из Ваших любых функций с любым именем и любыми аргументами. '''

        # передаём сообщение в ManSPy. Ответ от ManSPy будет передан в self.send_to_out.
        # any_data - необязательный аргумент. Будет передан в self.send_to_out.
        self.API.send_to_in(self, "Ваше сообщение", any_data)

    def send_to_out(self, r_text, any_data):
        ''' Функция принимает: r_text - ответ от Manspy, any_data - произвольная информация от данного класса 
        '''

    def init(self):
        ''' код инициализации модуля '''

Подробно о ФАСИФе

Releases

No releases published

Packages

No packages published

Languages