https://github.com/shyzik93/manspy
Management System (universal and interactive)
https://github.com/shyzik93/manspy
esperanto linguistics lingvo proccessing-language python
Last synced: 6 months ago
JSON representation
Management System (universal and interactive)
- Host: GitHub
- URL: https://github.com/shyzik93/manspy
- Owner: shyzik93
- License: lgpl-3.0
- Created: 2015-10-01T20:18:25.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2023-10-20T18:19:23.000Z (almost 2 years ago)
- Last Synced: 2025-04-11T04:44:07.448Z (6 months ago)
- Topics: esperanto, linguistics, lingvo, proccessing-language, python
- Language: Python
- Homepage: https://manspy.syeysk.ru
- Size: 1.01 MB
- Stars: 4
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: history_promo.png
Awesome Lists containing this project
README
ManSPy: "Programmer! Please, make me smart!"
[](https://travis-ci.com/shyzik93/ManSPy)
- http://github.com/shyzik93/ManSPy/wiki - описание алгоритмов
## Краткая история диалога
# Поверхностный взгляд
Основная идея - попытка ответить на вопросы:
- Что максимального удастся сделать до привлечения искусственных нейронных сетей?
- Является ли естественный язык [Тьюринг-полный](wiki)?Основные принципы:
- *генерация максимальной информации о предложении на естественном языке на всём пути вход-выход и её учёт при последующих анализах.*
- *обобщение информации (аналогично нейронным сетям) на всём пути вход-выход: от предложения на естественном языке до функции с аргументами*
- *восстановливаемость исходного предложения на естественном языке из результатов лингвистических анализов: это должно обеспечить качественный анализ, а в будущем - помочь с синтезом текста.*
- *при обнаружении в предложении двусмысленности программа должна задать уточняющий вопрос*
- *при обнаружении в предложении недосказанности программа должна задать уточняющий вопрос*В идеальных преувеличенных планах:
- *экспертная система*
- *система управления (ассистент)*
- *написание скриптов на естественном языке*Программа построена по принципу подключаемых модулей:
- заменяемый лингвистический модуль синтеза текста на языке Эсперанто (реализованы графематический, морфологический и постморфологический, синтаксический анализы) ([/language/*](https://github.com/shyzik93/manspy/blob/master/language))
- заменяемые интерфейсные модули ([/interface/*](https://github.com/shyzik93/manspy/blob/master/interface))
- заменяемые исполнительные модули ([/action/*](https://github.com/shyzik93/manspy/blob/master/action))
- заменяемые логирующие модули ([/logger/*](https://github.com/shyzik93/manspy/blob/master/logger))
- заменяемые модули базы данных ([/database/*](https://github.com/shyzik93/manspy/blob/master/database))
- модуль хранения семантических отношений ([/manspy/relation.py](https://github.com/shyzik93/manspy/blob/master/manspy/relation.py))
- модуль анализа имеет объекты единиц речи: слова, предложения, текста, имеющие удобные функции для построения алгоритмов анализа ([/manspy/unit.py](https://github.com/shyzik93/manspy/blob/master/manspy/unit.py))Как работает ManSPy:
1. Из модуля интерфейса от пользователя поступает предложение
1. В лингвистическом модуле над ним производятся анализы:
1. Графематический
1. Морфологический
1. Постморфологический
1. Синтаксический
1. Из анализов каждого предложения вынимается сказуемое и его актанты
1. Из базы данных вынимаются ФАСИФы для актантов глагола (словосочетаний)
1. На основании анализов и ФАСИФа получаем функции и аргуметы: своеобразный "внутренний язык"
1. Функция и аргументы выполняются [модулем выполнения функций](https://github.com/shyzik93/manspy/blob/master/manspy/FCModule)
1. Ответ из функции поступает в модуль интерфейса к пользователю## А как ManSPy можно использовать уже сейчас?
- лингвистический анализ текста на языке Эсперанто
- "подсвечивание" текстов на языке Эсперанто (например, в редакторах Sublime Text, Notepad++, PyCharm)
- конвертация числительных, прилагателных и существительных (производные от числительных) в число.
- Ваш вариант :)# Установка
Для установки используйте команду `pip install https://github.com/shyzik93/manspy/archive/master.zip`
Для удаления: `pip uninstall manspy`
В программе используются следующие сторонние модули Python, которые необходимо устанавливать отдельно из-за их отсутствия в стандартной библиотеке:
- lxml - для парсинга страниц при авторизации во "ВКонтакте" и для парсинга страниц с курсами валют от ЦБ. (для ОС Windows: http://www.lfd.uci.edu/~gohlke/pythonlibs/)
- cssselect - может проситься модулем lxml (https://codeload.github.com/SimonSapin/cssselect/zip/master, https://github.com/SimonSapin/cssselect/)
- xmpp - реализация протокола для jabber (http://xmpppy.sourceforge.net/, http://sourceforge.net/projects/xmpppy/files/, https://raw.githubusercontent.com/freebsd/freebsd-ports/master/net-im/py-xmpppy/files/patch-xmpp-transports.py - информация об исправлении ошибки в модуле)
- https://pypi.python.org/pypi/eonums/0.9.0 - простенький конвертер числительных на Эсперанто в числа и наоборот. На данный момент для ManSPy написан собственный код конвертирования в числа, который понимает части речи, производные от числительных.
- TKinter - может требоваться на ОС Linux (команда для установки: "aptitude install python3-tk")# Запуск
Консольная команда `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, размещёнеый в корне репозитория. В файле присутствуют словарь, позволяющий включать/отключать модули интерфейсов (МИ), через которые происходит взаимодействие пользователя с программой:
```python
interfaces = {
'autofeed': 1, # Автоподатчик, включён
'TKinter': 1, # Примитивный чатб включён
'jabber': 0, # Jabber, выключен, но можно включить
'vkcom': 0, # ВКонтакте, выключен из-за наличия ошибок
'Commandline': 0 # Один из первых МИ, выключен так как не имеет смысла
}
```Есть ещё файл с настройками для авторизации в Jabber и ВКонтакте. Он расположен уровнем выше директории репозитория, имеет имя IFM_passwords.txt и следующее содержимое в формате JSON:
```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. Класс имеет слеующую структуру:
```python
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):
''' код инициализации модуля '''```
# Подробно о ФАСИФе