Nastavljamo pričati o projektima proljetnog hackathona DevDays u kojem su sudjelovali studenti magistarskog studija
Usput, želimo pozvati čitatelje da se pridruže
Raščlanjivač glasovnih poruka za radnu površinu Telegrama
Autor ideje
Khoroshev Artyom
Sastav tima
Khoroshev Artem – voditelj projekta/developer/QA
Eliseev Anton – poslovni analitičar/marketinški stručnjak
Maria Kuklina – UI dizajner/programer
Bakhvalov Pavel – UI dizajner/developer/QA
S naše točke gledišta, Telegram je moderan i praktičan messenger, a njegova PC verzija je popularna i otvorenog koda, što omogućuje njegovu modifikaciju. Klijent nudi prilično bogatu funkcionalnost. Osim standardnih tekstualnih poruka, sadrži glasovne pozive, video poruke i glasovne poruke. A upravo potonji ponekad donose neugodnosti svom primatelju. Često nije moguće preslušati glasovnu poruku dok ste za računalom ili prijenosnim računalom. Možda postoji buka u okruženju, nedostatak slušalica ili ne želite da itko čuje sadržaj poruke. Takvi se problemi gotovo nikada ne pojavljuju ako Telegram koristite na pametnom telefonu, jer ga možete jednostavno prinijeti uhu, za razliku od laptopa ili računala. Pokušali smo riješiti ovaj problem.
Cilj našeg projekta na DevDays-u bio je dodati mogućnost prevođenja primljenih glasovnih poruka u tekst Telegram desktop klijentu (u daljnjem tekstu Telegram Desktop).
Svi analozi u ovom trenutku su botovi kojima možete poslati audio poruku i primiti tekst kao odgovor. Nismo baš zadovoljni s ovim: prosljeđivanje poruke botu nije baš zgodno; željeli bismo imati izvornu funkcionalnost. Osim toga, svaki je bot treća strana koja djeluje kao posrednik između API-ja za prepoznavanje govora i korisnika, a to je u najmanju ruku nesigurno.
Kao što je ranije navedeno, telegram-desktop ima dvije značajne prednosti: jednostavnost i brzinu rada. I to nije slučajnost, jer je u potpunosti napisan u C++. A budući da smo odlučili dodati novu funkcionalnost izravno klijentu, morali smo je razviti u C++.
U našem timu bilo je 4 osobe. U početku su dvije osobe tražile odgovarajuću biblioteku za prepoznavanje govora, jedna je osoba proučavala izvorni kod Telegram-desktopa, druga je postavljala projekt izgradnje
Činilo se da implementacija predviđene funkcionalnosti neće biti teška, ali, kao što uvijek biva, pojavile su se poteškoće.
Rješenje problema sastojalo se od dva neovisna podzadatka: odabir prikladnog alata za prepoznavanje govora i implementacija korisničkog sučelja za novu funkcionalnost.
Prilikom odabira biblioteke za prepoznavanje glasa, odmah smo morali napustiti sve izvanmrežne API-je, jer jezični modeli zauzimaju puno prostora. Ali govorimo samo o jednom jeziku. Postalo je jasno da ćemo morati koristiti online API. Kasnije se pokazalo da usluge prepoznavanja govora divova poput Googlea, Yandexa i Microsofta nisu uopće besplatne i morat ćemo se zadovoljiti probnim razdobljem. Kao rezultat toga odabran je Google Speech-To-Text jer vam omogućuje dobivanje tokena za korištenje usluge koji će trajati cijelu godinu.
Drugi problem s kojim smo se susreli povezan je s nekim od nedostataka C++ - zoološki vrt raznih biblioteka u nedostatku centraliziranog repozitorija. Dogodilo se da Telegram Desktop ovisi o mnogim drugim bibliotekama specifičnim za verziju. Službeno spremište ima
Sastavljanje Telegram Desktop-a traje dosta dugo: na prijenosnom računalu s Intel Core i5-7200U kompletno sklapanje (oznaka -j 4) sa svim ovisnostima traje oko tri sata. Od toga je oko 30 minuta potrebno za povezivanje samog klijenta (kasnije se pokazalo da u Debug konfiguraciji povezivanje traje oko 10 minuta), ali se faza povezivanja mora ponavljati svaki put nakon izmjena.
Usprkos problemima uspjeli smo realizirati začetu ideju, ali i ažurirati
Po našem mišljenju, pokazao se kao dobar Proof of Concept funkcionalnosti koji bi bio prikladan mnogim korisnicima. Nadamo se da ćemo ga vidjeti u budućim izdanjima Telegram Desktop-a.
Poboljšana podrška za prirodni jezik u IntelliJ IDEA
Autor ideje
Tankov Vladislav
Sastav tima
Tankov Vladislav (voditelj tima, rad s LanguageTool i IntelliJ IDEA)
Nikita Sokolov (rad s LanguageTool-om i izrada korisničkog sučelja)
Khvorov Alexander (rad s LanguageToolom i optimizacija performansi)
Sadovnikov Alexander (podrška za raščlanjivanje označnih jezika i koda)
Razvili smo dodatak za IntelliJ IDEA koji provjerava gramatičku, pravopisnu i stilsku točnost različitih tekstova (komentari i dokumentacija, doslovni redovi u kodu, tekst formatiran u Markdown ili XML markup) (na engleskom se to zove lektoriranje).
Ideja projekta bila je proširiti standardnu provjeru pravopisa IntelliJ IDEA na razmjere Grammarlyja, kako bi se napravila vrsta Grammarlyja unutar IDE-a.
Možete vidjeti što se dogodilo
Pa, u nastavku ćemo detaljnije govoriti o mogućnostima dodatka, kao io poteškoćama koje su nastale tijekom njegovog stvaranja.
Motivacija
Postoji mnogo proizvoda dizajniranih za pisanje teksta na prirodnim jezicima, ali dokumentacija i komentari koda najčešće se pišu u razvojnim okruženjima. U isto vrijeme, IDE-ovi rade izvrstan posao pronalaženja pogrešaka u kodu, ali su slabo prikladni za tekstove na prirodnim jezicima. Zbog toga je vrlo lako napraviti pogreške u gramatici, interpunkciji ili stilu, a da razvojno okruženje ne ukazuje na njih. Najkritičnije je pogriješiti u pisanju korisničkog sučelja jer to utječe ne samo na razumljivost koda, već i na same korisnike razvijene aplikacije.
Jedno od najpopularnijih i najrazvijenijih razvojnih okruženja je IntelliJ IDEA, kao i IDE baziran na IntelliJ Platformi. Platforma IntelliJ već ima ugrađenu provjeru pravopisa, ali ne uklanja čak ni najjednostavnije gramatičke pogreške. Odlučili smo integrirati jedan od popularnih sustava za analizu prirodnog jezika u IntelliJ IDEA.
Provedba
Nismo si postavili zadatak kreirati vlastiti sustav provjere teksta, pa smo koristili postojeće rješenje. Ispostavilo se da je najprikladnija opcija
Kod dodatka je unutra
teškoće
Ubrzo smo shvatili da ako svaki put unesemo sav tekst u LanguageTool na pregled, IDEA sučelje će se zamrznuti na bilo kojem više ili manje ozbiljnom tekstu, budući da sam pregled blokira protok korisničkog sučelja. Problem je riješen provjerom `ProgressManager.checkCancelled` - ova funkcija izbacuje iznimku ako IDEA smatra da je vrijeme za prekid inspekcije.
Ovo je u potpunosti eliminiralo zamrzavanje, ali ga je nemoguće koristiti: obrada teksta traje jako dugo. Štoviše, u našem slučaju najčešće se mijenja vrlo mali dio teksta i želimo rezultate nekako keširati. Upravo smo to i učinili. Kako ne bismo svaki put sve provjeravali, tekst smo deterministički razdvojili na dijelove i provjeravali samo one koji su se mijenjali. Budući da tekstovi mogu biti veliki i nismo htjeli učitati predmemoriju, nismo pohranili same tekstove, već njihove hashove. To je omogućilo nesmetan rad dodatka čak i na velikim datotekama.
LanguageTool podržava više od 25 jezika, ali malo je vjerojatno da će ijednom korisniku trebati sve. Htio sam dati mogućnost preuzimanja biblioteka za određeni jezik na zahtjev (ako to označite u korisničkom sučelju). To smo čak i implementirali, ali se pokazalo previše kompliciranim i nepouzdanim. Konkretno, morali smo učitati LanguageTool s novim skupom jezika pomoću zasebnog učitavača klasa, a zatim ga pažljivo inicijalizirati. Istodobno, sve su biblioteke bile u korisničkom .m2 repozitoriju i pri svakom smo pokretanju morali provjeravati njihovu cjelovitost. Na kraju smo odlučili da ćemo, ako korisnici budu imali problema s veličinom dodatka, osigurati zaseban dodatak za nekoliko najpopularnijih jezika.
Nakon hackathona
Hackathon je završio, ali je rad na pluginu nastavljen sa užim timom. Želio sam podržati nizove, komentare, pa čak i jezične konstrukcije kao što su varijable i imena klasa. Trenutno je ovo podržano samo za Java, Kotlin i Python, ali nadamo se da će ovaj popis rasti. Ispravili smo puno malih grešaka i postali kompatibilniji s ugrađenom provjerom pravopisa tvrtke Idea. Osim toga, pojavila se podrška za XML i provjera pravopisa. Sve to nalazi se u drugoj verziji koju smo nedavno objavili.
Što je sljedeće?
Takav dodatak može biti koristan ne samo za programere, već i za tehničke pisce (često rade, na primjer, s XML-om u IDE-u). Svaki dan moraju raditi s prirodnim jezikom, bez pomoćnika u obliku urednika savjeta o mogućim pogreškama. Naš dodatak pruža takve savjete i to s visokim stupnjem točnosti.
Planiramo razviti dodatak, kako dodavanjem novih jezika tako i istraživanjem općeg pristupa organiziranju provjere teksta. Naši neposredni planovi uključuju implementaciju stilskih profila (skupova pravila koji definiraju stilski vodič za tekst, na primjer, "ne pišite npr., već napišite puni oblik"), proširenje rječnika i poboljšanje korisničkog sučelja (osobito, želimo korisniku dati priliku ne samo da zanemari riječ, već da je doda u rječnik, naznačujući dio govora).
Izvor: www.habr.com