DevDays'19 Hackathon (2. dio): Parser glasovnih poruka za Telegram i provjeru gramatike u IntelliJ IDEA

Nastavljamo da pričamo o projektima proljetnog hackathona DevDays, u kojem su učestvovali studenti master programa "Razvoj softvera / softversko inženjerstvo".

Hackathon DevDays'19 (2. dio): analizator audio poruka za Telegram i provjeru gramatike u IntelliJ IDEA

Inače, pozivamo čitaoce da nam se pridruže VK grupa studenata master studija. U njemu ćemo objavljivati ​​najnovije vijesti o zapošljavanju i studiranju. U grupi možete pronaći i video sa Dana otvorenih vrata. Podsjećamo: događaj će se održati 29. aprila, detalji online.

Telegram Desktop analizator glasovnih poruka

Hackathon DevDays'19 (2. dio): analizator audio poruka za Telegram i provjeru gramatike u IntelliJ IDEA

Autor ideje
Khoroshev Artyom

Poredati

Khoroshev Artem – menadžer projekta/programer/QA
Eliseev Anton – poslovni analitičar/marketing specijalista
Maria Kuklina – UI dizajner/programer
Bakhvalov Pavel – UI dizajner/programer/QA

Sa naše tačke gledišta, Telegram je moderan i zgodan messenger, a njegova PC verzija je popularna i otvorenog koda, što omogućava njegovu modifikaciju. Klijent nudi prilično bogatu funkcionalnost. Pored standardnih tekstualnih poruka, sadrži glasovne pozive, video poruke i glasovne poruke. A ovo drugo je ono što ponekad donosi neugodnosti njihovom primaocu. Često nije moguće preslušati glasovnu poruku dok ste za računarom ili laptopom. Možda postoji ambijentalna buka, nedostatak slušalica ili ne želite da iko čuje sadržaj poruke. Takvi problemi gotovo nikada ne nastaju ako koristite Telegram na pametnom telefonu, jer ga možete jednostavno prinijeti uhu, za razliku od laptopa ili PC-a. Pokušali smo riješiti ovaj problem.

Cilj našeg projekta na DevDays-u bio je da Telegram desktop klijentu (u daljem tekstu Telegram Desktop) doda mogućnost prevođenja primljenih glasovnih poruka u tekst.

Svi analogi u ovom trenutku su botovi kojima možete poslati audio poruku i dobiti tekst kao odgovor. Nismo baš zadovoljni ovim: prosljeđivanje poruke botu nije baš zgodno; htjeli bismo imati izvornu funkcionalnost. Osim toga, svaki bot je 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čajno, jer je u potpunosti napisan na C++. A pošto smo odlučili da novu funkcionalnost dodamo direktno klijentu, morali smo je razviti u C++.

Hackathon DevDays'19 (2. dio): analizator audio poruka za Telegram i provjeru gramatike u IntelliJ IDEAU našem timu su bile 4 osobe. U početku su dvije osobe tražile odgovarajuću biblioteku za prepoznavanje govora, jedna osoba je proučavala izvorni kod Telegram-desktop-a, druga je implementirala projekat izgradnje Telegram Desktop. Kasnije su svi bili zauzeti popravljanjem korisničkog sučelja i otklanjanjem grešaka.

Činilo se da implementacija predviđene funkcionalnosti neće biti teška, ali, kao što se uvijek dešava, pojavile su se poteškoće.

Rješenje problema sastojalo se od dva nezavisna podzadatka: odabira odgovarajućeg alata za prepoznavanje govora i implementacije korisničkog sučelja za novu funkcionalnost.

Prilikom odabira biblioteke za prepoznavanje glasa, odmah smo morali napustiti sve offline API-je, jer jezički modeli zauzimaju mnogo prostora. Ali govorimo samo o jednom jeziku. Postalo je jasno da ćemo morati koristiti online API. Kasnije se ispostavilo da usluge prepoznavanja govora takvih divova kao što su Google, Yandex i Microsoft nisu uopće besplatne, te ćemo se morati zadovoljiti probnim periodom. Kao rezultat toga, odabran je Google Speech-To-Text jer vam omogućava da dobijete token za korištenje usluge, koji će trajati cijelu godinu.

