KEn (Ukrainian, English)

💳 Funding

This study would not have been possible without the financial support of the National Research Foundation of Ukraine (Open Funder Registry: 10.13039/100018227). Our work was funded by Grant contract:

🚀 Sponsor this project

Please support @malakhovks. Despite the Wartime in Ukraine, R&D in the field of Digital Health are being resumed. https://send.monobank.ua/jar/5ad56oNAcD

Choose your language / Оберіть мову


Актуальна версія KEn (Ukrainian, English) доступна для вільного використання в науково-дослідних та педагогічних цілях за посиланням: https://ken.e-rehab.pp.ua/

Important note: ken project and documentation are in active development. For any technical clarifications and questions contact us via email: malakhovks@nas.gov.ua or via Issues. The recent Russian's rocket shelling on critical infrastructure in Ukraine and Kyiv led to the shutdown of the https://ken.e-rehab.pp.ua/ server.ы

KEn (Ukrainian, English) - мережевий засіб виокремлення термінів з природномовних текстів українською та англійською мовами.

Зміст


Призначення та функції

Лінгвістично-семантичний аналіз природної мови – це процес обробки природномовних текстів англійською та українською мовами та формування визначених вихідних даних:

Мережевий засіб (у вигляді веб-сервісу з API) KEn (Ukrainian, English) призначений для виокремлення термінів з природномовних текстів українською та англійською мовами з використанням бібліотеки з відкритим вихідним кодом для передової обробки природних мов - spaCy.

Мережевий засіб (у вигляді веб-сервісу з API) KEn охоплює всі найважливіші етапи обробки природної мови, а саме:


Програмні залежності


Системні вимоги


Інструментарій для управління ізольованими Linux-контейнерами Docker

Docker — інструмент з відкритим сирцевим кодом, який автоматизує розгортання застосунку у середовищах, що підтримують контейнеризацію. Docker допомагає викладати код швидше, швидше тестувати, швидше викладати додатки і зменшити час між написанням і запуском коду. Docker робить це за допомогою легкої платформи контейнерної віртуалізації, використовуючи процеси і утиліти, які допомагають керувати і викладати програми. У своєму ядрі docker дозволяє запускати практично будь-який додаток, безпечно ізольований в контейнері. Безпечна ізоляція дозволяє запускати на одному хості багато контейнерів одночасно.

Переваги Docker:

Термінологія Docker-інструментарію

Архітектура Docker

Docker складається з двох головних компонентів:

Docker використовує архітектуру клієнт-сервер. Docker клієнт спілкується з демоном Docker, який бере на себе створення, запуск, розподіл контейнерів. Обидва, клієнт і сервер можуть працювати на одній системі, також можна підключити клієнт до віддаленого демона docker. Клієнт і сервер спілкуються через сокет або через RESTful API.

Користувач не взаємодіє з сервером на пряму, а використовує для цього клієнт. Docker- клієнт - головний інтерфейс до Docker системи. Він отримує команди від користувача і взаємодіє з docker-демоном.

Щоб розуміти, з чого складається docker, потрібно знати про три його компоненти:

Docker-образ - це read-only шаблон. Наприклад, образ може містити операційну систему Ubuntu з Apache і додатком на ній. Образи використовуються для створення контейнерів. Docker дозволяє легко створювати нові образи, оновлювати існуючі, або можна завантажити образи створені іншими людьми. Образи - це компонента збірки docker-а. Docker-реєстр зберігає образи. Є публічні і приватні реєстри, з яких можна скачати або завантажити образи. Публічний Docker-реєстр - це Docker Hub. Там зберігається величезна колекція образів. Образи можуть бути створені вами або можна використовувати образи створені іншими користувачами. Реєстри - це компонента поширення.

Контейнери схожі на директорії. У контейнерах міститься все, що потрібно для роботи програми. Кожен контейнер створюється з образу. Контейнери можуть бути створені, запущені, зупинені, перенесені або видалені. Кожен контейнер ізольований і є безпечною платформою для додатка. Контейнери - це компонента роботи. Виходячи з цих трьох компонентів в Docker можна:

Принцип роботи Docker

Отже образ - це read-only шаблон, з якого створюється контейнер. Кожен образ складається з набору рівнів. Docker використовує union file system для поєднання цих рівнів в один образ. Union file system дозволяє файлам і директоріями з різних файлових систем (різних гілок) прозоро накладатися, створюючи когерентну файлову систему.

Одна з причин, по якій docker легкий - це використання таких рівнів. Коли змінюється образ, наприклад, проходить оновлення додатку, створюється новий рівень. Так, без заміни всього образу або його перезібрання, як вам можливо доведеться зробити з віртуальною машиною, тільки рівень додається або оновлюється. І вам не потрібно роздавати весь новий образ, публікується тільки оновлення, що дозволяє поширювати образи простіше і швидше.

