JĂ€tkame juttu kevadise hackathoni DevDays projektidest, milles osalesid magistriprogrammi tudengid .

Muide, kutsume lugejaid liituma . 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 .
Telegrami töölaua hÀÀlsÔnumite parser

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.
Meie meeskonnas oli 4 inimest. Esialgu otsisid kaks inimest kĂ”netuvastuseks sobivat raamatukogu, ĂŒks uuris Telegram-desktopi lĂ€htekoodi, teine ââjuurutas ehitusprojekti. . 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 projekti kokkupanekuks. Ja ka suur hulk lahtiseid kĂŒsimusi nĂ€iteks ehitusprobleemide kohta Đž KĂ”ik probleemid osutusid seotuks asjaoluga, et ehitusskript oli kirjutatud Ubuntu 14.04 ja telegrammi edukaks kokkupanekuks all Ubuntu 18.04 pidi tegema 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 eest Ubuntu 18.04. Töö demonstratsiooni saab nÀha aadressil . 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 allalaadimiseks saadaval klient.
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

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.
РДалОзаŃĐžŃ
Me ei seadnud endale ĂŒlesandeks luua oma tekstikontrollisĂŒsteemi, seega kasutasime olemasolevat lahendust. Sobivaim variant osutus . 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 . 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
