DevDays'19 häkaton (2. osa): IntelliJ IDEA telegrammi ja grammatikakontrolli häälsõnumite parser

Jätkame juttu kevadise hackathoni DevDays projektidest, milles osalesid magistriprogrammi tudengid "Tarkvaraarendus / Tarkvaratehnika".

Hackathon DevDays'19 (2. osa): helisõnumite parser telegrammi ja grammatika kontrollimiseks rakenduses IntelliJ IDEA

Muide, kutsume lugejaid liituma VK magistrantide rühm. Selles avaldame värskeimad uudised värbamise ja õppimise kohta. Rühmast leiab ka video lahtiste uste päevast. Tuletame meelde: üritus toimub 29. aprillil, detailid Internetis.

Telegrami töölaua häälsõnumite parser

Hackathon DevDays'19 (2. osa): helisõnumite parser telegrammi ja grammatika kontrollimiseks rakenduses IntelliJ IDEA

Idee autor
Khorošev Artjom

Koosseis

Khoroshev Artem – projektijuht/arendaja/QA
Eliseev Anton – ärianalüütik/turundusspetsialist
Maria Kuklina – kasutajaliidese kujundaja/arendaja
Bakhvalov Pavel – kasutajaliidese kujundaja/arendaja/QA

Meie vaatenurgast on Telegram kaasaegne ja mugav messenger ning selle arvutiversioon on populaarne ja avatud lähtekoodiga, mis võimaldab seda muuta. Klient pakub üsna rikkalikku funktsionaalsust. Lisaks tavalistele tekstsõnumitele sisaldab see häälkõnesid, videosõnumeid ja häälsõnumeid. Ja just viimased toovad mõnikord nende saajale ebamugavusi. Sageli pole arvutis või sülearvutis viibides võimalik häälsõnumit kuulata. Võib esineda ümbritsevat müra, kõrvaklappide puudumine või te ei soovi, et keegi sõnumi sisu kuuleks. Selliseid probleeme ei teki peaaegu kunagi, kui kasutate Telegrami nutitelefonis, sest erinevalt sülearvutist või arvutist saate selle lihtsalt kõrva juurde tuua. Püüdsime seda probleemi lahendada.

Meie DevDaysi projekti eesmärk oli lisada Telegrami töölauakliendile (edaspidi Telegrami töölaud) võimalus tõlkida vastuvõetud häälsõnumid tekstiks.

Kõik analoogid on hetkel robotid, millele saate saata helisõnumi ja saada vastuseks teksti. Me ei ole sellega väga rahul: sõnumi edastamine robotile pole eriti mugav, me sooviksime oma funktsiooni. Lisaks on iga robot kolmas osapool, kes tegutseb vahendajana kõnetuvastuse API ja kasutaja vahel ning see on vähemalt ohtlik.

Nagu varem märgitud, on telegrammi töölaual kaks olulist eelist: töö lihtsus ja kiirus. Ja see pole juhus, sest see on kirjutatud täielikult C++ keeles. Ja kuna otsustasime lisada uut funktsionaalsust otse kliendile, pidime seda arendama C++-s.

Hackathon DevDays'19 (2. osa): helisõnumite parser telegrammi ja grammatika kontrollimiseks rakenduses IntelliJ IDEAMeie meeskonnas oli 4 inimest. Esialgu otsisid kaks inimest kõnetuvastuseks sobivat raamatukogu, üks uuris Telegram-desktopi lähtekoodi, teine ​​juurutas ehitusprojekti. Telegram Desktop. Hiljem tegelesid kõik kasutajaliidese parandamise ja silumisega.

Tundus, et kavandatud funktsionaalsuse juurutamine pole keeruline, kuid nagu ikka, tekkisid raskused.

Probleemi lahendus koosnes kahest sõltumatust alamülesandest: sobiva kõnetuvastusvahendi valimine ja uue funktsionaalsuse jaoks kasutajaliidese juurutamine.

Hääletuvastuse teeki valides pidime kohe loobuma kõigist võrguühenduseta API-dest, sest keelemudelid võtavad palju ruumi. Kuid me räägime ainult ühest keelest. Sai selgeks, et peame kasutama online API-d. Hiljem selgus, et selliste hiiglaste nagu Google, Yandex ja Microsoft kõnetuvastusteenused pole sugugi tasuta ning peame leppima prooviperioodiga. Selle tulemusena valiti Google Speech-To-Text, kuna see võimaldab teil saada teenuse kasutamise eest žetoon, mis kestab terve aasta.

