Π‘Π±ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΡΡΠΊ ΠΈΠ· 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