Hackathon DevDays'19 (2. daļa): audio ziņojumu parsētājs telegrammas un gramatikas pārbaudei programmā IntelliJ IDEA

Turpinām runāt par pavasara hakatona DevDays projektiem, kuros piedalījās maģistrantūras studenti "Programmatūras izstrāde / programmatūras inženierija".

Hackathon DevDays'19 (2. daļa): audio ziņojumu parsētājs telegrammas un gramatikas pārbaudei programmā IntelliJ IDEA

Starp citu, mēs vēlamies aicināt lasÄ«tājus pievienoties VK maÄ£istrantu grupa. Tajā publicēsim jaunākās ziņas par atlasi un studijām. Grupā atrodams arÄ« video no atvērto durvju dienas. Atgādinām: pasākums notiks 29. aprÄ«lÄ«, sÄ«kāk tieÅ”saistē.

Telegram darbvirsmas balss ziņojumu parsētājs

Hackathon DevDays'19 (2. daļa): audio ziņojumu parsētājs telegrammas un gramatikas pārbaudei programmā IntelliJ IDEA

Idejas autors
HoroŔevs Artjoms

Sarindoties

Khoroshev Artem ā€“ projektu vadÄ«tājs/izstrādātājs/QA
Elisejevs Antons ā€“ biznesa analÄ«tiÄ·is/mārketinga speciālists
Marija Kuklina ā€“ UI dizainere/izstrādātājs
Bakhvalovs Pāvels - UI dizainers/izstrādātājs/QA

No mÅ«su viedokļa Telegram ir moderns un ērts kurjers, un tā datora versija ir populāra un atvērtā koda versija, kas ļauj to modificēt. Klients piedāvā diezgan bagātÄ«gu funkcionalitāti. Papildus standarta Ä«sziņām tajā ir iekļauti balss zvani, video ziņas un balss ziņas. Un tieÅ”i pēdējie dažreiz sagādā neērtÄ«bas to saņēmējam. Bieži vien nav iespējams noklausÄ«ties balss ziņojumu, atrodoties pie datora vai klēpjdatora. Var bÅ«t apkārtējais troksnis, austiņu trÅ«kums vai arÄ« jÅ«s nevēlaties, lai kāds dzirdētu ziņojuma saturu. Šādas problēmas gandrÄ«z nekad nerodas, ja izmantojat Telegram viedtālrunÄ«, jo atŔķirÄ«bā no klēpjdatora vai personālā datora varat to vienkārÅ”i pienest pie auss. Mēs mēģinājām atrisināt Å”o problēmu.

Mūsu DevDays projekta mērķis bija pievienot Telegram darbvirsmas klientam (turpmāk tekstā Telegram Desktop) iespēju tulkot saņemtos balss ziņojumus tekstā.

Visi analogi Å”obrÄ«d ir robotprogrammatÅ«ras, kurām varat nosÅ«tÄ«t audio ziņojumu un saņemt atbildes tekstu. Mēs ar to neesam ļoti apmierināti: ziņojuma pārsÅ«tÄ«Å”ana robotam nav Ä«paÅ”i ērta; mēs vēlētos, lai bÅ«tu vietējā funkcionalitāte. Turklāt jebkura robotprogrammatÅ«ra ir treŔā puse, kas darbojas kā starpnieks starp runas atpazÄ«Å”anas API un lietotāju, un tas ir vismaz nedroÅ”i.

Kā minēts iepriekÅ”, telegrammas darbvirsmai ir divas bÅ«tiskas priekÅ”rocÄ«bas: darbÄ«bas vienkārŔība un ātrums. Un tā nav nejauŔība, jo tas ir pilnÄ«bā uzrakstÄ«ts C++ valodā. Un tā kā mēs nolēmām pievienot jaunu funkcionalitāti tieÅ”i klientam, mums tā bija jāizstrādā C++.

Hackathon DevDays'19 (2. daļa): audio ziņojumu parsētājs telegrammas un gramatikas pārbaudei programmā IntelliJ IDEAMÅ«su komandā bija 4 cilvēki. Sākotnēji divi cilvēki meklēja piemērotu bibliotēku runas atpazÄ«Å”anai, viens studēja Telegram-desktop pirmkodu, cits izvietoja bÅ«vprojektu. Telegram Desktop. Vēlāk visi bija aizņemti ar lietotāja interfeisa laboÅ”anu un atkļūdoÅ”anu.