Teine probleem, millega me kokku puutusime, on seotud mõne C++ puudusega – erinevate raamatukogude loomaaed tsentraliseeritud hoidla puudumisel. Juhtub nii, et Telegram Desktop sõltub paljudest teistest versioonispetsiifilistest teekidest. Ametlikus hoidlas on juhendamine projekti kokkupanekuks. Ja ka suur hulk lahtiseid küsimusi näiteks ehitusprobleemide kohta aeg и два. Kõik probleemid osutusid seotud sellega, et ehitusskript oli kirjutatud Ubuntu 14.04 jaoks ning telegrammi edukaks ehitamiseks Ubuntu 18.04 alla tuli teha muudatusi.

Telegram Desktopi enda kokkupanemine võtab üsna kaua aega: Intel Core i5-7200U-ga sülearvutil võtab täielik kokkupanek (lipp -j 4) koos kõigi sõltuvustega umbes kolm tundi. Neist umbes 30 minutit kulub kliendi enda linkimisele (hiljem selgus, et Debug konfiguratsioonis võtab linkimine aega ca 10 minutit), kuid linkimisetappi tuleb iga kord peale muudatuste tegemist korrata.

Vaatamata probleemidele õnnestus väljamõeldud idee ellu viia ja uuendada ehitada skript Ubuntu 18.04 jaoks. Töö demonstratsiooni saab näha kl link. Lisame ka mitmeid animatsioone. Kõigi häälsõnumite kõrvale on ilmunud nupp, mis võimaldab teil sõnumi tekstiks tõlkida. Paremklõpsuga saate täiendavalt määrata keele, mida saate edastamiseks kasutada. Kõrval link allalaadimiseks saadaval klient.

Hoidla.

Meie arvates osutus see heaks Proof of Concept funktsionaalsuseks, mis oleks mugav paljudele kasutajatele. Loodame seda näha Telegram Desktopi tulevastes väljaannetes.

IntelliJ IDEA täiustatud loomuliku keele tugi

Hackathon DevDays'19 (2. osa): helisõnumite parser telegrammi ja grammatika kontrollimiseks rakenduses IntelliJ IDEA

Idee autor

Tankov Vladislav

Koosseis

Tankov Vladislav (meeskonna juht, töötab LanguageTooli ja IntelliJ IDEA-ga)
Nikita Sokolov (töötab LanguageTooliga ja loob kasutajaliidese)
Khvorov Alexander (töötab LanguageTooliga ja optimeerib jõudlust)
Sadovnikov Alexander (märgistuskeelte ja koodi sõelumise tugi)

Oleme IntelliJ IDEA jaoks välja töötanud plugina, mis kontrollib erinevate tekstide (kommentaarid ja dokumentatsioon, sõnasõnalised read koodis, Markdowni või XML-märgistuses vormindatud tekst) grammatilist, õigekirja ja stiililist täpsust (inglise keeles nimetatakse seda korrektuuriks).

Projekti idee oli laiendada standardset õigekirjakontrolli IntelliJ IDEA Grammarly skaalale, et teha IDE sees omamoodi Grammarly.

Näete, mis juhtus по ссылке.

Noh, allpool räägime üksikasjalikumalt pistikprogrammi võimalustest ja raskustest, mis selle loomisel tekkisid.

Motivatsioon

Loomulikes keeltes teksti kirjutamiseks on loodud palju tooteid, kuid dokumentatsioon ja koodikommentaarid kirjutatakse kõige sagedamini arenduskeskkondades. Samal ajal teevad IDE-d suurepärast tööd koodis vigade leidmisel, kuid sobivad halvasti loomulike keelte tekstide jaoks. Nii on väga lihtne teha vigu grammatikas, kirjavahemärkides või stiilis, ilma et arenduskeskkond neile tähelepanu juhiks. Kõige olulisem on teha viga kasutajaliidese kirjutamisel, kuna see mõjutab mitte ainult koodi arusaadavust, vaid ka arendatud rakenduse kasutajaid endid.

Üks populaarsemaid ja arenenumaid arenduskeskkondi on IntelliJ IDEA, aga ka IntelliJ platvormil põhinevad IDE-d. IntelliJ Platformil on juba sisseehitatud õigekirjakontroll, kuid see ei vabane ka kõige lihtsamatest grammatikavigadest. Otsustasime integreerida IntelliJ IDEAsse ühe populaarse loomuliku keele analüüsisüsteemi.

Реализация

