Сборник полезных штук из Natural Language Processing, завернутый в API в виде Docker-контейнера.
В данный момент в состав входит:
- Определение языка текста – с помощью пакета fastText с её предобученной моделью для распознавания 176 языков.
- Разделение текста на предложения – за основу взяты токенайзеры от NLTK.
- Получение основного содержимого из html документа – используя пакет Trafilatura.
- Удаление нечётких дублей приложений – с помощью расстояния Левенштейна и пакета Levenshtein.
Для использования необходимо установить Docker Engine последней версии.
Клонируем репу:
git clone https://github.com/lord-alfred/dnlp.git
Или качаем её по ссылке в zip-архиве (не забудьте распаковать архив).
И запускаем контейнер:
cd dnlp
docker compose up --build -d
Для остановки контейнера необходимо перейти в папку, куда склонирован dnlp
и выполнить:
docker compose stop
После запуска на той же машине можно стрельнуть в контейнер запросами (для проверки необходим установленный curl):
# проверка определения языка:
curl -v -XPOST -d 'text=some+useful+info' http://127.0.0.1:9090/detect
# проверка токенизации:
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' http://127.0.0.1:9090/tokenize
# получение текста из html документа:
curl -v XPOST -d 'html=%3Chtml%3E%3Cbody%3E%3Ch1%3Etest%3C%2Fh1%3E%3Cp%3Ethis%20is%20test%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E' http://127.0.0.1:9090/extract
# удаление дублей предложений:
curl -v XPOST -d '{"sentences": ["1 sentence", "2 sentence", "Another sentence"], "threshold": 0.8}' http://127.0.0.1:9090/deduplicate
Для проверки с другого сервера – нужно поменять IP адрес и убедиться что во встроенном фаерволле не закрыт порт 9090
.
Все эндпоинты обрабатывают только запросы с HTTP-методом POST
.
API Endpoint: /detect
Поддерживает следующие входные параметры:
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: /tokenize
Поддерживает следующие входные параметры:
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",
"ml": "malayalam",
"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."
]
API Endpoint: /extract
Поддерживает только один входной параметр:
html
– содержимое HTML-страницы, закодированное с помощьюurlencode
функции (страницу нужно скачать самостоятельно).
Очень важно закодировать в URL-encoding
формат передаваемую страницу, т.к. в случае отсутствия кодирования – парсер обработает только часть из страницы (до первого символа &
)!
В результате будет отдан основной контент страницы без html-тегов.
API Endpoint: /deduplicate
❗️ На вход принимается только JSON
.
Внутри json
должны быть следующие ключи со значениями:
sentences
– массив строк (предложений) для удаления из них дублей;threshold
– пороговое значение в интервале[0.0, 1.0]
, при срабатывании которого предложение считается нечётким дублем (параметр не обязателен, по-умолчанию:0.8
).
В результате будет json в виде массива строк:
[
"2 sentence",
"Another sentence"
]
Lord_Alfred
Блог: https://t.me/Lord_Alfred