Continuăm să vorbim despre proiectele hackatonului de primăvară DevDays, la care au participat studenți ai programului de master
Apropo, am dori să invităm cititorii să se alăture
Analizator de mesaje vocale Telegram Desktop
Autorul ideii
Khoroshev Artyom
Alinia
Khoroshev Artem – manager de proiect/dezvoltator/QA
Eliseev Anton – analist de afaceri/specialist în marketing
Maria Kuklina – designer/dezvoltator UI
Bakhvalov Pavel – designer/dezvoltator de IU/QA
Din punctul nostru de vedere, Telegram este un messenger modern și convenabil, iar versiunea sa pentru PC este populară și open source, ceea ce face posibilă modificarea acestuia. Clientul oferă o funcționalitate destul de bogată. Pe lângă mesajele text standard, acesta conține apeluri vocale, mesaje video și mesaje vocale. Și tocmai acestea din urmă aduc uneori neplăceri destinatarului lor. Adesea, nu este posibil să ascultați un mesaj vocal în timp ce vă aflați la computer sau laptop. Poate exista zgomot ambiental, lipsa căștilor sau nu doriți ca nimeni să audă conținutul mesajului. Asemenea probleme nu apar aproape niciodată dacă folosești Telegram pe un smartphone, deoarece pur și simplu îl poți aduce la ureche, spre deosebire de laptop sau PC. Am încercat să rezolvăm această problemă.
Scopul proiectului nostru la DevDays a fost de a adăuga capacitatea de a traduce mesajele vocale primite în text la clientul desktop Telegram (denumit în continuare Telegram Desktop).
Toți analogii în acest moment sunt boți cărora le puteți trimite un mesaj audio și puteți primi un text ca răspuns. Nu suntem foarte mulțumiți de asta: redirecționarea unui mesaj către un bot nu este foarte convenabilă; am dori să avem funcționalitate nativă. În plus, orice bot este o terță parte care acționează ca intermediar între API-ul de recunoaștere a vorbirii și utilizator, iar acest lucru este, cel puțin, nesigur.
După cum sa menționat mai devreme, telegram-desktop are două avantaje semnificative: ușurința și viteza de operare. Și nu este o coincidență, pentru că este scris în întregime în C++. Și din moment ce am decis să adăugăm noi funcționalități direct clientului, a trebuit să o dezvoltăm în C++.
Erau 4 oameni în echipa noastră. Inițial, două persoane căutau o bibliotecă adecvată pentru recunoașterea vorbirii, o persoană studia codul sursă al desktop-ului Telegram, alta implementa proiectul de construcție
Se părea că implementarea funcționalității dorite nu va fi dificilă, dar, așa cum se întâmplă întotdeauna, au apărut dificultăți.
Soluția problemei a constat în două subsarcini independente: alegerea unui instrument adecvat de recunoaștere a vorbirii și implementarea unei interfețe de utilizare pentru o nouă funcționalitate.
Atunci când am ales o bibliotecă pentru recunoașterea vocii, a trebuit imediat să renunțăm la toate API-urile offline, deoarece modelele de limbă ocupă mult spațiu. Dar vorbim de o singură limbă. A devenit clar că va trebui să folosim API-ul online. Mai târziu s-a dovedit că serviciile de recunoaștere a vorbirii unor giganți precum Google, Yandex și Microsoft nu sunt deloc gratuite și va trebui să ne mulțumim cu o perioadă de probă. Drept urmare, Google Speech-To-Text a fost ales pentru că vă permite să obțineți un simbol pentru utilizarea serviciului, care va dura un an întreg.
A doua problemă pe care am întâlnit-o este legată de unele dintre deficiențele C++ - o grădină zoologică cu diferite biblioteci în absența unui depozit centralizat. Se întâmplă că Telegram Desktop depinde de multe alte biblioteci specifice versiunii. Depozitul oficial are
Telegram Desktop în sine durează destul de mult timp pentru a asambla: pe un laptop cu un Intel Core i5-7200U, asamblarea completă (flag -j 4) cu toate dependențele durează aproximativ trei ore. Dintre acestea, aproximativ 30 de minute sunt luate prin conectarea clientului în sine (mai târziu s-a dovedit că în configurația Debug, conectarea durează aproximativ 10 minute), dar etapa de conectare trebuie repetată de fiecare dată după efectuarea modificărilor.
În ciuda problemelor, am reușit să implementăm ideea concepută, precum și să actualizăm
În opinia noastră, s-a dovedit a fi o bună dovadă a conceptului de funcționalitate, care ar fi convenabilă pentru mulți utilizatori. Sperăm să-l vedem în versiunile viitoare ale Telegram Desktop.
Suport îmbunătățit pentru limbajul natural în IntelliJ IDEA
Autorul ideii
Tankov Vladislav
Alinia
Tankov Vladislav (conducător de echipă, lucrând cu LanguageTool și IntelliJ IDEA)
Nikita Sokolov (lucru cu LanguageTool și crearea interfeței de utilizare)
Khvorov Alexander (lucru cu LanguageTool și optimizarea performanței)
Sadovnikov Alexander (suport pentru analizarea limbajelor de marcare și a codului)
Am dezvoltat un plugin pentru IntelliJ IDEA care verifică diverse texte (comentarii și documentație, linii literale în cod, text formatat în Markdown sau marcaj XML) pentru acuratețea gramaticală, ortografică și stilistică (în engleză aceasta se numește corectare).
Ideea proiectului a fost să extindă verificarea ortografică standard IntelliJ IDEA la scara Grammarly, pentru a face un fel de Grammarly în interiorul IDE.
Puteți vedea ce sa întâmplat
Ei bine, mai jos vom vorbi mai detaliat despre capacitățile pluginului, precum și despre dificultățile care au apărut în timpul creării acestuia.
Motivație
Există multe produse concepute pentru scrierea textului în limbaje naturale, dar documentația și comentariile de cod sunt scrise cel mai adesea în medii de dezvoltare. În același timp, IDE-urile fac o treabă excelentă în găsirea erorilor în cod, dar sunt slab potrivite pentru textele în limbaje naturale. Acest lucru face foarte ușor să faceți greșeli în gramatică, punctuație sau stil, fără ca mediul de dezvoltare să le sublinieze. Cel mai important este să faceți o greșeală în scrierea interfeței cu utilizatorul, deoarece acest lucru va afecta nu numai înțelegerea codului, ci și utilizatorii aplicației dezvoltate înșiși.
Unul dintre cele mai populare și dezvoltate medii de dezvoltare este IntelliJ IDEA, precum și IDE-urile bazate pe Platforma IntelliJ. Platforma IntelliJ are deja un verificator ortografic încorporat, dar nu scapă nici măcar de cele mai simple erori gramaticale. Am decis să integrăm unul dintre sistemele populare de analiză a limbajului natural în IntelliJ IDEA.
punerea în aplicare
Nu ne-am propus să ne creăm propriul sistem de verificare a textului, așa că am folosit o soluție existentă. Cea mai potrivită opțiune s-a dovedit a fi
Codul pluginului este în
dificultăți
Destul de repede ne-am dat seama că dacă trimitem tot textul la LanguageTool pentru inspecție de fiecare dată, atunci interfața IDEA se va bloca pe orice text mai mult sau mai puțin serios, deoarece inspecția în sine blochează fluxul UI. Problema a fost rezolvată prin verificarea `ProgressManager.checkCancelled` - această funcție aruncă o excepție dacă IDEA consideră că este timpul să anuleze inspecția.
Acest lucru a eliminat complet înghețarile, dar este imposibil de utilizat: procesarea textului durează foarte mult. Mai mult, în cazul nostru, cel mai adesea o parte foarte mică a textului se modifică și vrem să memorăm rezultatele cumva. Exact asta am făcut. Pentru a nu verifica totul de fiecare dată, am împărțit determinist textul în bucăți și le-am verificat doar pe cele care s-au schimbat. Deoarece textele pot fi mari și nu am vrut să încărcăm memoria cache, am stocat nu textele în sine, ci hashurile lor. Acest lucru a permis pluginului să funcționeze fără probleme chiar și pe fișiere mari.
LanguageTool acceptă mai mult de 25 de limbi, dar este puțin probabil ca un utilizator să aibă nevoie de toate. Am vrut să ofer posibilitatea de a descărca biblioteci pentru o anumită limbă la cerere (dacă o bifați în UI). Chiar am implementat acest lucru, dar s-a dovedit a fi prea complicat și nesigur. În special, a trebuit să încărcăm LanguageTool cu un nou set de limbi utilizând un classloader separat și apoi să-l inițializam cu atenție. În același timp, toate bibliotecile erau într-un depozit .m2 de utilizator și la fiecare pornire trebuia să le verificăm integritatea. În cele din urmă, am decis că, dacă utilizatorii au probleme cu dimensiunea pluginului, atunci vom oferi un plugin separat pentru câteva dintre cele mai populare limbi.
După hackaton
Hackathonul s-a încheiat, dar munca la plugin a continuat cu o echipă mai restrânsă. Am vrut să accept șiruri de caractere, comentarii și chiar constructe de limbaj, cum ar fi numele de variabile și de clase. În prezent, acest lucru este acceptat doar pentru Java, Kotlin și Python, dar sperăm că această listă va crește. Am remediat o mulțime de erori mici și am devenit mai compatibile cu corectorul ortografic încorporat al lui Idea. În plus, au apărut suportul XML și verificarea ortografică. Toate acestea pot fi găsite în a doua versiune, pe care am publicat-o recent.
Ce urmeaza?
Un astfel de plugin poate fi util nu numai pentru dezvoltatori, ci și pentru scriitorii tehnici (care lucrează adesea, de exemplu, cu XML într-un IDE). În fiecare zi trebuie să lucreze cu limbaj natural, fără a avea un asistent sub formă de sfaturi editor despre posibile erori. Pluginul nostru oferă astfel de indicii și o face cu un grad ridicat de acuratețe.
Intenționăm să dezvoltăm pluginul, atât prin adăugarea de noi limbi, cât și prin explorarea unei abordări generale a organizării verificării textului. Planurile noastre imediate includ implementarea profilurilor stilistice (seturi de reguli care definesc un ghid de stil pentru text, de exemplu, „nu scrieți, de exemplu, ci scrieți forma completă”), extinderea dicționarului și îmbunătățirea interfeței cu utilizatorul (în special, vrem să oferim utilizatorului posibilitatea nu doar de a ignora un cuvânt, ci de a-l adăuga în dicționar, indicând partea de vorbire).
Sursa: www.habr.com