Hackathon DevDays'19 (2. osa): helisõnumite parser telegrammi ja grammatika kontrollimiseks rakenduses IntelliJ IDEAMe ei seadnud endale ülesandeks luua oma tekstikontrollisüsteemi, seega kasutasime olemasolevat lahendust. Sobivaim variant osutus Keeletööriist. Litsents võimaldas meil seda oma eesmärkidel vabalt kasutada: see on tasuta, Java keeles kirjutatud ja avatud lähtekoodiga. Lisaks toetab see 25 keelt ja seda on arendatud enam kui viisteist aastat. Vaatamata oma avatusele on LanguageTool tõsine konkurent tasulistele tekstikontrollilahendustele ja asjaolu, et see töötab kohapeal, on sõna otseses mõttes selle tapmisfunktsioon.

Plugina kood on sees hoidlad GitHubis. Kogu projekt on kirjutatud Kotlinis koos väikese Java lisaga kasutajaliidese jaoks. Häkatonil õnnestus meil juurutada Markdowni, JavaDoc, HTML ja Plain Text tugi. Pärast häkatoni täiendas suur värskendus XML-i toe, Java, Kotlini ja Pythoni stringliteraalide ning õigekirjakontrolli.

Raskused

Üsna kiiresti saime aru, et kui sisestame iga kord kogu teksti LanguageTooli kontrollimiseks, siis IDEA liides hangub iga enam-vähem tõsise teksti puhul, kuna kontroll ise blokeerib kasutajaliidese voo. Probleem lahendati `ProgressManager.checkCancelled` kontrolliga – see funktsioon teeb erandi, kui IDEA usub, et on aeg kontroll katkestada.

See kõrvaldas külmutamise täielikult, kuid seda pole võimalik kasutada: teksti töötlemine võtab väga kaua aega. Pealegi muutub meie puhul enamasti väga väike osa tekstist ja me tahame tulemusi kuidagi vahemällu salvestada. Täpselt nii me tegimegi. Et mitte iga kord kõike kontrollida, jagasime teksti deterministlikult tükkideks ja kontrollisime ainult neid, mis olid muutunud. Kuna tekstid võivad olla suured ja me ei tahtnud vahemälu laadida, siis ei salvestanud me tekste endid, vaid nende räsi. See võimaldas pistikprogrammil sujuvalt töötada isegi suurte failide puhul.

LanguageTool toetab enam kui 25 keelt, kuid on ebatõenäoline, et ükski kasutaja neid kõiki vajaks. Tahtsin anda võimaluse soovi korral alla laadida konkreetse keele teeke (kui märgite selle kasutajaliideses linnukese). Me isegi rakendasime selle, kuid see osutus liiga keeruliseks ja ebausaldusväärseks. Eelkõige pidime keeletööriista eraldi klassilaaduri abil laadima uue keelekomplektiga ja seejärel selle hoolikalt initsialiseerima. Samal ajal olid kõik teegid kasutaja .m2 hoidlas ja igal käivitamisel pidime kontrollima nende terviklikkust. Lõpuks otsustasime, et kui kasutajatel on probleeme pistikprogrammi suurusega, pakume mitmele kõige populaarsemale keelele eraldi pistikprogrammi.

Pärast häkatoni

Häkaton lõppes, kuid töö pistikprogrammi kallal jätkus kitsama meeskonnaga. Tahtsin toetada stringe, kommentaare ja isegi keelekonstruktsioone, näiteks muutujate ja klasside nimesid. Praegu toetatakse seda ainult Java, Kotlini ja Pythoni jaoks, kuid loodame, et see nimekiri kasvab. Oleme parandanud palju väikseid vigu ja muutunud paremini ühilduvaks Idea sisseehitatud õigekirjakontrolliga. Lisaks on ilmunud XML-i tugi ja õigekirjakontroll. Kõik see on leitav teisest versioonist, mille me hiljuti avaldasime.

Mis edasi?

Selline pistikprogramm võib olla kasulik mitte ainult arendajatele, vaid ka tehnilistele kirjutajatele (töötavad sageli näiteks XML-iga IDE-s). Iga päev peavad nad töötama loomuliku keelega, ilma et neil oleks abilist, kes annaks toimetaja näpunäiteid võimalike vigade kohta. Meie pistikprogramm pakub selliseid vihjeid ja teeb seda suure täpsusega.
Plaanime pluginat arendada nii uute keelte lisamise kui ka teksti kontrollimise korraldamise üldise lähenemisviisi uurimise kaudu. Meie lähiplaanid hõlmavad stiiliprofiilide rakendamist (reeglid, mis määratlevad teksti stiilijuhise, näiteks “ära kirjuta nt, vaid kirjuta täisvorm”), sõnastiku laiendamist ja kasutajaliidese täiustamist (eelkõige tahame anda kasutajale võimaluse mitte lihtsalt sõna eirata, vaid lisada see sõnaraamatusse, näidates ära kõneosa).

Allikas: www.habr.com

Lisa kommentaar