В основі кожного образу знаходиться базовий образ. Наприклад, ubuntu, базовий образ Ubuntu, або fedora, базовий образ дистрибутива Fedora. Так само можна використовувати готові образи як базу для створення нових образів. Наприклад, образ apache можна використовувати як базовий образ для веб- додатків. Docker зазвичай бере образи з реєстру Docker Hub.

Docker образи можуть створитися з цих базових образів, кроки опису для створення цих образів називаються інструкціями. Кожна інструкція створює новий образ або рівень. Інструкціями будуть наступні дії:

Ці інструкції зберігаються в файлі Dockerfile. Docker зчитує цей Dockerfile, коли збирається образ, виконує ці інструкції, і повертає кінцевий образ.

Реєстр - це сховище docker образів. Після створення образу ви можете опублікувати його на публічному реєстрі Docker Hub або на вашому особистому реєстрі. За допомогою docker клієнта ви можете шукати вже опубліковані образи і завантажувати їх на машину з docker для створення контейнерів.

Docker Hub надає публічні і приватні сховища образів. Пошук і скачування образів з публічних сховищ доступний для всіх. Вміст приватних сховищ не попадає в результат пошуку. І тільки ви і ваші користувачі можуть отримувати ці образи і створювати з них контейнери.

Принцип роботи контейнера

Контейнер складається з операційної системи, призначених для користувача файлів і метаданих. Відомо, що кожен контейнер створюється з образу. Цей образ говорить docker-у, що знаходиться в контейнері, який процес запустити, коли запускається контейнер та інші конфігураційні дані. Docker образ доступний тільки для читання. Коли docker запускає контейнер, він створює рівень для читання / запису зверху образу (використовуючи union file system, як було зазначено раніше), в якому може бути запущено додаток.

Або за допомогою програми docker, або за допомогою RESTful API, docker клієнт говорить docker-демону запустити контейнер.

$ sudo docker run -i -t ubuntu /bin/bash

Давайте розберемося з цією командою. Клієнт запускається за допомогою команди docker, з опцією run, яка говорить, що буде запущений новий контейнер. Мінімальними вимогами для запуску контейнера є такі атрибути:

Після запуску цієї команди Docker, по порядку, робить наступне:

Тепер у вас є робочий контейнер. Ви можете управляти своїм контейнером, взаємодіяти з вашим додатком. Коли вирішите зупинити додаток, видаліть контейнер.

Технології, використані у Docker

Докер написаний на мові Go і використовує деякі можливості ядра Linux, щоб реалізувати наведений вище функціонал.

Docker використовує технологію namespaces для організації ізольованих робочих просторів, які називаються контейнерами. Коли запускається контейнер, docker створює набір просторів імен для даного контейнера. Це створює ізольований рівень, кожен контейнер запущений в своєму просторі імен, і не має доступ до зовнішньої системи.

Список деяких просторів імен, які використовує docker:

Control groups (контрольні групи). Docker також використовує технологію cgroups або контрольні групи. Ключ до роботи додатка в ізоляції, надання додатку тільки тих ресурсів, які йому потрібно. Це гарантує, що контейнери будуть добре співіснувати. Контрольні групи дозволяють розділяти доступні ресурси заліза і якщо необхідно, встановлювати межі і обмеження. Наприклад, обмежити можливу кількість пам'яті, що використовується контейнером.

Union File Sysem або UnionFS - це файлова система, яка працює створюючи рівні, що робить її дуже легкою і швидкою. Docker використовує UnionFS для створення блоків, з яких будується контейнер. Docker може використовувати кілька варіантів UnionFS включаючи: AUFS, btrfs, vfs і DeviceMapper.

Docker поєднує ці компоненти в обгортку, яку ми називаємо форматом контейнера. Формат, який використовується за умовчанням, називається libcontainer. Так само docker підтримує традиційний формат контейнерів в Linux з допомогою LXC. В майбутньому Docker можливо буде підтримувати інші формати контейнерів. Наприклад, інтегруючись з BSD Jails або Solaris Zones.


Архітектура мережевого засобу KEn

Теоретичній базис реалізації процесу лінгвістично-семантичного аналізу природномовних текстів англійською мовою з використанням бібліотеки SpaCy та архітектура її статистичних моделей.

SpaCy – це бібліотека з відкритим вихідним кодом для обробки природних мов, розроблена з використанням мов програмування Python і Cython. В даний час бібліотека включає статистичні нейронні мережеві моделі для англійської, німецької, іспанської, португальської, французької, італійської, голландської, а також для інших мов з деякими обмеженнями. Основні особливості та функції SpaCy:

  1. Лексичний аналіз (англ. Tokenization). Реалізовано процес перетворення послідовності символів в послідовність токенів (груп символів, що відповідають певним шаблонам), та визначення їх типів.
  2. Розмітка частинами мови (англ. Part-of-Speech tagging, PoS tagging), також називається граматичним позначенням або розбором на частини мови. Реалізовано визначення належності слова в тексті (корпусі) до певної частини мови, що засноване як на його визначенні, так і на його контексті – тобто, на його зв'язку з суміжними і спорідненими словами у фразі, реченні, або абзаці.
  3. Аналіз граматичних залежностей (англ. Dependency Parsing). Реалізовано процес призначення позначок синтаксичної залежності, що описують відносини між окремими маркерами, наприклад суб'єктом або об'єктом.
  4. изначення меж речення (англ. Sentence boundary disambiguation, SBD або Sentence boundary detection, SBD). Реалізовано процес пошуку та сегментації окремих речень.
  5. Розпізнавання іменованих сутностей (англ. Named Entity Recognition, NER). Реалізована підзадача видобування інформації, яка намагається знайти і класифікувати іменовані сутності в неструктурованому тексті в заздалегідь визначені категорії, такі як імена людей, організації, місця, медичні коди, час, кількості, грошові значення, відсотки тощо.