Drugi problem na koji smo naišli vezan je za neke od nedostataka C++-a - zoološki vrt raznih biblioteka u odsustvu centralizovanog spremišta. Desilo se da Telegram Desktop zavisi od mnogih drugih biblioteka specifičnih za verziju. Zvanični repozitorij ima manuelno za sklapanje projekta. I također veliki broj otvorenih pitanja o problemima izgradnje, na primjer puta и два. Ispostavilo se da su svi problemi povezani sa činjenicom da je build skripta napisana za Ubuntu 14.04, a da bi se uspješno izgradio telegram pod Ubuntu 18.04, morale su se napraviti izmjene.

Za sklapanje samog Telegram Desktopa potrebno je dosta vremena: na laptopu sa Intel Core i5-7200U kompletno sastavljanje (zastava -j 4) sa svim zavisnostima traje oko tri sata. Od toga, oko 30 minuta je potrebno za povezivanje samog klijenta (kasnije se ispostavilo da u Debug konfiguraciji povezivanje traje oko 10 minuta), ali se faza povezivanja mora ponavljati svaki put nakon unošenja izmjena.

Unatoč problemima, uspjeli smo realizirati zamišljenu ideju, ali i ažurirati build script za Ubuntu 18.04. Demonstraciju rada možete pogledati na link. Uključujemo i nekoliko animacija. Dugme se pojavilo pored svih glasovnih poruka koje vam omogućava da prevedete poruku u tekst. Desnim klikom dodatno možete odrediti jezik koji će se koristiti za emitovanje. By link klijent dostupan za preuzimanje.

Repozitorijum.

Po našem mišljenju, pokazao se kao dobar Proof of Concept funkcionalnosti koji bi bio zgodan za mnoge korisnike. Nadamo se da ćemo ga vidjeti u budućim izdanjima Telegram Desktopa.

Poboljšana podrška za prirodni jezik u IntelliJ IDEA

Hackathon DevDays'19 (2. dio): analizator audio poruka za Telegram i provjeru gramatike u IntelliJ IDEA

Autor ideje

Tankov Vladislav

Poredati

Tankov Vladislav (vođa tima, rad sa LanguageToolom i IntelliJ IDEA)
Nikita Sokolov (rad sa LanguageTool-om i kreiranje korisničkog sučelja)
Khvorov Alexander (rad sa LanguageTool-om i optimizacija performansi)
Sadovnikov Alexander (podrška za raščlanjivanje markup jezika i koda)

Razvili smo dodatak za IntelliJ IDEA koji provjerava gramatičku, pravopisnu i stilsku tačnost različitih tekstova (komentari i dokumentacija, doslovni redovi u kodu, tekst formatiran u Markdown ili XML oznaci) (na engleskom se to zove korektura).

Ideja projekta je bila proširiti standardnu ​​provjeru pravopisa IntelliJ IDEA na skalu Grammarlyja, kako bi se napravila neka vrsta Grammarly unutar IDE-a.

Možete vidjeti šta se dogodilo link.

Pa, u nastavku ćemo detaljnije govoriti o mogućnostima dodatka, kao i o poteškoćama koje su se pojavile prilikom njegovog kreiranja.

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. Istovremeno, IDE rade odličan posao u pronalaženju grešaka u kodu, ali su slabo prikladne za tekstove na prirodnim jezicima. Ovo čini vrlo lakim greške u gramatici, interpunkciji ili stilu, a da razvojno okruženje ne ukazuje na njih. Najvažnije je napraviti grešku u pisanju korisničkog interfejsa, jer će to uticati 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 zasnovani na IntelliJ platformi. IntelliJ Platforma već ima ugrađenu proveru pravopisa, ali ne otklanja čak ni najjednostavnije gramatičke greške. Odlučili smo da integrišemo jedan od popularnih sistema za analizu prirodnog jezika u IntelliJ IDEA.

Реализация

