Skip to content

πŸ“š Π‘Π±ΠΎΡ€Π½ΠΈΠΊ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΡˆΡ‚ΡƒΠΊ ΠΈΠ· Natural Language Processing: ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ языка тСкста, Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ тСкста Π½Π° прСдлоТСния, ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ основного содСрТимого ΠΈΠ· html Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

License

Notifications You must be signed in to change notification settings

lord-alfred/dnlp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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

About

πŸ“š Π‘Π±ΠΎΡ€Π½ΠΈΠΊ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΡˆΡ‚ΡƒΠΊ ΠΈΠ· Natural Language Processing: ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ языка тСкста, Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ тСкста Π½Π° прСдлоТСния, ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ основного содСрТимого ΠΈΠ· html Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

Topics

Resources

License

Stars

Watchers

Forks