Деякі з функцій SpaCy працюють незалежно, інші вимагають завантаження статистичних моделей (англ. Statistical models), що дозволяє SpaCy передбачати лінгвістичні анотації – наприклад, чи є слово дієсловом або іменником. Моделі SpaCy є статистичними, і кожне "рішення", яке вони приймають, наприклад, як тег призначення частини мови, або слово є іменованою сутністю - є прогнозом. Це передбачення базується на прикладах, на яких навчалась модель. SpaCy надає різноманітні лінгвістичні анотації, щоб мати уявлення про граматичну структуру тексту. Анотації включають в себе типи слів, як частини мови, і те, як слова зв'язані одне з одним. В даний час SpaCy пропонує статистичні моделі для різних мов, які можна встановити як окремі модулі Python. Моделі можуть відрізнятися за розмірами, швидкістю, використанням пам'яті, точністю і даними, які вони включають. Обрана модель завжди залежить від умов використання та текстів, що підлягають обробці. У випадку використання в загальних цілях, невеликі моделі за замовчуванням завжди є гарним початком. Вони зазвичай включають наступні компоненти:

Статистичні моделі SpaCy були спеціально розроблені для забезпечення високої продуктивності, швидкості та точності. Модель синтаксичного аналізу є поєднанням результатів наукових робіт: Simple and Accurate Dependency Parsing Using Bidirectional LSTM Feature Representations. Eliyahu Kiperwasser, Yoav Goldberg. (2016) та команди проекту SyntaxNet від Google. Фундамент синтаксичного аналізатора базується на роботі A Dynamic Oracle for Arc-Eager Dependency Parsing. Yoav Goldberg, Joakim Nivre (2012), який представив систему переходу до так званого імітаційного навчання. Модель реалізована з використанням бібліотеки машинного навчання Thinc. Стратегія попереднього обчислення дозволяє отримати гарний компроміс між зручністю GPU та простотою реалізації. Згорткова нейронна мережа (Convolutional neural network, CNN) і широкий нижній шар обчислюються на GPU, а потім попередньо обчислені приховані ваги переміщуються до центрального процесора, перш ніж ми почнемо процес аналізу/розбору на основі переходу. Це робить багато речей набагато простіше.

Конвеєр обробки електронних текстових документів.

Архітектура макету мережевого засобу (у вигляді веб-сервісу з API) KEn представлена у вигляді конвеєру обробки електронних текстових документів (англ. NLP Pipeline), що містять природномовний текст, та складається з наступних етапів та компонентів:


Компіляція, збірка та розгортання мережевого засобу KEn (з приватного репозиторію) в середовищі UNIX-подібних операційних систем Linux

Системні вимоги

Компіляція, збірка та розгортання мережевого засобу KEn в середовищі UNIX-подібних операційних систем Linux складається з наступних етапів:

  1. Клонування початкового коду програми KEn з приватного git-репозиторію сервісу GitHub. Цей етап можна виконати використовуючи особистий маркер доступу token до приватного репозиторію GitHub або використовуючи ключ розгортання Deploy key до приватного репозиторію GitHub.

Клонування початкового коду програми KEn з приватного git-репозиторію сервісу GitHub використовуючи особистий маркер доступу token:

$ git clone https://<username1>:<token>@github.com/username/repo_name.git

де:

username1 - Ваше ім'я користувача GitHub;

token - Personal access tokens - особистий маркер доступу до приватного репозиторію GitHub;

username1 - Ваше ім'я користувача GitHub;

github.com/username/repo_name.git - адреса приватного git-репозиторію сервісу GitHub, тобто github.com/malakhovks/ken.git.

Приклад:

$ git clone https://Velychko-Vitalii:ae9c2fa2d73fbbb0bd0a5ffa746f1df59036815c@github.com/malakhovks/ken.git

Або клонувати початковий код програми KEn з приватного git-репозиторію сервісу GitHub з конкретної гілки/тега використовуючи наступну команду:

$ git clone --depth=1 --branch=<tag_name> <repo_url>

де:

tag_name - ім'я гілки/тега;

repo_url - https-адреса приватного репозиторія з параметрами авторизації.

Приклад:

$ git clone --depth=1 --branch=develop https://Velychko-Vitalii:ae9c2fa2d73fbbb0bd0a5ffa746f1df59036815c@github.com/malakhovks/ken.git

