Сборник полезных штук из Natural Language Processing, завернутый в API в виде Docker-контейнера.
В данный момент в состав входит:
- Определение языка текста – за основу взята библиотека fastText с её предобученной моделью для распознавания 176 языков.
- Разделение текста на предложения – за основу взяты токенайзеры от NLTK.
Примеры ниже для Ubuntu, установка под привелигерованным пользователем (root).
Установка docker:
apt-get remove docker docker-engine docker.io containerd runc
apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io git
Установка docker-compose:
curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Подробная документация:
Вначале склонируем репу:
git clone https://github.com/lord-alfred/dnlp.git
И непосредственно запустим контейнер:
cd dnlp
docker-compose up --build -d
После запуска на той же машине можно стрельнуть в контейнер запросами:
# проверка определения языка:
curl -v -XPOST -d 'text=some+useful+info' https://127.0.0.1:9090/detect-language
# провера токенизации:
curl -v -XPOST -d 'text=Test+sent%3F+Don%27t+or+ms.+Not%21+Yes%2C+of+course.+Maybe+mr.Jeck+and+band.&lang=en' https://127.0.0.1:9090/tokenize-sentences
Для проверки с другого сервера – нужно поменять IP адрес и убедиться что во встроенном фаерволле не закрыт порт 9090
.
Все эндпоинты обрабатывают только запросы с HTTP метода POST
.
API Endpoint для определение языка текста поддерживает следующие входные параметры:
text
– строка с текстом, у которой нужно определить язык;count
– количество результатов. По дефолту:3
.
В результате будет json в виде массива словарей:
[
{
"confidence": 0.5937589406967163,
"code": "en",
"name": "English",
"family": "Indo-European",
"endonym": "English",
"iso639-1": "en",
"iso639-2/T": "eng",
"iso639-2/B": "eng",
"iso639-3": "eng"
}
]
API Endpoint для разделения текста на предложения поддерживает следующие входные параметры:
text
– строка с текстом, которую нужно разбить на предложения;lang
– код язык текста. По дефолту:en
.
Поддерживаемые языки для токенизации:
{
'en': 'english',
'ru': 'russian',
'cs': 'czech',
'da': 'danish',
'nl': 'dutch',
'et': 'estonian',
'fi': 'finnish',
'fr': 'french',
'de': 'german',
'el': 'greek',
'it': 'italian',
'no': 'norwegian',
'pl': 'polish',
'pt': 'portuguese',
'sl': 'slovene',
'es': 'spanish',
'sv': 'swedish',
'tr': 'turkish',
}
В результате будет json в виде массива строк:
[
"Test sent?",
"Don't or ms. Not!",
"Yes, of course.",
"Maybe mr.Jeck and band."
]
Lord_Alfred
Блог: https://t.me/lord_Alfred