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

Nastavljamo pričati o projektima proljetnog hackathona DevDays u kojem su sudjelovali studenti magistarskog studija "Razvoj softvera / softversko inženjerstvo".

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

Usput, želimo pozvati čitatelje da se pridruže VK grupa studenata master studija. U njemu ćemo objavljivati ​​najnovije vijesti o zapošljavanju i studiranju. Video s dana otvorenih vrata također možete pronaći u grupi. Podsjećamo: događaj će se održati 29. travnja, detalji Online.

Raščlanjivač glasovnih poruka za radnu površinu Telegrama

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

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++.

Hackathon DevDays'19 (2. dio): analizator audio poruka za Telegram i provjeru gramatike u IntelliJ IDEAU 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 Radna površina Telegrama. Kasnije su svi bili zauzeti popravljanjem korisničkog sučelja i otklanjanjem pogrešaka.

Č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 nastava za sastavljanje projekta. I također veliki broj otvorenih pitanja o problemima izgradnje, na primjer vrijeme и два. Ispostavilo se da su svi problemi povezani s činjenicom da je skripta za izgradnju napisana za Ubuntu 14.04, a kako bi se uspješno izgradio telegram pod Ubuntu 18.04, morale su se unijeti izmjene.

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 izgraditi skriptu za Ubuntu 18.04. Demonstracija rada može se vidjeti na link. Također uključujemo nekoliko animacija. Pored svih glasovnih poruka pojavio se gumb koji vam omogućuje prevođenje poruke u tekst. Desnim klikom možete dodatno odrediti jezik koji će se koristiti za emitiranje. Po link klijent dostupan za preuzimanje.

Spremište.

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

Hackathon DevDays'19 (2. dio): analizator audio poruka za Telegram i provjeru gramatike 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

Hackathon DevDays'19 (2. dio): analizator audio poruka za Telegram i provjeru gramatike u IntelliJ IDEANismo si postavili zadatak kreirati vlastiti sustav provjere teksta, pa smo koristili postojeće rješenje. Ispostavilo se da je najprikladnija opcija Jezični alat. Licenca nam je omogućila da ga slobodno koristimo za naše potrebe: besplatan je, napisan u 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 njegova je ubojita značajka.

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

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

Dodajte komentar