Або отримати реліз у вигляді архіву (початковий код програми KEn) у розробника, розпакувати його та перейти до наступного етапу.

<!--- Клонування початкового коду програми KEn з приватного git-репозиторію сервісу GitHub використовуючи ключ розгортання Deploy key:

Настанови цього етапу в розробці. -->

  1. Перехід в діректорію ken:
$ cd ken
  1. Перехід в гілку, яку потрібно використовувати для компіляції/збірки, командою git checkout:
$ git checkout <branch_name>

де:

branch_name - ім'я гілки;

git-репозиторій програми KEn має дві основні гілки: develop та master.

Гілка master містить стабільний початковий код програми KEn.

Гілка develop містить робочий початковий код програми KEn.

Приклад:

$ git checkout master
  1. Створення ізольованого застосунку Docker, так званого docker image з файлу Dockerfile:
$ docker build . -t <image name>

де:

image name - ім'я ізольованого застосунку docker image.

Приклад:

$ docker build . -t ken_image

Створення ізольованого застосунку ken_image може зайняти тривалий час в залежності від потужностей апаратного забезпечення. Повна документація по командам Docker доступна за посиланням Docker documentation.

  1. Запуск створеного ізольованого застосунку ken_image в контейнері ken:
$ docker run --restart always --name ken -d -p 80:80 ken_image 

Команда docker run з параметром --restart always дозволяє автоматично перезапускати при перезавантаженні операційної системи, що дозволяє досягти безперебійної роботи сервісу.

Основні команди керування Docker-контейнером:

Деякі корисні параметри для запуску Docker-контейнера:


Компіляція, збірка та розгортання мережевого засобу KEn (з приватного репозиторію) в середовищі програми віртуалізації для операційних систем VirtualBox

Системні вимоги

Віртуальна машина - модель обчислювальної машини, створеної шляхом віртуалізації обчислювальних ресурсів: процесора, оперативної пам'яті, пристроїв зберігання та вводу і виводу інформації. Віртуальна машина на відміну від програми емуляції конкретного пристрою забезпечує повну емуляцію фізичної машини чи середовища виконання (для програми).

VirtualBox - програма для створення віртуальних машин, що належить Oracle Corporation. Ця програма є в вільному доступі та підтримується основними операційними системами Linux, FreeBSD, Mac OS X, OS/2 Warp, Microsoft Windows, які підтримують роботу гостьових операційних систем FreeBSD, Linux, OpenBSD, OS/2 Warp, Windows і Solaris.

Ключові можливості

Компіляція, збірка та розгортання мережевого засобу KEn (з приватного репозиторію) в середовищі програми віртуалізації для операційних систем VirtualBox складається з наступних етапів:

  1. Створення віртуальної машини з операційною системою Alpine Linux 3.9.4 x86-64 або новішою, згідно настановам користувача наведених на офіційному сайті wiki-документації VirtualBox або використовуючи відео-туторіали: Download, Install & Configure Alpine linux - Tutorial; Alpine Linux 3.6.2 Installation + XFCE Desktop Environment on Oracle VirtualBox. Встановити апаратні ресурси для віртуальної машини згідно прогнозованого навантаження на сервіс KEn.
  2. Встановлення Git та Docker CE в середовиші віртуальної машини з операційною системою Alpine Linux 3.9.4 x86-64 згідно настановам користувача наведених на офіційному сайті wiki-документації wiki.alpinelinux.org.
  3. Клонування початкового коду програми KEn з приватного git-репозиторію сервісу GitHub. Цей етап можна виконати використовуючи особистий маркер доступу token до приватного репозиторію GitHub або використовуючи ключ розгортання Deploy key до приватного репозиторію GitHub.

Клонування початкового коду програми KEn з приватного git-репозиторію сервісу GitHub використовуючи особистий маркер доступу token:

$ git clone https://<username1>:<token>@github.com/username/repo_name.git

де:

username1 - Ваше ім'я користувача GitHub;

token - Personal access tokens - особистий маркер доступу до приватного репозиторію GitHub;

github.com/username/repo_name.git - адреса приватного git-репозиторію сервісу GitHub, тобто github.com/malakhovks/ken.git.

Приклад:

$ git clone https://Velychko-Vitalii:ae9c2fa2d73fbbb0bd0a5ffa746f1df59036815c@github.com/malakhovks/ken.git

Або клонувати початковий код програми KEn з приватного git-репозиторію сервісу GitHub з конкретної гілки/тега використовуючи наступну команду:

$ git clone --depth=1 --branch=<tag_name> <repo_url>

де:

tag_name - ім'я гілки/тега;

repo_url - https-адреса приватного репозиторія з параметрами авторизації.

Приклад:

$ git clone --depth=1 --branch=develop https://Velychko-Vitalii:ae9c2fa2d73fbbb0bd0a5ffa746f1df59036815c@github.com/malakhovks/ken.git

Або отримати реліз у вигляді архіву (початковий код програми KEn) у розробника, розпакувати його та перейти до наступного етапу.