Å Ä·ita, ka iecerētās funkcionalitātes ievieÅ”ana nesagādās grÅ«tÄ«bas, taču, kā jau vienmēr, radās grÅ«tÄ«bas.

Problēmas risinājums sastāvēja no diviem neatkarÄ«giem apakÅ”uzdevumiem: piemērota runas atpazÄ«Å”anas rÄ«ka izvēle un UI ievieÅ”ana jaunai funkcionalitātei.

Izvēloties bibliotēku balss atpazÄ«Å”anai, mums nekavējoties bija jāatsakās no visām bezsaistes API, jo valodu modeļi aizņem daudz vietas. Bet mēs runājam tikai par vienu valodu. Kļuva skaidrs, ka mums bÅ«s jāizmanto tieÅ”saistes API. Vēlāk izrādÄ«jās, ka tādu gigantu kā Google, Yandex un Microsoft runas atpazÄ«Å”anas pakalpojumi nebÅ«t nav bezmaksas, un mums bÅ«s jāsamierinās ar izmēģinājuma periodu. Rezultātā tika izvēlēts Google Speech-To-Text, jo tas ļauj iegÅ«t pakalpojuma izmantoÅ”anas marÄ·ieri, kas kalpos veselu gadu.

Otra problēma, ar kuru saskārāmies, ir saistÄ«ta ar dažiem C++ trÅ«kumiem - dažādu bibliotēku zoodārzs, ja nav centralizētas repozitorijas. Gadās, ka Telegram Desktop ir atkarÄ«ga no daudzām citām versijām raksturÄ«gām bibliotēkām. Oficiālajā repozitorijā ir norādÄ«jums projekta komplektÄ“Å”anai. Un arÄ« liels skaits atklātu jautājumu, piemēram, par bÅ«vniecÄ«bas problēmām laiks Šø Š“Š²Š°. Visas problēmas izrādÄ«jās saistÄ«tas ar to, ka bÅ«vÄ“Å”anas skripts tika rakstÄ«ts Ubuntu 14.04, un, lai veiksmÄ«gi izveidotu telegrammu zem Ubuntu 18.04, bija jāveic izmaiņas.

Pati Telegram Desktop salikÅ”ana prasa diezgan ilgu laiku: klēpjdatorā ar Intel Core i5-7200U pilnÄ«ga montāža (karogs -j 4) ar visām atkarÄ«bām aizņem apmēram trÄ«s stundas. No tām aptuveni 30 minÅ«tes aizņem paÅ”a klienta saistÄ«Å”ana (vēlāk izrādÄ«jās, ka Debug konfigurācijā saistÄ«Å”ana aizņem apmēram 10 minÅ«tes), bet sasaistes posms ir jāatkārto katru reizi pēc izmaiņu veikÅ”anas.

Neskatoties uz problēmām, izdevās realizēt iecerēto ideju, kā arÄ« atjaunināt veidot skriptu Ubuntu 18.04. Darbu demonstrāciju var redzēt plkst saite. Mēs iekļaujam arÄ« vairākas animācijas. Blakus visiem balss ziņojumiem ir parādÄ«jusies poga, kas ļauj tulkot ziņojumu tekstā. NoklikŔķinot ar peles labo pogu, varat papildus norādÄ«t valodu, kas tiks izmantota apraidei. Autors saite klients pieejams lejupielādei.

Repozitorijs.

Mūsuprāt, tas izrādījās labs Proof of Concept funkcionalitātei, kas būtu ērts daudziem lietotājiem. Mēs ceram to redzēt nākamajos Telegram Desktop laidienos.

Uzlabots dabiskās valodas atbalsts pakalpojumā IntelliJ IDEA

Hackathon DevDays'19 (2. daļa): audio ziņojumu parsētājs telegrammas un gramatikas pārbaudei programmā IntelliJ IDEA

Idejas autors

Tankovs Vladislavs

Sarindoties