Hackathon DevDays'19 (2. dio): analizator audio poruka za Telegram i provjeru gramatike u IntelliJ IDEANismo si postavili zadatak da kreiramo sopstveni sistem verifikacije teksta, pa smo koristili postojeće rešenje. Ispostavilo se da je najprikladnija opcija Jezički alat. Licenca nam je omogućila da je slobodno koristimo u naše svrhe: besplatna je, napisana na Javi i otvorenog koda. Osim toga, podržava 25 jezika i razvija se više od petnaest godina. Unatoč svojoj otvorenosti, LanguageTool je ozbiljan konkurent plaćenim rješenjima za provjeru teksta, a činjenica da može raditi lokalno je doslovno njegova ubilačka karakteristika.

Kod dodatka je unutra spremišta na GitHub-u. Cijeli projekat je napisan u Kotlinu sa malim dodatkom Jave za korisničko sučelje. Tokom hackathona uspjeli smo implementirati podršku za Markdown, JavaDoc, HTML i Plain Text. Nakon hackathona, veliko ažuriranje je dodalo podršku za XML, string literale u Javi, Kotlinu i Pythonu i provjeru pravopisa.

Teškoće

Vrlo brzo smo shvatili da ako svaki put ubacimo sav tekst u LanguageTool za pregled, onda će se IDEA interfejs zamrznuti na svakom manje ili više ozbiljnom tekstu, jer sama inspekcija blokira protok korisničkog interfejsa. Problem je riješen provjerom `ProgressManager.checkCancelled` - ova funkcija izbacuje izuzetak ako IDEA vjeruje da je vrijeme za prekid inspekcije.

Ovo je potpuno eliminisalo zamrzavanje, ali ga je nemoguće koristiti: obrada teksta traje jako dugo. Štoviše, u našem slučaju se najčešće mijenja vrlo mali dio teksta i želimo nekako keširati rezultate. Upravo to smo i uradili. Kako ne bismo svaki put provjeravali sve, deterministički smo podijelili tekst na dijelove i provjerili samo one koji su se promijenili. Budući da tekstovi mogu biti veliki i nismo htjeli učitavati keš memoriju, pohranili smo ne same tekstove, već njihove hešove. Ovo je omogućilo da dodatak radi nesmetano čak i na velikim datotekama.

LanguageTool podržava više od 25 jezika, ali je malo vjerovatno da će nekom korisniku biti potrebni svi. Želio sam dati mogućnost preuzimanja biblioteka za određeni jezik na zahtjev (ako to označite u korisničkom sučelju). Čak smo i implementirali ovo, ali se pokazalo da je previše komplikovano i nepouzdano. Konkretno, morali smo učitati LanguageTool s novim skupom jezika koristeći poseban učitavač klasa, a zatim ga pažljivo inicijalizirati. Istovremeno, sve biblioteke su bile u korisničkom .m2 repozitorijumu i pri svakom startovanju smo morali da proveravamo njihov integritet. Na kraju smo odlučili da ako korisnici imaju problema s veličinom dodatka, onda ćemo dati poseban dodatak za nekoliko najpopularnijih jezika.

Nakon hakatona

Hakaton je završen, ali je rad na dodatku nastavljen sa užim timom. Htio sam podržati nizove, komentare, pa čak i jezičke konstrukcije kao što su imena varijabli i klasa. Trenutno je ovo podržano samo za Javu, Kotlin i Python, ali se nadamo da će ova lista rasti. Ispravili smo mnogo malih grešaka i postali kompatibilniji sa ugrađenom provjerom pravopisa Idea. Osim toga, pojavila se podrška za XML i provjeru pravopisa. Sve to možete pronaći 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, sa XML-om u IDE-u). Svakodnevno moraju da rade sa prirodnim jezikom, a da nemaju pomoćnika u vidu saveta urednika o mogućim greškama. Naš dodatak pruža takve nagoveštaje i čini to sa visokim stepenom tač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 koja definiraju stilski vodič za tekst, na primjer, „ne pišite npr., već pišite punu formu“), proširenje rječnika i poboljšanje korisničkog sučelja (posebno, želimo dati korisniku mogućnost ne samo da zanemari riječ, već da je doda u rječnik, naznačujući dio govora).

Izvor: www.habr.com

Dodajte komentar