<!-- Клонування початкового коду програми KEn з приватного git-репозиторію сервісу GitHub використовуючи ключ розгортання Deploy key:

Настанови цього етапу в розробці. -->

  1. Перехід в директорію ken:
$ cd ken
  1. Перехід в гілку, яку потрібно використовувати для компіляції/збірки, командою git checkout:
$ git checkout <branch_name>

де:

branch_name - ім'я гілки;

git-репозиторій програми KEn має дві основні гілки: develop та master.

Гілка master містить стабільний початковий код програми KEn.

Гілка develop містить робочий початковий код програми KEn.

Приклад:

$ git checkout master
  1. Створення ізольованого застосунку Docker, так званого docker image з файлу Dockerfile:
$ docker build . -t <image name>

де:

image name - ім'я ізольованого застосунку docker image.

Приклад:

$ docker build . -t ken_image

Створення ізольованого застосунку ken_image може зайняти тривалий час в залежності від потужностей апаратного забезпечення. Повна документація по командам Docker доступна за посиланням Docker documentation.

  1. Запуск створеного ізольованого застосунку ken_image в контейнері ken:
$ docker run --restart always --name ken -d -p 80:80 ken_image 

Команда docker run з параметром --restart always дозволяє автоматично перезапускати при перезавантаженні операційної системи, що дозволяє досягти безперебійної роботи сервісу.

Основні команди керування Docker-контейнером:

Деякі корисні параметри для запуску Docker-контейнера:


Розгортання мережевого засобу KEn з готового docker-образа (в середовищі операційних систем Linux та Windows)

Системні вимоги

Розгортання мережевого засобу KEn з готового docker-образа (при використанні сервісу Docker Hub) складається з наступних етапів:

  1. Підключити обліковий запис Docker Hub:
$ docker login
  1. Отримати docker-образ з сервісу Docker Hub (ця операція можлива при наявності доступу до репозиторія malakhovks/ken):
$ docker pull malakhovks/ken
  1. Запуск отриманого docker-образа malakhovks/ken в контейнері ken:
$ docker run --restart always --name ken -d -p 80:80 malakhovks/ken 

Збереження зформованого docker-образа в файл (.tar архів) для подальшого використання:

docker save -o <шлях до .tar файлу що буде згенеровано> <імя docker-образа>

Приклад:

docker save -o D:\ken.tar malakhovks/ken

Розгортання мережевого засобу KEn з готового docker-образа (з використання вже отриманого docker-образа у вигляді .tar архіву) складається з наступних етапів:

  1. Отримати docker-образ мережевого засобу KEn у вигляді файлу типу tar archive та загрузити його командою load:
$ docker load -i <шлях до файлу .tar архіву з docker-образом>

Приклад:

$ docker load -i D:\ken.tar
  1. Запуск отриманого docker-образа malakhovks/ken в контейнері ken:
$ docker run --restart always --name ken -d -p 80:80 malakhovks/ken 

Розгортання мережевого засобу KEn з готового docker-образа (з використанням початкового коду мережевого засобу KEn) складається з наступних етапів:

  1. Перехід в діректорію ken:
$ cd ken
  1. Створення ізольованого застосунку Docker, так званого docker image з файлу Dockerfile:
$ docker build . -t <image name>

де:

image name - ім'я ізольованого застосунку docker image.

Приклад:

$ docker build . -t ken_image

Створення ізольованого застосунку ken_image може зайняти тривалий час в залежності від потужностей апаратного забезпечення. Повна документація по командам Docker доступна за посиланням Docker documentation.

  1. Запуск створеного ізольованого застосунку ken_image в контейнері ken:
$ docker run --restart always --name ken -d -p 80:80 ken_image 

Команда docker run з параметром --restart always дозволяє автоматично перезапускати при перезавантаженні операційної системи, що дозволяє досягти безперебійної роботи сервісу.


Опис служб (веб-сервісів) мережевого засобу KEn (Ukrainian, English) доступних розробнику

Розробнику доступні наступні служби через кінцеві точки API (API endpoints):

ПозначенняСлужбаКінцева точка APIМетод http-запиту
S1формування спеціалізованої XML-структури тексту allterms.xmlhost[:port]/ken/api/en/alltermsPOST
S2формування спеціалізованої XML-структури тексту parce.xmlhost[:port]/ken/api/en/parcexmlPOST
S3візуалізації залежностей термінівhost[:port]/ken/api/en/html/depparse/nounchunkPOST
S4візуалізації іменованих сутностей текстуhost[:port]/ken/api/en/html/nerPOST
S5візуалізації синтаксичних залежностей речення/ken/api/en/html/depparse/sentenceGET
S6графічного інтерфейсу користувачаhost[:port]/GET

S1 - служба формування спеціалізованої XML-структури тексту allterms.xml

Опис вхідних даних

Вхідними даними можуть бути файли форматів .txt, .docx, .pdf, які містять текстові дані англійською мовою.

Використовуючи метод http-запиту POST можна відправити тільки один файл (доступних форматів) для опрацювання службою формування спеціалізованої XML-структури тексту.