Tankovs Vladislavs (komandas vadītājs, strādā ar LanguageTool un IntelliJ IDEA)
Ņikita Sokolovs (strādā ar LanguageTool un veido lietotāja saskarni)
Khvorovs Aleksandrs (strādā ar LanguageTool un optimizē veiktspēju)
Sadovņikovs Aleksandrs (atbalsts iezÄ«mÄ“Å”anas valodu un koda parsÄ“Å”anai)

Mēs esam izstrādājuÅ”i IntelliJ IDEA spraudni, kas pārbauda dažādu tekstu (komentārus un dokumentāciju, burtiskas rindiņas kodā, tekstu, kas formatēts Markdown vai XML marķējumā) gramatikas, pareizrakstÄ«bas un stilistiskā precizitātei (angļu valodā to sauc par korektÅ«ru).

Projekta ideja bija paplaÅ”ināt standarta pareizrakstÄ«bas pārbaudi IntelliJ IDEA lÄ«dz Grammarly mērogam, lai IDE iekÅ”ienē izveidotu sava veida gramatiku.

Var redzēt, kas noticis ŠæŠ¾ ссыŠ»ŠŗŠµ.

Tālāk mēs sīkāk runāsim par spraudņa iespējām, kā arī par grūtībām, kas radās tā izveides laikā.

Motivācija

Ir daudzi produkti, kas paredzēti teksta rakstÄ«Å”anai dabiskās valodās, bet dokumentācija un koda komentāri visbiežāk tiek rakstÄ«ti izstrādes vidēs. Tajā paŔā laikā IDE lieliski var atrast kļūdas kodā, taču tie ir slikti piemēroti tekstiem dabiskās valodās. Tādējādi ir ļoti viegli pieļaut kļūdas gramatikā, pieturzÄ«mēs vai stilā, izstrādes vide uz tām nenorādot. VisbÅ«tiskāk ir kļūdÄ«ties, rakstot lietotāja interfeisu, jo tas ietekmēs ne tikai koda saprotamÄ«bu, bet arÄ« paÅ”us izstrādātās lietojumprogrammas lietotājus.

Viena no populārākajām un attÄ«stÄ«tākajām izstrādes vidēm ir IntelliJ IDEA, kā arÄ« IDE, kuru pamatā ir IntelliJ platforma. IntelliJ Platform jau ir iebÅ«vēts pareizrakstÄ«bas pārbaudÄ«tājs, taču tas neatbrÄ«vojas pat no visvienkārŔākajām gramatikas kļūdām. Mēs nolēmām integrēt vienu no populārajām dabiskās valodas analÄ«zes sistēmām IntelliJ IDEA.

IevieŔana

Hackathon DevDays'19 (2. daļa): audio ziņojumu parsētājs telegrammas un gramatikas pārbaudei programmā IntelliJ IDEAMēs neizvirzÄ«jām sev uzdevumu izveidot savu teksta pārbaudes sistēmu, tāpēc izmantojām esoÅ”u risinājumu. Vispiemērotākais variants izrādÄ«jās Valodas rÄ«ks. Licence ļāva mums to brÄ«vi izmantot saviem mērÄ·iem: tā ir bezmaksas, rakstÄ«ta Java un atvērtā pirmkoda. Turklāt tas atbalsta 25 valodas un ir izstrādāts vairāk nekā piecpadsmit gadus. Neskatoties uz savu atvērtÄ«bu, LanguageTool ir nopietns konkurents maksas teksta verifikācijas risinājumiem, un fakts, ka tas var darboties lokāli, burtiski ir tā slepkava.

Spraudņa kods ir ievadīts GitHub krātuves. Viss projekts tika uzrakstīts Kotlinā ar nelielu Java papildinājumu lietotāja saskarnei. Hakatona laikā mums izdevās ieviest Markdown, JavaDoc, HTML un Plain Text atbalstu. Pēc hakatona lielais atjauninājums pievienoja atbalstu XML, virkņu burtiem Java, Kotlin un Python, kā arī pareizrakstības pārbaudi.

Grūtības

Diezgan ātri sapratām, ka, ja katru reizi ievadÄ«sim visu tekstu LanguageTool pārbaudei, tad IDEA interfeiss iesaldēs uz jebkuru vairāk vai mazāk nopietnu tekstu, jo pati pārbaude bloķē lietotāja interfeisa plÅ«smu. Problēma tika atrisināta, izmantojot `ProgressManager.checkCancelled` pārbaudi - Ŕī funkcija rada izņēmumu, ja IDEA uzskata, ka ir pienācis laiks pārtraukt pārbaudi.

