Hackathon DevDays'19 (2. zatia): audio-mezuen analizatzailea Telegrama eta gramatika egiaztatzeko IntelliJ IDEA-n

Udaberriko hackathoneko DevDays proiektuei buruz hitz egiten jarraitzen dugu, non masterreko ikasleek parte hartu zuten "Software garapena / Software ingeniaritza".

Hackathon DevDays'19 (2. zatia): audio-mezuen analizatzailea Telegrama eta gramatika egiaztatzeko IntelliJ IDEA-n

Bide batez, irakurleak parte hartzera gonbidatu nahi ditugu VK masterreko ikasleen taldea. Bertan kontratazio eta ikasketei buruzko azken berriak argitaratuko ditugu. Ate irekien jardunaldiko bideo bat ere aurki daiteke taldean. Gogorarazten dizuegu: ekitaldia apirilaren 29an izango da, xehetasunak online.

Telegram mahaigaineko ahots-mezuen analizatzailea

Hackathon DevDays'19 (2. zatia): audio-mezuen analizatzailea Telegrama eta gramatika egiaztatzeko IntelliJ IDEA-n

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.

Hackathon DevDays'19 (2. zatia): audio-mezuen analizatzailea Telegrama eta gramatika egiaztatzeko IntelliJ IDEA-nGure 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. Telegram Desktop. Geroago, denak lanpetuta zeuden UI konpontzen eta arazketan.

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 Instrukzio proiektua muntatzeko. Eta eraikuntza arazoei buruzko gai ireki ugari ere bai, adibidez denbora и два. Arazo guztiak eraikitzeko script-a Ubuntu 14.04rako idatzita zegoela eta Ubuntu 18.04-n telegrama arrakastaz eraikitzeko, aldaketak egin behar izan ziren.

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 gidoia eraiki Ubuntu 18.04rako. Lanaren erakustaldia hemen ikus daiteke link. Hainbat animazio ere sartzen ditugu. Botoi bat agertu da ahots-mezu guztien ondoan, mezua testura itzultzeko aukera emanez. Eskuineko botoiarekin klik eginez gero, igorpenerako erabiliko den hizkuntza ere zehaztu dezakezu. Nork link bezeroa deskargatzeko eskuragarri.

Biltegia.

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

Hackathon DevDays'19 (2. zatia): audio-mezuen analizatzailea Telegrama eta gramatika egiaztatzeko IntelliJ IDEA-n

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

Hackathon DevDays'19 (2. zatia): audio-mezuen analizatzailea Telegrama eta gramatika egiaztatzeko IntelliJ IDEA-nGuk ez genion geure buruari testuak egiaztatzeko sistema sortzeko zeregina ezarri, beraz, lehendik zegoen irtenbide bat erabili genuen. Aukera egokiena izan zen Hizkuntza-tresna. Lizentziari esker, gure helburuetarako libreki erabiltzeko aukera eman zigun: doakoa da, Javan idatzia eta kode irekikoa. Horrez gain, 25 hizkuntza onartzen ditu eta hamabost urte baino gehiago daramatza garatzen. Irekia izan arren, LanguageTool ordainpeko testuak egiaztatzeko soluzioen lehiakide serioa da, eta lokalean lan egin dezakeela bere ezaugarri hilgarria da literalki.

Plugin kodea sartuta dago biltegiak GitHub-en. Proiektu osoa Kotlin-en idatzi zen UI-rako Java gehigarri txiki batekin. Hackathonean, Markdown, JavaDoc, HTML eta Plain Text-en euskarria ezartzea lortu dugu. Hackatonaren ostean, eguneratze garrantzitsu batek XMLrako laguntza gehitu zuen, kate literalak Java, Kotlin eta Python-en eta ortografia-zuzentzailea.

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

Gehitu iruzkin berria