Coder Social home page Coder Social logo

lord-alfred / dnlp Goto Github PK

View Code? Open in Web Editor NEW
18.0 4.0 5.0 44 KB

📚 Сборник полезных штук из Natural Language Processing: Определение языка текста, Разделение текста на предложения, Получение основного содержимого из html документа

License: MIT License

Dockerfile 2.42% Python 97.58%
fasttext nltk language-detection language-recognition sentence-tokenizer article-extracting article-extractor readability text-processing nlp

dnlp's Introduction

dNLP

Сборник полезных штук из Natural Language Processing, завернутый в API в виде Docker-контейнера.

📖 Содержимое dNLP

В данный момент в состав входит:

  1. Определение языка текста – с помощью пакета fastText с её предобученной моделью для распознавания 176 языков.
  2. Разделение текста на предложения – за основу взяты токенайзеры от NLTK.
  3. Получение основного содержимого из html документа – используя пакет Trafilatura.
  4. Удаление нечётких дублей приложений – с помощью расстояния Левенштейна и пакета Levenshtein.

📦 Установка Docker

Для использования необходимо установить Docker Engine последней версии.

🚀 Запуск dNLP

Клонируем репу:

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.

📚 Описание API ручек

Все эндпоинты обрабатывают только запросы с 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."
]

Получение основного содержимого из html документа

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

dnlp's People

Contributors

lord-alfred avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.