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 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 ehitada skript eest Ubuntu 18.04. Töö demonstratsiooni saab nÀha aadressil 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

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster