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:
- Development of the cloud-based platform for patient-centered telerehabilitation of oncology patients with mathematical-related modeling, application ID: 2021.01/0136.
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
The latest version of KEn (Ukrainian, English) is available for free use (for research and educational purposes) via the link: 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) - мережевий засіб виокремлення термінів з природномовних текстів українською та англійською мовами.
Актуальна версія KEn (Ukrainian, English) доступна для вільного використання в науково-дослідних та педагогічних цілях за посиланням: https://ken.e-rehab.pp.ua/
- Призначення та функції
- Програмні залежності
- Системні вимоги
- Інструментарій для управління ізольованими Linux-контейнерами Docker
- Архітектура мережевого засобу KEn
- Компіляція, збірка та розгортання мережевого засобу KEn (з приватного репозиторію) в середовищі UNIX-подібних операційних систем Linux
- Компіляція, збірка та розгортання мережевого засобу KEn (з приватного репозиторію) в середовищі програми віртуалізації для операційних систем VirtualBox
- Розгортання мережевого засобу KEn з готового docker-образа (в середовищі операційних систем Linux та Windows)
- Опис служб (веб-сервісів) мережевого засобу KEn доступних розробнику
- Корисні посилання
Лінгвістично-семантичний аналіз природної мови – це процес обробки природномовних текстів англійською та українською мовами та формування визначених вихідних даних:
- формалізація представлення синтактико-семантичної структури речень у вигляді спеціалізованих XML- та HTML- структур;
- автоматична екстракція/виокремлення з документів одно- та багатослівних термінів;
- автоматична екстракція/виокремлення контекстів, у яких використовуються відповідні терміни, та представлення їх у вигляді спеціалізованих XML- та HTML- структур;
- виокремлення заданих семантичних відношень на основі шаблонів їх описів.
Мережевий засіб (у вигляді веб-сервісу з API) KEn (Ukrainian, English) призначений для виокремлення термінів з природномовних текстів українською та англійською мовами з використанням бібліотеки з відкритим вихідним кодом для передової обробки природних мов - spaCy.
Мережевий засіб (у вигляді веб-сервісу з API) KEn охоплює всі найважливіші етапи обробки природної мови, а саме:
- екстракція тексту з документів форматів
pdf
,docx
,txt
; - базова нормалізація текстів - так званий лінгвістичний препроцесінг (виправлення дефектів отриманих в результаті процедури екстракції тексту з документів
pdf
,docx
,txt
); - перевірка орфографії тексту та автоматичне виправлення помилок;
- базова сегментація тексту на речення;
- розмічування частин мови (англ. Part-of-Speech tagging) для кожного речення тексту (поверхневий синтаксичний аналіз);
- лематизація слів (приведення до словарної форми слова) на рівні речення;
- стемінг (англ. Stemming) слів (процес скорочення слова до основи шляхом відкидання допоміжних частин, таких як закінчення чи суфікс) на рівні речення;
- виокремлення термінів (так званих іменних груп NP
base noun phrases
,noun chunks
- словосполучень, в якому іменник є вершиною, тобто головним словом, що визначає характеристику всієї складової) на підтвердження того, чи є вони термінами (Те́рмін (від лат. terminus — межа, кордон) — слово або словосполучення, застосоване для позначення деякого поняття.), більше детально процес виокремлення термінів описано за посиланнями: spaCy dependency-parse та Wikipedia Noun phrase; - формування спеціалізованих
xml
-структур тексту.
- Python 2.7.16– інтерпретатор та стандартні бібліотеки
- spaCy – бібліотека з відкритим вихідним кодом для передової обробки природних мов
- Flask – мікрофреймворк для веб-додатків
- Flask-CORS – розширення Flask для обробки спільного використання ресурсів з різних джерел (англ. Cross-Origin Resource Sharing, CORS)
- pdfminer – інструмент для екстракції інформації з документів PDF
- uWSGI https://uwsgi-docs.readthedocs.io/en/latest/) – веб-сервер і сервер веб-додатків, спочатку реалізований для запуску додатків Python через протокол WSGI (і його бінарний варіант uwsgi)
- TextBlob – бібліотека для обробки текстових даних
- Natural Language Toolkit NLTK – пакет бібліотек і програм для символьної і статистичної обробки природної мови
- nginx – вільний веб-сервер і проксі-сервер
- Для компіляції, збірки та розгортання мережевого засобу
KEn
(з приватного репозиторію) в середовищіUNIX
-подібних операційних системLinux
- Для компіляції, збірки та розгортання мережевого засобу
KEn
(з приватного репозиторію) в середовищі програми віртуалізації для операційних системVirtualBox
- Для розгортання мережевого засобу
KEn
з готового docker-образа
Docker — інструмент з відкритим сирцевим кодом, який автоматизує розгортання застосунку у середовищах, що підтримують контейнеризацію. Docker допомагає викладати код швидше, швидше тестувати, швидше викладати додатки і зменшити час між написанням і запуском коду. Docker робить це за допомогою легкої платформи контейнерної віртуалізації, використовуючи процеси і утиліти, які допомагають керувати і викладати програми. У своєму ядрі docker дозволяє запускати практично будь-який додаток, безпечно ізольований в контейнері. Безпечна ізоляція дозволяє запускати на одному хості багато контейнерів одночасно.
Переваги Docker:
- пришвидшення процесу розробки;
- зручна інкапсуляція застосунку;
- однакова поведінка на локальній машині, а також dev/staging/production серверах;
- простий і чіткий моніторинг;
- зручність масштабування.
- Контейнер
(Container)
— запущений екземпляр, що інкапсулює необхідне ПЗ. Контейнери завжди створюються з образу і можуть надавати порти та дисковий простір для взаємодії з іншими контейнерами чи/та зовнішнім ПЗ. Контейнери можна з легкістю знищити/видалити та створити знову. Контейнери не зберігають стан. - Образ
(Image)
— базовий елемент кожного контейнеру. При створенні образу кожен крок кешується і може бути використаний повторно (копіювання під час запису). Час на збірку залежить від самого образу. З іншого боку: контейнери можна одразу запустити з образу. - Порт
(Port)
— TCP/UDP порт у своєму звичному розумінні. Для спрощення припустимо, що порти можуть бути відкриті для зовнішнього ПЗ (доступні з хостової ОС) або підключатися до інших контейнерів (тобто доступні лише з цих контейнерів та невидимі для іншого ПЗ). Volume
можна вважати спільною текою. Volume ініціалізується при створенні контейнеру і призначений для збереження даних, незалежно від життєвого циклу контейнера.Registry
(Сховище) — сервер, що зберігає образи Docker. Ми можемо порівняти його з Github: витягуєте образ зі сховища, щоб розгорнути його локально, а потім відправляєте локально зібрані образи до віддаленого сховища.- Docker Hub — сховище з веб-інтерфейсом від Docker Inc. Зберігає багато Docker-образів з різним ПЗ. Docker Hub — джерело «офіційних» образів Docker, створених їх командою або у співпраці з іншими компаніями (але це не обов’язково образи від офіційних виробників ПЗ). Якщо ви зареєстровані, можна переглянути перелік потенційних вразливостей таких образів. Доступні платні та безкоштовні облікові записи. Для безкоштовного облікового запису можна створювати один приватний образ та безліч публічних.
- Docker Store — сервіс дуже подібний на Docker Hub. Це майданчик з рейтингами, відгуками тощо.
Docker складається з двох головних компонентів:
- Docker: платформа віртуалізації з відкритим кодом;
- Docker Hub: платформа-як-сервіс для поширення і управління docker контейнерами.
Docker використовує архітектуру клієнт-сервер. Docker клієнт спілкується з демоном Docker, який бере на себе створення, запуск, розподіл контейнерів. Обидва, клієнт і сервер можуть працювати на одній системі, також можна підключити клієнт до віддаленого демона docker. Клієнт і сервер спілкуються через сокет або через RESTful API.
Користувач не взаємодіє з сервером на пряму, а використовує для цього клієнт. Docker- клієнт - головний інтерфейс до Docker системи. Він отримує команди від користувача і взаємодіє з docker-демоном.
Щоб розуміти, з чого складається docker, потрібно знати про три його компоненти:
- образи (images);
- реєстр (registries) контейнери;
Docker-образ - це read-only шаблон. Наприклад, образ може містити операційну систему Ubuntu з Apache і додатком на ній. Образи використовуються для створення контейнерів. Docker дозволяє легко створювати нові образи, оновлювати існуючі, або можна завантажити образи створені іншими людьми. Образи - це компонента збірки docker-а. Docker-реєстр зберігає образи. Є публічні і приватні реєстри, з яких можна скачати або завантажити образи. Публічний Docker-реєстр - це Docker Hub. Там зберігається величезна колекція образів. Образи можуть бути створені вами або можна використовувати образи створені іншими користувачами. Реєстри - це компонента поширення.
Контейнери схожі на директорії. У контейнерах міститься все, що потрібно для роботи програми. Кожен контейнер створюється з образу. Контейнери можуть бути створені, запущені, зупинені, перенесені або видалені. Кожен контейнер ізольований і є безпечною платформою для додатка. Контейнери - це компонента роботи. Виходячи з цих трьох компонентів в Docker можна:
- створювати образи, в яких знаходяться додатки;
- створювати контейнери з образів, для запуску додатків;
- розповсюдженню через Docker Hub або інший реєстр образів.
Отже образ - це 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, яка говорить, що буде запущений новий контейнер. Мінімальними вимогами для запуску контейнера є такі атрибути:
- який образ використовувати для створення контейнера. У нашому випадку ubuntu;
- команду яку ви хочете запустити коли контейнер буде запущений. У нашому випадку /bin/bash.
Після запуску цієї команди Docker, по порядку, робить наступне:
- завантажує образ ubuntu: docker перевіряє наявність образу ubuntu на локальній машині, і якщо його немає - то викачує його з Docker Hub. Якщо ж образ є, то використовує його для створення контейнера;
- створює контейнер: коли образ отриманий, docker використовує його для створення контейнера;
- ініціалізує файлову систему і монтує read-only рівень: контейнер створений в файлової системі і read-only рівень доданий образ;
- ініціалізує мережу / міст: створює мережевий інтерфейс, який дозволяє docker-у спілкуватися хост машиною;
- установка IP адреси: знаходить і задає адресу;
- запускає вказаний процес: запускає програму;
- обробляє та видає вихід додатку: підключається і залоговує стандартний вхід, вихід і потік помилок додатку, щоб можна було відслідковувати як працює програма.
Тепер у вас є робочий контейнер. Ви можете управляти своїм контейнером, взаємодіяти з вашим додатком. Коли вирішите зупинити додаток, видаліть контейнер.
Докер написаний на мові Go і використовує деякі можливості ядра Linux, щоб реалізувати наведений вище функціонал.
Docker використовує технологію namespaces для організації ізольованих робочих просторів, які називаються контейнерами. Коли запускається контейнер, docker створює набір просторів імен для даного контейнера. Це створює ізольований рівень, кожен контейнер запущений в своєму просторі імен, і не має доступ до зовнішньої системи.
Список деяких просторів імен, які використовує docker:
pid
: для ізоляції процесу;net
: для управління мережевими інтерфейсами;ipc
: для управління IPC ресурсами. (ICP: InterProccess Communication);mnt
: для управління точками монтування;utc
: для ізолювання ядра і контролю генерації версій (UTC: Unix timesharing system).
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.
Теоретичній базис реалізації процесу лінгвістично-семантичного аналізу природномовних текстів англійською мовою з використанням бібліотеки SpaCy та архітектура її статистичних моделей.
SpaCy – це бібліотека з відкритим вихідним кодом для обробки природних мов, розроблена з використанням мов програмування Python і Cython. В даний час бібліотека включає статистичні нейронні мережеві моделі для англійської, німецької, іспанської, португальської, французької, італійської, голландської, а також для інших мов з деякими обмеженнями. Основні особливості та функції SpaCy:
- Лексичний аналіз (англ. Tokenization). Реалізовано процес перетворення послідовності символів в послідовність токенів (груп символів, що відповідають певним шаблонам), та визначення їх типів.
- Розмітка частинами мови (англ. Part-of-Speech tagging, PoS tagging), також називається граматичним позначенням або розбором на частини мови. Реалізовано визначення належності слова в тексті (корпусі) до певної частини мови, що засноване як на його визначенні, так і на його контексті – тобто, на його зв'язку з суміжними і спорідненими словами у фразі, реченні, або абзаці.
- Аналіз граматичних залежностей (англ. Dependency Parsing). Реалізовано процес призначення позначок синтаксичної залежності, що описують відносини між окремими маркерами, наприклад суб'єктом або об'єктом.
- изначення меж речення (англ. Sentence boundary disambiguation, SBD або Sentence boundary detection, SBD). Реалізовано процес пошуку та сегментації окремих речень.
- Розпізнавання іменованих сутностей (англ. Named Entity Recognition, NER). Реалізована підзадача видобування інформації, яка намагається знайти і класифікувати іменовані сутності в неструктурованому тексті в заздалегідь визначені категорії, такі як імена людей, організації, місця, медичні коди, час, кількості, грошові значення, відсотки тощо.
Деякі з функцій SpaCy працюють незалежно, інші вимагають завантаження статистичних моделей (англ. Statistical models), що дозволяє SpaCy передбачати лінгвістичні анотації – наприклад, чи є слово дієсловом або іменником. Моделі SpaCy є статистичними, і кожне "рішення", яке вони приймають, наприклад, як тег призначення частини мови, або слово є іменованою сутністю - є прогнозом. Це передбачення базується на прикладах, на яких навчалась модель. SpaCy надає різноманітні лінгвістичні анотації, щоб мати уявлення про граматичну структуру тексту. Анотації включають в себе типи слів, як частини мови, і те, як слова зв'язані одне з одним. В даний час SpaCy пропонує статистичні моделі для різних мов, які можна встановити як окремі модулі Python. Моделі можуть відрізнятися за розмірами, швидкістю, використанням пам'яті, точністю і даними, які вони включають. Обрана модель завжди залежить від умов використання та текстів, що підлягають обробці. У випадку використання в загальних цілях, невеликі моделі за замовчуванням завжди є гарним початком. Вони зазвичай включають наступні компоненти:
- Двійкові вагові коефіцієнти (англ. Binary weights) для розпізнавання частин мови, аналізатора залежностей та розпізнавального пристрою з іменем об'єкта для прогнозування анотацій у контексті.
- Лексичні записи (англ. Lexical entries) в словнику, тобто слова та їхні контекстно-незалежні атрибути, як форма або орфографія.
- Векторне представлення слів (англ. Word embedding, Word vectors), тобто багатовимірне відображення слів, що дозволяє визначити, наскільки вони схожі (використовуючи коефіцієнт косинусної близькості контекстів слів в рамках дистрибутивної гіпотези).
- Параметри конфігурації, такі як мова і обробка налаштувань конвеєра (англ. Pipeline), ставлять SpaCy у правильний стан при завантаженні моделі.
Статистичні моделі 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), що містять природномовний текст, та складається з наступних етапів та компонентів:
- Екстракція тексту з документів форматів .pdf, .docx, .doc. На етапі екстракції тексту з електронних документів використовуються бібліотеки з відкритим вихідним кодом: Textract, pdftotext.
- Базова нормалізація тексту – так званий лінгвістичний препроцесінг (виправлення дефектів отриманих в результаті процедури екстрагування тексту з документів .pdf, .docx, .txt).
- Перевірка орфографії тексту та автоматичне виправлення помилок. На етапі перевірки орфографії тексту використовуються бібліотеки з відкритим вихідним кодом для обробки природних мов: LanguageTool, Hunspell.
- Лексичний аналіз (елементи лексичного аналізу) – токенізація (англ. Tokenizing) – в загальному випадку це процес перетворення послідовності символів в послідовність токенів: декомпозиція тексту в послідовність речень та декомпозиція речень в послідовність токенів (заздалегідь визначеної категорії) – слів (категорія – слово, словосполучення, термін), розділових знаків пунктуації, пробілів, тощо. На етапі лексичного аналізу тексту використовуються бібліотеки з відкритим вихідним кодом для обробки природних мов: SpaCy, NLTK.
- Граматичний аналіз (елементи граматичного аналізу) – розмітка тексту частинами мови (англ. Part-of-speech tagging) – в загальному випадку це процес присвоєння синтаксичної категорії кожному з токенів. На етапі граматичного аналізу тексту використовується бібліотека з відкритим вихідним кодом для обробки природних мов SpaCy.
- Морфологічний аналіз (елементи морфологічного аналізу) – в загальному випадку це процес лематизації – представлення слів у початковій словниковій формі. Лематизація значно скоротить словник і збільшить зв’язність текстів при побудові векторного представлення слів. На етапі морфологічного аналізу тексту використовуються бібліотеки з відкритим вихідним кодом для обробки природних мов: SpaCy, NLTK, Hunspell, LanguageTool.
- Синтаксичний аналіз (елементи синтаксичного аналізу) – парсинг та чанкінг (англ. Shallow parsing, англ. Chunking) – в загальному випадку це процес аналізу речення, який спочатку визначає їх складові частини (іменники, дієслова, прикметники тощо), а потім зв’язує їх з одиницями вищого порядку, які мають дискретні граматичні значення (іменні групи або фрази, групи дієслів тощо). На етапі синтаксичного аналізу тексту використовуються бібліотеки з відкритим вихідним кодом для обробки природних мов: SpaCy, TextBlob, NLTK, LanguageTool.
- Формування спеціалізованих XML-структур та HTML-структур тексту. Для реалізації цього етапу розроблені відповідні функції та процедури, що дозволяють отримати у вигляді вихідних даних результати конвеєру обробки електронних текстових документів.
Компіляція, збірка та розгортання мережевого засобу KEn
(з приватного репозиторію) в середовищі UNIX-подібних операційних систем Linux
- мінімальні апаратні ресурси:
x86-64
сумісний процесор з тактовою частотою 1 ГГц; оперативна пам'ять: 2 Гб; місце на жорсткому диску: 5 Гб; - UNIX-подібна операційна система
Linux
(при тестуванні компіляція, збірки та розгортання мережевого засобуKEn
використовувались дистрибутиви Ubuntu Server 18.04 LTS x86-64 та Alpine Linux 3.9.4 x86-64); - Git розподілена система керування версіями файлів та спільної роботи;
- Docker CE інструментарій для управління ізольованими
Linux/Windows
-контейнерами; - обліковий запис GitHub та ключ розгортання Deploy key;
- швидкісне підключення до мережі Інтернет.
Компіляція, збірка та розгортання мережевого засобу KEn в середовищі UNIX-подібних операційних систем Linux
складається з наступних етапів:
- Клонування початкового коду програми
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
:
$ cd ken
- Перехід в гілку, яку потрібно використовувати для компіляції/збірки, командою
git checkout
:
$ git checkout <branch_name>
де:
branch_name
- ім'я гілки;
git
-репозиторій програми KEn має дві основні гілки: develop
та master
.
Гілка master
містить стабільний початковий код програми KEn
.
Гілка develop
містить робочий початковий код програми KEn
.
Приклад:
$ git checkout master
- Створення ізольованого застосунку Docker, так званого
docker image
з файлуDockerfile
:
$ docker build . -t <image name>
де:
image name
- ім'я ізольованого застосунку docker image
.
Приклад:
$ docker build . -t ken_image
Створення ізольованого застосунку ken_image
може зайняти тривалий час в залежності від потужностей апаратного забезпечення.
Повна документація по командам Docker
доступна за посиланням Docker documentation.
- Запуск створеного ізольованого застосунку
ken_image
в контейнеріken
:
$ docker run --restart always --name ken -d -p 80:80 ken_image
Команда docker run
з параметром --restart always
дозволяє автоматично перезапускати при перезавантаженні операційної системи, що дозволяє досягти безперебійної роботи сервісу.
Основні команди керування Docker-контейнером:
docker attach ken
- побачити вихід консолі контейнераken
;docker stop ken
- зупинити контейнерken
;docker start ken
- відновити роботу (старт) контейнераken
;docker rm ken
- видалення контейнераken
(перед видаленням контейнера, його потрібно зупинити);
Деякі корисні параметри для запуску Docker-контейнера:
--name
- дає контейнеру ім'я, яке можна знайти у виводі командиdocker ps
;-p 80:80
- публікує порт 80. Другий номер 80 після двокрапки повідомляє, який порт серверnginx
слухає всередині контейнера;-d
- запускає контейнер, від'єднаний від терміналу. Потім журнали можна переглядати за допомогою команди журналів Dockerdocker logs
;-t
- щоб бачити консольний вихід Docker-контейнера;--restart on-failure
- автоматичний перезапуск невдалих контейнерів. Перезапускає контейнер, якщо він вийде з ладу через помилку, яка виявляється як ненульовий код виходу;--restart always
- завжди перезапускає контейнер, якщо він зупиняється. Якщо контейнер зупинено вручну, він перезапускається лише тоді, коли службаDocker
перезапускається або сам контейнер перезапускається вручну.
Компіляція, збірка та розгортання мережевого засобу KEn
(з приватного репозиторію) в середовищі програми віртуалізації для операційних систем VirtualBox
- мінімальні апаратні ресурси:
x86-64
сумісний процесор з тактовою частотою 2 ГГц; оперативна пам'ять: 4 Гб; місце на жорсткому диску: 20 Гб; - x86-64 сумісна UNIX-подібна операційна система
Linux
; x86-64 сумісна операційна системаMicrosoft Windows 7 Service Pack 1
або новіша; - VirtualBox програма віртуалізації для операційних систем версії
VirtualBox 6.0.8
або новіша; - Віртуальна машина з UNIX-подібною операційною системою
Linux
(при тестуванні компіляція, збірки та розгортання мережевого засобуKEn
використовувались дистрибутиви Ubuntu Server 18.04 LTS x86-64 та Alpine Linux 3.9.4 x86-64), яка включає наступне встановлене програмне забезпечення: Git розподілена система керування версіями файлів та спільної роботи; Docker CE інструментарій для управління ізольованимиLinux/Windows
-контейнерами; - обліковий запис GitHub та ключ розгортання Deploy key;
- швидкісне підключення до мережі Інтернет;
Віртуальна машина - модель обчислювальної машини, створеної шляхом віртуалізації обчислювальних ресурсів: процесора, оперативної пам'яті, пристроїв зберігання та вводу і виводу інформації. Віртуальна машина на відміну від програми емуляції конкретного пристрою забезпечує повну емуляцію фізичної машини чи середовища виконання (для програми).
VirtualBox - програма для створення віртуальних машин, що належить Oracle Corporation. Ця програма є в вільному доступі та підтримується основними операційними системами Linux, FreeBSD, Mac OS X, OS/2 Warp, Microsoft Windows, які підтримують роботу гостьових операційних систем FreeBSD, Linux, OpenBSD, OS/2 Warp, Windows і Solaris.
- кроссплатформовість;
- модульність;
- жива міграція;
- підтримка USB 2.0, коли пристрої хост-машини стають доступними для гостьових ОС (лише в пропрієтарній версії);
- підтримка 64-бітних гостьових систем (починаючи з версії 2.0), навіть на 32-бітних хост-системах (починаючи з версії 2.1, для цього потрібна підтримка технології віртуалізації процесором);
- підтримка SMP на стороні гостьової системи (починаючи з версії 3.0, для цього потрібна підтримка технології віртуалізації процесором);
- вбудований RDP-сервер, а також підтримка клієнтських USB-пристроїв поверх протоколу RDP (лише в пропрієтарній версії);
- експериментальна підтримка апаратного 3D-прискорення (OpenGL, DirectX 8/9 (з використанням коду wine) (лише в 32-бітних Windows XP и Vista)), для гостьових DOS/Windows 3.x/95/98/ME підтримка апаратного 3D-прискорення не передбачена;
- підтримка образів жостких дисків VMDK (VMware) и VHD (Microsoft Virtual PC), включаючи snapshots (починаючи з версії 2.1);
- підтримка iSCSI (лише в пропрієтарній версії);
- підтримка віртуалізації аудіопристроїв (емуляція AC97 або SoundBlaster 16 на вибір);
- підтримка різноманітних видів мережевої взаємодії (NAT, Host Networking via Bridged, Internal);
- підтримка ланцюжка збережених станів віртуальної машини (snapshots), до яких можна повернутися з будь-якого стану гостьової системи;
- підтримка Shared Folders для простого обміну файлами між хостовою та гостьовою системами (для гостьових систем Windows 2000 і новіше, Linux та Solaris);
- підтримка інтеграції робочих столів (seamless mode) хостової та гостьової ОС;
- є можливість вибору мови інтерфейса (підтримується і україномовний інтерфейс).
Компіляція, збірка та розгортання мережевого засобу KEn
(з приватного репозиторію) в середовищі програми віртуалізації для операційних систем VirtualBox складається з наступних етапів:
-
Створення віртуальної машини з операційною системою 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
. -
Встановлення Git та Docker CE в середовиші віртуальної машини з операційною системою Alpine Linux 3.9.4 x86-64 згідно настановам користувача наведених на офіційному сайті
wiki
-документації wiki.alpinelinux.org. -
Клонування початкового коду програми
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
:
$ cd ken
- Перехід в гілку, яку потрібно використовувати для компіляції/збірки, командою
git checkout
:
$ git checkout <branch_name>
де:
branch_name
- ім'я гілки;
git
-репозиторій програми KEn має дві основні гілки: develop
та master
.
Гілка master
містить стабільний початковий код програми KEn
.
Гілка develop
містить робочий початковий код програми KEn
.
Приклад:
$ git checkout master
- Створення ізольованого застосунку Docker, так званого
docker image
з файлуDockerfile
:
$ docker build . -t <image name>
де:
image name
- ім'я ізольованого застосунку docker image
.
Приклад:
$ docker build . -t ken_image
Створення ізольованого застосунку ken_image
може зайняти тривалий час в залежності від потужностей апаратного забезпечення.
Повна документація по командам Docker
доступна за посиланням Docker documentation.
- Запуск створеного ізольованого застосунку
ken_image
в контейнеріken
:
$ docker run --restart always --name ken -d -p 80:80 ken_image
Команда docker run
з параметром --restart always
дозволяє автоматично перезапускати при перезавантаженні операційної системи, що дозволяє досягти безперебійної роботи сервісу.
Основні команди керування Docker-контейнером:
docker attach ken
- побачити вихід конслолі контейнераken
;docker stop ken
- зупинити контейнерken
;docker start ken
- відновити роботу (старт) контейнераken
;docker rm ken
- видалення контейнераken
(перед видаленням контейнера, його потрібно зупинити);
Деякі корисні параметри для запуску Docker-контейнера:
--name
- дає контейнеру ім'я, яке можна знайти у виводі командиdocker ps
;-p 80:80
- публікує порт 80. Другий номер 80 після двокрапки повідомляє, який порт серверnginx
слухає всередині контейнера;-d
- запускає контейнер, від'єднаний від терміналу. Потім журнали можна переглядати за допомогою команди журналів Dockerdocker logs
;-t
- щоб бачити консольний вихід Docker-контейнера;--restart on-failure
- автоматичний перезапуск невдалих контейнерів. Перезапускає контейнер, якщо він вийде з ладу через помилку, яка виявляється як ненульовий код виходу;--restart always
- завжди перезапускає контейнер, якщо він зупиняється. Якщо контейнер зупинено вручну, він перезапускається лише тоді, коли службаDocker
перезапускається або сам контейнер перезапускається вручну.
Розгортання мережевого засобу KEn з готового docker-образа (в середовищі операційних систем Linux та Windows)
- Windows:
Windows 10 64bit - Pro, Enterprise or Education (Build 15063 or later);
SLAT
-сумісний процесор; оперативна пам'ять: мінімум 4 Гб. - Linux:
x86-64
сумісний процесор з тактовою частотою 2 ГГц; оперативна пам'ять: мінімум 4 Гб; - Git розподілена система керування версіями файлів та спільної роботи;
- Docker CE інструментарій для управління ізольованими
Linux/Windows
-контейнерами; - при варіанті отримання docker-образа з сервісу Docker Hub: обліковий запис Docker Hub, швидкісне підключення до мережі Інтернет та доступ до Docker Hub-репозиторію мережевого засобу KEn.
Розгортання мережевого засобу KEn з готового docker-образа (при використанні сервісу Docker Hub) складається з наступних етапів:
- Підключити обліковий запис Docker Hub:
$ docker login
- Отримати docker-образ з сервісу Docker Hub (ця операція можлива при наявності доступу до репозиторія malakhovks/ken):
$ docker pull malakhovks/ken
- Запуск отриманого docker-образа malakhovks/ken в контейнері
ken
:
$ docker run --restart always --name ken -d -p 80:80 malakhovks/ken
docker save -o <шлях до .tar файлу що буде згенеровано> <імя docker-образа>
Приклад:
docker save -o D:\ken.tar malakhovks/ken
Розгортання мережевого засобу KEn з готового docker-образа (з використання вже отриманого docker-образа у вигляді .tar
архіву) складається з наступних етапів:
- Отримати docker-образ мережевого засобу KEn у вигляді файлу типу tar archive та загрузити його командою load:
$ docker load -i <шлях до файлу .tar архіву з docker-образом>
Приклад:
$ docker load -i D:\ken.tar
- Запуск отриманого docker-образа malakhovks/ken в контейнері
ken
:
$ docker run --restart always --name ken -d -p 80:80 malakhovks/ken
Розгортання мережевого засобу KEn з готового docker-образа (з використанням початкового коду мережевого засобу KEn) складається з наступних етапів:
- Перехід в діректорію
ken
:
$ cd ken
- Створення ізольованого застосунку Docker, так званого
docker image
з файлуDockerfile
:
$ docker build . -t <image name>
де:
image name
- ім'я ізольованого застосунку docker image
.
Приклад:
$ docker build . -t ken_image
Створення ізольованого застосунку ken_image
може зайняти тривалий час в залежності від потужностей апаратного забезпечення.
Повна документація по командам Docker
доступна за посиланням Docker documentation.
- Запуск створеного ізольованого застосунку
ken_image
в контейнеріken
:
$ docker run --restart always --name ken -d -p 80:80 ken_image
Команда docker run
з параметром --restart always
дозволяє автоматично перезапускати при перезавантаженні операційної системи, що дозволяє досягти безперебійної роботи сервісу.
Розробнику доступні наступні служби через кінцеві точки API (API endpoints):
Позначення | Служба | Кінцева точка API | Метод http-запиту |
---|---|---|---|
S1 | формування спеціалізованої XML -структури тексту allterms.xml |
host[:port]/ken/api/en/allterms |
POST |
S2 | формування спеціалізованої XML -структури тексту parce.xml |
host[:port]/ken/api/en/parcexml |
POST |
S3 | візуалізації залежностей термінів | host[:port]/ken/api/en/html/depparse/nounchunk |
POST |
S4 | візуалізації іменованих сутностей тексту | host[:port]/ken/api/en/html/ner |
POST |
S5 | візуалізації синтаксичних залежностей речення | /ken/api/en/html/depparse/sentence |
GET |
S6 | графічного інтерфейсу користувача | host[:port]/ |
GET |
Вхідними даними можуть бути файли форматів .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
, що описує терміни та їх параметри з опрацьованого тексту.
Параметри термінів описуються наступними елементами:
- елемент
ttype
- позначення слова в тексті певної частиною мови згідно з Universal Dependencies scheme; - елемент
tname
- лема терміну (для багатослівних термінів - це правильна форма); - елемент
wcount
- кількість слів в терміні; - елемент
osn
- основа для кожного слова з терміну; - елемент
sentpos
- позиція терміну в тексті, подається у вигляді строки формату2/10
(в даному випадку означає, що термін знаходиться у 2-му реченні на 10 позиції); - елементи
relup
таreldown
- відображають зв'язки до інших термінів; - елементи
sentences
- містить масив елементівsent
, який містить речення з тексту. Порядок речень в елементіsentences
відповідаю порядку речень у вхідному тексті.
Вхідними даними можуть бути файли форматів .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
, що описує речення та їх параметри згідно лінгвістичної обробки опрацьованого тексту, зокрема, синтаксичний аналіз речень, граматичний аналіз речень та морфологічний аналіз речень.
Параметри речень описуються наступними елементами:
- елемент
sentnumber
- позиція речення в тексті, подається у вигляді строки формату1
(в даному випадку означає, що речення знаходиться на 1 позиції в тексті); - елемент
sent
- містить оригінальне речення, що обробляється; - елемент
ner
- містить послідовність елементівentity
, що описує розпізнані іменовані сутності:- елемент
entitytext
- лема іменованої сутності; - елемент
label
- мітка іменованої сутності, що визначає її категорію згідно списку анотацій бібліотеки spaCy; - елемент
startentityposcharacter
- позиція першого символу іменованої сутності (токенізація на рівні символів), подається у вигляді строки формату51
(в даному випадку означає, що перший символ іменованої сутності знаходиться на 51 позиції в реченні); - елемент
endentityposcharacter
- позиція останнього символу іменованої сутності (токенізація на рівні символів), подається у вигляді строки формату81
(в даному випадку означає, що останній символ іменованої сутності знаходиться на 81 позиції в реченні); - елемент
startentitypostoken
- позиція першого токену (першого слова) іменованої сутності (токенізація на рівні слів), подається у вигляді строки формату11
(в даному випадку означає, що позиція першого токену (першого слова) іменованої сутності в реченні - 11); - елемент
endentitypostoken
- позиція останнього токену (останнього слова) іменованої сутності (токенізація на рівні слів), подається у вигляді строки формату15
(в даному випадку означає, що позиція останнього токену (останнього слова) іменованої сутності в реченні - 15);
- елемент
- елемент
item
- містить набір елементів, що описують лінгвістичні параметри слів речення:- елемент
word
- містить слово в оригінальній формі; - елемент
lemma
- лема слова; - елемент
number
- позиція слова (токенізація на рівні слів), подається у вигляді строки формату1
(в даному випадку означає, що позиція слова в реченні - 1); - елемент
speech
- мітка, що визначає частину мови слова, згідно списку анотацій бібліотеки Конспект; - елемент
pos
- позиція першого символу слова (токенізація на рівні символів), подається у вигляді строки формату7
(в даному випадку означає, що перший символ слова знаходиться на 7 позиції в реченні); - елемент
rel_type
- синтаксична залежність слова згідно списку анотацій бібліотеки spaCy; - елемент
relate
- позиція слова (токенізація на рівні слів) до якого є синтаксична залежність, подається у вигляді строки формату9
(в даному випадку означає, що позиція слова в реченні до якого є синтаксична залежність - 1).
- елемент
Вхідними даними є текстові дані (зокрема 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
- Developing a Flask API in a Docker container with uWSGI and NGINX
- Running Flask in production with Docker
- Flask application in a production-ready container
- How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 18.04
- Building a slim uWSGI Docker image
- Running Windows app headless in docker
- Запуск приложения на Flask с помощью uwsgi + nginx в Debian 7
- Ускоряем Nginx за 5 минут
- Top 10 Docker CLI commands you can’t live without
- NGINX Tuning For Best Performance
- Docker in Alpine Linux
- Docker-compose: идеальное рабочее окружение
- Docker для начинающего разработчика
- Обзор GUI-интерфейсов для управления Docker-контейнерами
- Lazydocker — GUI для Docker прямо в терминале
- Deploying Python web app (Flask) in Windows Server (IIS) using FastCGI
- Windows Server 2019 — Server Core vs. Desktop Experience (GUI) Explained & Compared. Re: Datacenter, Standard, Essentials & Hyper-V Server
Розділ доповнюється.
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.
- Features
- Building and running under UNIX (Linux/MacOS) with Docker
- Building and running under Windows
- Essential Docker CLI commands
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:
- extracting text data from e-documents (
pdf
,docx
,txt
); - text preprocessing (or text normalization) - in our case this means correction of defects resulting from the procedure of extracting text data from e-documents;
- spell checking and automatic correction;
- split text into sentences/words;
- part-of-speech tagging;
- lemmatization of words;
- stemming of words;
- shallow parsing (extraction of
base noun phrases
,noun chunks
). Check links to learn more about this proccess: spaCy dependency-parse та Wikipedia Noun phrase; - generation an xml-structure of the text.
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:
--name
gives the container a name that can be found in docker ps output-p
instructs to publish port 80. Second80
after semicolons tells what port nginx inside the container listens on-d
runs container detached from terminal. Logs then can be viewed by issuingdocker logs
command-t
allocate a pseudo TTY, so you see the console output--restart on-failure
withdocker run
automatic restart of failed containers. Restart the container if it exits due to an error, which manifests as a non-zero exit code.--restart always
withdocker run
always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted.--restart unless-stopped
withdocker run
similar toalways
, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.
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.0 | 3.5, 3.6 |
10.0 | 3.3, 3.4 |
9.0 | 2.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
- Login
docker login
- Pull image from dockerhub
docker pull malakhovks/ken
- Run image in container
docker run --restart always --name ken -d -p 80:80 malakhovks/ken
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
- 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). - 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), usedocker pull
. - 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 specifiedPATH
orURL
. Use the-t
flag to label the image, for exampledocker build -t my_container .
with the.
at the end signalling to build using the currently directory. - 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
- 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
- docker volume ls — This lists the volumes, which are the preferred mechanism for persisting data generated by and used by Docker containers.
- docker rm — Removes one or more containers:
docker rm my_container
. Remove all containers:docker rm $(docker ps -a -q)
- docker rmi — Removes one or more images:
docker rmi my_image
. Remove all images:docker rmi $(docker images -q)
- docker stop — Stops one or more containers.
docker stop my_container
stops one container, whiledocker stop $(docker ps -a -q)
stops all running containers. A more direct way is to usedocker kill my_container
, which does not attempt to shut down the process gracefully first. - Use them together, for example to clean up all your docker images and containers:
- kill all running containers with
docker kill $(docker ps -q)
- delete all stopped containers with
docker rm $(docker ps -a -q)
- delete all images with
docker rmi $(docker images -q)
- Exploring Docker container's file system:
docker exec -t -i mycontainer /bin/bash
. - Copying files from Docker container to host:
docker cp <containerId>:/file/path/within/container /host/path/target
. - Copying files from host to Docker container:
docker cp foo.txt mycontainer:/foo.txt
. - List images:
docker image ls -a
.