Приклад POST запиту до кінцевої точки служби S1 на мові програмування JavaScript з використанням Fetch API:

# Детальний опис Fetch API за посиланням https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

# Файли можна завантажувати за допомогою елемента вводу HTML <input type = "file" />, FormData() та fetch().
var formData = new FormData();
var fileField = document.querySelector('input[type="file"]');

# https://developer.mozilla.org/en-US/docs/Web/API/FormData/append
# formData.append(name, value);
formData.append('file', fileField.files[0]);

fetch("file", 'host[:port]/ken/api/en/allterms', {
                method: 'post',
                body: formData
            })
.then(response => response.text())
.catch(error => console.error('Error:', error))
.then(response => console.log('Success:', response));

Процес формування спеціалізованої XML-структури тексту може зайняти деякий час (в залежності від обсягу тексту), але в загальному випадку вихідні дані формуються миттєво.

Опис вихідних даних

Вихідними даними є спеціалізована XML-структура тексту allterms.xml.

XML-Схема вихідних даних:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="termsintext">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="filepath"/>
        <xs:element name="exporterms">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="term" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="ttype"/>
                    <xs:element type="xs:string" name="tname"/>
                    <xs:element type="xs:byte" name="wcount"/>
                    <xs:element type="xs:string" name="osn" maxOccurs="unbounded" minOccurs="0"/>
                    <xs:element type="xs:string" name="sentpos" maxOccurs="unbounded" minOccurs="0"/>
                    <xs:element type="xs:short" name="relup" maxOccurs="unbounded" minOccurs="0"/>
                    <xs:element type="xs:short" name="reldown" maxOccurs="unbounded" minOccurs="0"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="sentences">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="sent" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Елемент exporterms містить послідовність елементів term, що описує терміни та їх параметри з опрацьованого тексту.

Параметри термінів описуються наступними елементами:

S2 - служба формування спеціалізованої XML-структури тексту parce.xml

Опис вхідних даних

Вхідними даними можуть бути файли форматів .txt, .docx, .pdf.

Використовуючи метод http-запиту POST можна відправити тільки один файл (доступних форматів) для опрацювання службою формування спеціалізованої XML-структури тексту.

Приклад POST запиту до кінцевої точки служби S2 на мові програмування JavaScript з використанням Fetch API:

# Детальний опис Fetch API за посиланням https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

# Файли можна завантажувати за допомогою елемента вводу HTML <input type = "file" />, FormData() та fetch().
var formData = new FormData();
var fileField = document.querySelector('input[type="file"]');

# https://developer.mozilla.org/en-US/docs/Web/API/FormData/append
# formData.append(name, value);
formData.append('file', fileField.files[0]);

fetch("file", 'host[:port]/ken/api/en/parcexml', {
                method: 'post',
                body: formData
            })
.then(response => response.text())
.catch(error => console.error('Error:', error))
.then(response => console.log('Success:', response));

Процес формування спеціалізованої XML-структури тексту може зайняти деякий час (в залежності від обсягу тексту), але в загальному випадку вихідні дані формуються миттєво.

Опис вихідних даних

Вихідними даними є спеціалізована XML-структура тексту parce.xml.

XML-Схема вихідних даних:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="text">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="sentence" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="item" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="word"/>
                    <xs:element type="xs:string" name="osnova"/>
                    <xs:element type="xs:string" name="lemma"/>
                    <xs:element type="xs:string" name="kflex"/>
                    <xs:element type="xs:string" name="flex"/>
                    <xs:element type="xs:byte" name="number"/>
                    <xs:element type="xs:short" name="pos"/>
                    <xs:element type="xs:byte" name="group_n"/>
                    <xs:element type="xs:string" name="speech"/>
                    <xs:element type="xs:byte" name="relate"/>
                    <xs:element type="xs:string" name="rel_type"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element type="xs:byte" name="sentnumber"/>
              <xs:element type="xs:string" name="sent"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Елемент text містить послідовність елементів sentence, що описує речення та їх параметри згідно лінгвістичної обробки опрацьованого тексту, зокрема, синтаксичний аналіз речень, граматичний аналіз речень та морфологічний аналіз речень.

Параметри речень описуються наступними елементами:

S4 - служба візуалізації іменованих сутностей тексту

Опис вхідних даних

Вхідними даними є текстові дані (зокрема JSON-масив речень у вигляді JSON-строки) англійською мовою.

Приклад вхідних даних для служба візуалізації іменованих сутностей тексту:

[
  "After the vision of the Semantic Web was broadcasted at the turn of the millennium, ontology became a synonym for the solution to many problems concerning the fact that computers do not understand human language: if there were an ontology and every document were marked up with it and we had agents that would understand the mark-up, then computers would finally be able to process our queries in a really sophisticated way.",
  "Some years later, the success of Google shows us that the vision has not come true, being hampered by the incredible amount of extra work required for the intellectual encoding of semantic mark-up – as compared to simply uploading an HTML page.",
  "To alleviate this acquisition bottleneck, the field of ontology learning has since emerged as an important sub-field of ontology engineering.",
  "It is widely accepted that ontologies can facilitate text understanding and automatic processing of textual resources.",
  "Moving from words to concepts not only mitigates data sparseness issues, but also promises appealing solutions to polysemy and homonymy by finding non-ambiguous concepts that may map to various realizations in – possibly ambiguous – words.",
  "Numerous applications using lexical-semantic databases like WordNet (Miller, 1990) and its non-English counterparts, e.g. EuroWordNet (Vossen, 1997) or CoreNet (Choi and Bae, 2004) demonstrate the utility of semantic resources for natural language processing.",
  "Python is a high-level programming language."
]

Приклад POST запиту до кінцевої точки служби S4 на мові програмування JavaScript з використанням jQuery:

jQuery.ajax({
    url: "host[:port]/ken/api/en/html/ner",
    type: "POST",
    headers: {
        "Content-Type": "text/plain; charset=utf-8",
    },
    processData: false,
    data: "[
  \"After the vision of the Semantic Web was broadcasted at the turn of the millennium, ontology became a synonym for the solution to many problems concerning the fact that computers do not understand human language: if there were an ontology and every document were marked up with it and we had agents that would understand the mark-up, then computers would finally be able to process our queries in a really sophisticated way.\",
  \"Some years later, the success of Google shows us that the vision has not come true, being hampered by the incredible amount of extra work required for the intellectual encoding of semantic mark-up – as compared to simply uploading an HTML page.\",
  \"To alleviate this acquisition bottleneck, the field of ontology learning has since emerged as an important sub-field of ontology engineering.\",
  \"It is widely accepted that ontologies can facilitate text understanding and automatic processing of textual resources.\",
  \"Moving from words to concepts not only mitigates data sparseness issues, but also promises appealing solutions to polysemy and homonymy by finding non-ambiguous concepts that may map to various realizations in – possibly ambiguous – words.\",
  \"Numerous applications using lexical-semantic databases like WordNet (Miller, 1990) and its non-English counterparts, e.g. EuroWordNet (Vossen, 1997) or CoreNet (Choi and Bae, 2004) demonstrate the utility of semantic resources for natural language processing.\",
  \"Python is a high-level programming language.\"
]",
})
.done(function(data, textStatus, jqXHR) {
    console.log("HTTP Request Succeeded: " + jqXHR.status);
    console.log(data);
})
.fail(function(jqXHR, textStatus, errorThrown) {
    console.log("HTTP Request Failed");
})
.always(function() {
    /* ... */
});

Опис вихідних даних

Вихідними даними є спеціалізована HTML-структура тексту:

<div class="entities" style="line-height: 2.5">After the vision of the Semantic Web was broadcasted at 
<mark class="entity" style="background: #bfe1d9; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    the turn of the millennium
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">DATE</span>
</mark>
, ontology became a synonym for the solution to many problems concerning the fact that computers do not understand human language: if there were an ontology and every document were marked up with it and we had agents that would understand the mark-up, then computers would finally be able to process our queries in a really sophisticated way. 
<mark class="entity" style="background: #bfe1d9; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    Some years later
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">DATE</span>
</mark>
, the success of 
<mark class="entity" style="background: #7aecec; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    Google
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">ORG</span>
</mark>
 shows us that the vision has not come true, being hampered by the incredible amount of extra work required for the intellectual encoding of semantic mark-up – as compared to simply uploading an HTML page. To alleviate this acquisition bottleneck, the field of ontology learning has since emerged as an important sub-field of ontology engineering. It is widely accepted that ontologies can facilitate text understanding and automatic processing of textual resources. Moving from words to concepts not only mitigates data sparseness issues, but also promises appealing solutions to polysemy and homonymy by finding non-ambiguous concepts that may map to various realizations in – possibly ambiguous – words. Numerous applications using lexical-semantic databases like 
<mark class="entity" style="background: #7aecec; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    WordNet
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">ORG</span>
</mark>
 (
<mark class="entity" style="background: #7aecec; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    Miller
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">ORG</span>
</mark>
, 
<mark class="entity" style="background: #bfe1d9; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    1990
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">DATE</span>
</mark>
) and its non-
<mark class="entity" style="background: #c887fb; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    English
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">NORP</span>
</mark>
 counterparts, e.g. EuroWordNet (Vossen, 
<mark class="entity" style="background: #bfe1d9; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    1997
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">DATE</span>
</mark>
) or 
<mark class="entity" style="background: #7aecec; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    CoreNet
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">ORG</span>
</mark>
 (Choi and Bae, 
<mark class="entity" style="background: #bfe1d9; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em; box-decoration-break: clone; -webkit-box-decoration-break: clone">
    2004
    <span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; text-transform: uppercase; vertical-align: middle; margin-left: 0.5rem">DATE</span>
</mark>
) demonstrate the utility of semantic resources for natural language processing. Python is a high-level programming language.</div>

Корисні посилання