Tas pilnÄ«bā novērsa sasalÅ”anu, taču to nav iespējams izmantot: teksta apstrāde aizņem ļoti ilgu laiku. Turklāt mÅ«su gadÄ«jumā visbiežāk mainās ļoti maza teksta daļa un mēs vēlamies kaut kā saglabāt rezultātus keÅ”atmiņā. TieÅ”i tā mēs arÄ« darÄ«jām. Lai nepārbaudÄ«tu visu katru reizi, mēs deterministiski sadalÄ«jām tekstu gabalos un pārbaudÄ«jām tikai tos, kas bija mainÄ«juÅ”ies. Tā kā teksti var bÅ«t lieli un mēs negribējām ielādēt keÅ”atmiņu, mēs saglabājām nevis paÅ”us tekstus, bet gan to jaucējus. Tas ļāva spraudnim nevainojami darboties pat lielos failos.

LanguageTool atbalsta vairāk nekā 25 valodas, taču maz ticams, ka kādam lietotājam tās visas ir vajadzÄ«gas. Es gribēju dot iespēju pēc pieprasÄ«juma lejupielādēt bibliotēkas konkrētai valodai (ja atzÄ«mējat to lietotāja saskarnē). Mēs pat to ieviesām, taču tas izrādÄ«jās pārāk sarežģīti un neuzticami. Jo Ä«paÅ”i mums bija jāielādē LanguageTool ar jaunu valodu komplektu, izmantojot atseviŔķu klases ielādētāju, un pēc tam rÅ«pÄ«gi jāinicializē. Tajā paŔā laikā visas bibliotēkas atradās lietotāja .m2 repozitorijā, un katrā sākumā mums bija jāpārbauda to integritāte. Galu galā mēs nolēmām, ka, ja lietotājiem bÅ«s problēmas ar spraudņa lielumu, mēs nodroÅ”ināsim atseviŔķu spraudni vairākām populārākajām valodām.

Pēc hakatona

Hakatons beidzās, bet darbs pie spraudņa turpinājās Å”aurākā komandā. Es gribēju atbalstÄ«t virknes, komentārus un pat valodas konstrukcijas, piemēram, mainÄ«go un klaÅ”u nosaukumus. PaÅ”laik tas tiek atbalstÄ«ts tikai Java, Kotlin un Python, taču mēs ceram, ka Å”is saraksts paplaÅ”ināsies. Mēs esam izlabojuÅ”i daudz mazu kļūdu un kļuvuÅ”i saderÄ«gāki ar Idea iebÅ«vēto pareizrakstÄ«bas pārbaudÄ«tāju. Turklāt ir parādÄ«jies XML atbalsts un pareizrakstÄ«bas pārbaude. Tas viss ir atrodams otrajā versijā, kuru mēs nesen publicējām.

Ko tālāk?

Šāds spraudnis var bÅ«t noderÄ«gs ne tikai izstrādātājiem, bet arÄ« tehniskajiem rakstniekiem (bieži strādājot, piemēram, ar XML IDE). Katru dienu viņiem ir jāstrādā ar dabisko valodu, bez palÄ«ga redaktora padomu veidā par iespējamām kļūdām. MÅ«su spraudnis sniedz Ŕādus padomus un dara to ar augstu precizitātes pakāpi.
Mēs plānojam izstrādāt spraudni, gan pievienojot jaunas valodas, gan izpētot vispārÄ«gu pieeju teksta pārbaudes organizÄ“Å”anai. MÅ«su tuvākajos plānos ietilpst stilistisko profilu (noteikumu kopas, kas nosaka stila rokasgrāmatu tekstam, piemēram, ā€œnerakstiet, bet rakstiet pilnu formuā€) ievieÅ”anu, vārdnÄ«cas paplaÅ”ināŔanu un lietotāja interfeisa uzlaboÅ”anu (jo Ä«paÅ”i, mēs vēlamies dot lietotājam iespēju ne tikai ignorēt vārdu, bet arÄ« pievienot to vārdnÄ«cai, norādot runas daļu).

Avots: www.habr.com

Pievieno komentāru