Udaberriko hackathoneko DevDays proiektuei buruz hitz egiten jarraitzen dugu, non masterreko ikasleek parte hartu zuten
Bide batez, irakurleak parte hartzera gonbidatu nahi ditugu
Telegram mahaigaineko ahots-mezuen analizatzailea
Ideiaren egilea
Khoroshev Artyom
Hamaikakoa
Khoroshev Artem - proiektuaren kudeatzailea / garatzailea / QA
Eliseev Anton - negozio-analista/marketin espezialista
Maria Kuklina – UI diseinatzailea/garatzailea
Bakhvalov Pavel - UI diseinatzailea / garatzailea / QA
Gure ikuspuntutik, Telegram mezulari moderno eta erosoa da, eta bere ordenagailurako bertsio ezaguna eta kode irekia da, eta horrek aldatzea posible egiten du. Bezeroak funtzionalitate nahiko aberatsak eskaintzen ditu. Testu-mezu arruntez gain, ahots-deiak, bideo-mezuak eta ahots-mezuak ditu. Eta azken hauek dira batzuetan hartzaileari eragozpenak ekartzen dizkiona. Askotan ezin da ahots-mezu bat entzun ordenagailu edo ordenagailu eramangarri batean. Baliteke inguruneko zarata egotea, entzungailurik ez izatea edo mezuaren edukia inork entzutea nahi ez izatea. Arazo horiek ia inoiz ez dira sortzen Telegram telefonoan erabiltzen baduzu, belarrira eraman dezakezulako, ordenagailu eramangarri edo ordenagailu batean ez bezala. Arazo hau konpontzen saiatu gara.
DevDays-en gure proiektuaren helburua Telegram mahaigaineko bezeroari jasotako ahots-mezuak testura itzultzeko gaitasuna gehitzea zen (aurrerantzean Telegram mahaigaina deitzen zaio).
Une honetan analogo guztiak bot-ak dira, zeinei audio-mezu bat bidal diezaiekezu eta erantzun gisa testu bat jaso dezakezu. Ez gaude oso pozik honekin: mezu bat bot batera birbidaltzea ez da oso erosoa; bertako funtzionaltasuna izatea gustatuko litzaiguke. Gainera, edozein bot hirugarren bat da, ahotsa ezagutzeko APIaren eta erabiltzailearen arteko bitartekari gisa jarduten duena, eta hori, gutxienez, ez da segurua.
Lehen esan bezala, telegram-desktop-ak bi abantaila nabarmen ditu: erraztasuna eta funtzionamendu-abiadura. Eta hau ez da kasualitatea, oso-osorik C++-n idatzita dagoelako. Eta bezeroari zuzenean funtzionalitate berriak gehitzea erabaki genuenez, C++-n garatu behar izan genuen.
Gure taldean 4 lagun zeuden. Hasieran, bi pertsona hitz-ezagutzarako liburutegi egoki baten bila ari ziren, pertsona bat Telegram-desktop-en iturburu kodea aztertzen ari zen, beste bat eraikitze proiektua zabaltzen ari zen.
Bazirudien aurreikusitako funtzionaltasuna ezartzea ez zela zaila izango, baina, beti gertatzen den bezala, zailtasunak sortu ziren.
Arazoaren konponbidea bi azpizeregin independente izan ziren: ahotsa ezagutzeko tresna egokia aukeratzea eta funtzionalitate berrietarako UI bat ezartzea.
Ahots-ezagutzarako liburutegi bat aukeratzerakoan, berehala utzi behar izan ditugu lineaz kanpoko API guztiak, hizkuntza-ereduek leku handia hartzen dutelako. Baina hizkuntza bakarraz ari gara. Argi geratu zen lineako APIa erabili beharko genuela. Geroago, Google, Yandex eta Microsoft bezalako erraldoien hizkera ezagutzeko zerbitzuak ez direla batere doakoak izan eta probaldi batekin konformatu beharko dugu. Ondorioz, Google Speech-To-Text aukeratu zen zerbitzua erabiltzeko token bat lortzeko aukera ematen duelako, urte osoko iraupena izango duena.
Topatu dugun bigarren arazoa C++-ren gabezia batzuekin lotuta dago: hainbat liburutegitako zooa biltegi zentralizaturik ezean. Gertatzen da Telegram Desktop beste bertsio espezifikoko liburutegi askoren mende dagoela. Biltegi ofizialak ditu
Telegram mahaigainak berak nahiko denbora luzea behar du muntatzeko: Intel Core i5-7200U duen ordenagailu eramangarri batean, mendekotasun guztiekin muntatzeko osoak (bandera -j 4) hiru ordu inguru behar ditu. Horietatik, 30 minutu inguru bezeroa bera lotuz hartzen dira (geroago Debug konfigurazioan, lotzeak 10 minutu inguru irauten duela), baina aldaketak egin ondoren lotzeko fasea errepikatu behar da.
Arazoak izan arren, asmatutako ideia ezartzea lortu dugu, baita eguneratzea ere
Gure ustez, erabiltzaile askorentzat erosoa izango zen funtzionaltasun kontzeptuaren froga ona izan zen. Telegram Desktop-en etorkizuneko bertsioetan ikustea espero dugu.
IntelliJ IDEA-n hizkuntza naturalaren euskarria hobetua
Ideiaren egilea
Tankov Vladislav
Hamaikakoa
Tankov Vladislav (taldeko burua, LanguageTool eta IntelliJ IDEArekin lan egiten du)
Nikita Sokolov ( LanguageTool-ekin lan egiten du eta UI sortzen)
Khvorov Alexander ( LanguageTool-ekin lan egin eta errendimendua optimizatzen)
Sadovnikov Alexander (marka-lengoaiak eta kodea analizatzeko laguntza)
IntelliJ IDEArako plugin bat garatu dugu, hainbat testu egiaztatzen dituena (iruzkinak eta dokumentazioa, kodeko lerro literalak, Markdown edo XML markaketa formateatutako testua) zehaztasun gramatikala, ortografikoa eta estilistikoa (ingelesez zuzenketa deitzen zaio horri).
Proiektuaren ideia IntelliJ IDEA ortografia estandarra Grammarly-ren eskalara zabaltzea zen, IDE barruan Grammarly moduko bat egiteko.
Ikus dezakezu zer gertatu den
Bada, jarraian zehatzago hitz egingo dugu pluginaren gaitasunei buruz, baita bere sorreran sortutako zailtasunei buruz ere.
Motibazioa
Testuak hizkuntza naturaletan idazteko diseinatutako produktu asko daude, baina dokumentazioa eta kode iruzkinak garapen-inguruneetan idazten dira gehienetan. Aldi berean, IDEek lan bikaina egiten dute kodean akatsak aurkitzeko, baina ez dira egokiak hizkuntza naturalen testuetarako. Horrek gramatikan, puntuazioan edo estiloan akatsak egitea oso erraza da garapen-inguruneak adierazi gabe. Erabiltzaile-interfazea idaztean akats bat egitea da funtsezkoena, horrek kodearen ulergarritasunean ez ezik, garatutako aplikazioaren erabiltzaileei ere eragingo baitie.
Garapen-ingurune ezagun eta garatuenetako bat IntelliJ IDEA da, baita IntelliJ Plataforman oinarritutako IDEak ere. IntelliJ Plataformak jadanik zuzentzaile ortografiko bat dauka, baina ez ditu akats gramatikal errazenak ere kentzen. Hizkuntza naturalaren analisi-sistema ezagunetako bat IntelliJ IDEA-n integratzea erabaki genuen.
Inplementazioa
Guk ez genion geure buruari testuak egiaztatzeko sistema sortzeko zeregina ezarri, beraz, lehendik zegoen irtenbide bat erabili genuen. Aukera egokiena izan zen
Plugin kodea sartuta dago
Zailtasunak
Azkar konturatu ginen aldi bakoitzean testu guztia LanguageTool-i ikuskatzeko ematen badiogu, IDEA interfazea izoztuko zela testu larriago edo gutxiagotan, ikuskapenak berak UI-aren fluxua blokeatzen duelako. Arazoa `ProgressManager.checkCancelled` egiaztapenaren bidez konpondu da - funtzio honek salbuespen bat botatzen du IDEAk ikuskapena bertan behera uzteko garaia dela uste badu.
Horrek erabat ezabatu zituen izozketak, baina ezinezkoa da erabiltzea: testua oso denbora luzea behar da prozesatzeko. Gainera, gure kasuan, gehienetan testuaren zati txiki bat aldatzen da eta emaitzak nolabait gorde nahi ditugu. Horixe egin genuen hain zuzen. Aldi bakoitzean dena ez egiaztatzeko, testua zati deterministikoki zatitu eta aldatutakoak bakarrik egiaztatu ditugu. Testuak handiak izan daitezkeenez eta ez genuenez cachea kargatu nahi, ez ditugu testuak berak gorde, haien hashak baizik. Horri esker, plugin-ak erraz funtzionatzen zuen fitxategi handietan ere.
LanguageTool-ek 25 hizkuntza baino gehiago onartzen ditu, baina zaila da erabiltzaile batek denak behar izatea. Hizkuntza zehatz baterako liburutegiak deskargatzeko aukera eman nahi nuen eskatuz gero (IU-n markatzen baduzu). Hau ere inplementatu genuen, baina korapilatsuegia eta fidagarria izan zen. Bereziki, LanguageTool hizkuntza-multzo berri batekin kargatu behar izan dugu aparteko klase-kargatzaile bat erabiliz, eta gero arretaz hasieratu. Aldi berean, liburutegi guztiak erabiltzailearen .m2 biltegi batean zeuden, eta hasiera bakoitzean haien osotasuna egiaztatu behar genuen. Azkenean, erabiltzaileek pluginaren tamainarekin arazoak bazituzte, hizkuntza ezagunenetako beste plugin bat emango genuela erabaki genuen.
Hackatonaren ostean
Hackatona amaitu zen, baina pluginaren lanek talde estuago batekin jarraitu zuten. Kateak, iruzkinak eta baita hizkuntza-eraikuntzak ere onartu nahi nituen, hala nola aldagaien eta klaseen izenak. Une honetan Java, Kotlin eta Python-ekin soilik onartzen da, baina zerrenda hau hazten joango dela espero dugu. Akats txiki asko konpondu ditugu eta Idearen barneko zuzentzaile ortografikoarekin bateragarriagoak bihurtu gara. Horrez gain, XML euskarria eta zuzenketa ortografikoa agertu dira. Hori guztia duela gutxi argitaratu dugun bigarren bertsioan aurki daiteke.
Zer da hurrengoa?
Plugin hori garatzaileentzat ez ezik, idazle teknikoentzat ere erabilgarria izan daiteke (askotan, adibidez, XMLrekin IDE batean lan egiten du). Egunero hizkuntza naturalarekin lan egin behar dute, akats posibleei buruzko editore-aholkuen moduan laguntzailerik izan gabe. Gure pluginak horrelako aholkuak ematen ditu eta zehaztasun handiz egiten du.
Plugin-a garatzeko asmoa dugu, bai hizkuntza berriak gehituz, bai testu-egiaztapena antolatzeko ikuspegi orokor bat aztertuz. Gure berehalako planak honako hauek dira: profil estilistikoak ezartzea (testuaren estilo-gida bat definitzen duten arau multzoak, adibidez, "ez idatzi, adibidez, idatzi forma osoa"), hiztegia zabaltzea eta erabiltzailearen interfazea hobetzea (bereziki, hitz bati ez ezik, hiztegian gehitzeko aukera eman nahi diogu erabiltzaileari, hizketa-zatia adieraziz).
Iturria: www.habr.com