Платформа Docker для створення, розгортання і запуску додатків на прикладі Python Flask application

Система черг для Python Flask application - uWSGI Spooler

Розгортання додатків Python Flask application на Windows Server (IIS) з використанням FastCGI

Тестування

Розділ доповнюється.


KEn (Ukrainian, English) is an NLP-powered Web service for contextual and semantic analysis with document taxonomy building feature.

Important note: ken project and documentation are in active development. For any technical clarifications and questions contact us via email: malakhovks@nas.gov.ua or via Issues. The recent Russian's rocket shelling on critical infrastructure in Ukraine and Kyiv led to the shutdown of the https://ken.e-rehab.pp.ua/ server.

Table of Contents

Features

KEn network toolkit (Web service with API) is designed to distinguish terms from the natural language texts in English using spaCy - an open source library for advanced natural language processing.

KEn (Ukrainian, English) Web service covers all the most important stages of the natural language processing, namely:


Building and running under UNIX (Linux/MacOS) with Docker

Clone from git repository:

git clone https://username:token@github.com/username/repo_name.git

Or clone from the specific branch/tag of git repository:

git clone --depth=1 --branch=<tag_name> <repo_url>

Checkout the branch you want to use:

git checkout <branch_name>

Build an image from a Dockerfile (It creates an image named ken_image):

docker build . -t ken_image

You can run the image ken_image now with command:

docker run --name ken -d -p 80:80 ken_image

or

docker run --restart always --name ken -d -p 80:80 ken_image

(to see the console output, attach to the container; to detach press Ctrl+C):

docker attach ken

(to stop the container):

docker stop ken

(to start the container again):

docker start ken

(to remove the container; needs to be stopped):

docker rm ken

Some useful options when running container:


Building and running under Windows

Install latest Python 2.7.x:

https://www.python.org/downloads/windows/

Update setuptools:

pip install -U setuptools

Update pip:

python -m pip install --upgrade pip

Install Visual C++ compiler: Install corresponding visual c++ compiler and make sure it match with your python version.

Visual C++CPython
14.03.5, 3.6
10.03.3, 3.4
9.02.6, 2.7, 3.0, 3.1, 3.2

If connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed then:

pip install --trusted-host pypi.python.org linkchecker

Install requirements.txt:

pip install -r requirements.txt

Get ready image from dockerhub registry

  1. Login
docker login
  1. Pull image from dockerhub
docker pull malakhovks/ken
  1. Run image in container
docker run --restart always --name ken -d -p 80:80 malakhovks/ken 

Essential Docker CLI commands

Docker is a great tool for building microservices, allowing you to create cloud-based applications and systems. To make the most of it via your terminal, here is a run down of the top 10 Docker commands for your terminal.

A container is launched by running an image. An image is an executable package that includes everything needed to run an application–the code, a runtime, libraries, environment variables, and configuration files.

A container is a runtime instance of an image–what the image becomes in memory when executed (that is, an image with state, or a user process). You can see a list of your running containers with the command, *docker ps*, just as you would in Linux. — from Docker Concepts

  1. docker ps — Lists running containers. Some useful flags include: -a / -all for all containers (default shows just running) and —-quiet /-q to list just their ids (useful for when you want to get all the containers).
  2. docker pull — Most of your images will be created on top of a base image from the Docker Hub registry. Docker Hub contains many pre-built images that you can pull and try without needing to define and configure your own. To download a particular image, or set of images (i.e., a repository), use docker pull.
  3. docker build — The docker build command builds Docker images from a Dockerfile and a “context”. A build’s context is the set of files located in the specified PATH or URL. Use the -t flag to label the image, for example docker build -t my_container . with the . at the end signalling to build using the currently directory.
  4. docker run — Run a docker container based on an image, you can follow this on with other commands, such as -it bash to then run bash from within the container. Also see Top 10 options for docker run — a quick reference guide for the CLI command. docker run my_image -it bash
  5. docker logs — Use this command to display the logs of a container, you must specify a container and can use flags, such as --follow or -f to follow the output in the logs of using the program. docker logs --follow my_container
  6. docker volume ls — This lists the volumes, which are the preferred mechanism for persisting data generated by and used by Docker containers.
  7. docker rm — Removes one or more containers: docker rm my_container. Remove all containers: docker rm $(docker ps -a -q)
  8. docker rmi — Removes one or more images: docker rmi my_image. Remove all images: docker rmi $(docker images -q)
  9. docker stop — Stops one or more containers. docker stop my_containerstops one container, while docker stop $(docker ps -a -q) stops all running containers. A more direct way is to use docker kill my_container, which does not attempt to shut down the process gracefully first.
  10. Use them together, for example to clean up all your docker images and containers:
  1. Exploring Docker container's file system: docker exec -t -i mycontainer /bin/bash.
  2. Copying files from Docker container to host: docker cp <containerId>:/file/path/within/container /host/path/target.
  3. Copying files from host to Docker container: docker cp foo.txt mycontainer:/foo.txt.
  4. List images: docker image ls -a.