Hackathon DevDays'19 (hluti 2): hljóðskilaboðaþáttur fyrir símskeyti og málfræðiskoðun í IntelliJ IDEA

Við höldum áfram að tala um verkefni vorhakkaþonsins DevDays þar sem nemendur meistaranámsins tóku þátt í "Hugbúnaðarþróun / Hugbúnaðarverkfræði".

Hackathon DevDays'19 (hluti 2): hljóðskilaboðaþáttur fyrir símskeyti og málfræðiskoðun í IntelliJ IDEA

Að leiðarlokum viljum við bjóða lesendum að vera með VK hópur meistaranema. Þar munum við birta nýjustu fréttir um ráðningar og nám. Myndband frá opna deginum má einnig finna í hópnum. Við minnum ykkur á: atburðurinn mun fara fram 29. apríl, nánari upplýsingar á netinu.

Telegram Desktop Voice Message Parser

Hackathon DevDays'19 (hluti 2): hljóðskilaboðaþáttur fyrir símskeyti og málfræðiskoðun í IntelliJ IDEA

Höfundur hugmyndarinnar
Khoroshev Artyom

Uppröðun

Khoroshev Artem – verkefnastjóri/hönnuður/QA
Eliseev Anton – viðskiptafræðingur/markaðsfræðingur
Maria Kuklina – HÍ hönnuður/hönnuður
Bakhvalov Pavel – HÍ hönnuður/hönnuður/QA

Frá sjónarhóli okkar er Telegram nútímalegur og þægilegur boðberi og PC útgáfan er vinsæl og opinn uppspretta, sem gerir það mögulegt að breyta því. Viðskiptavinurinn býður upp á nokkuð ríka virkni. Auk venjulegra textaskilaboða inniheldur það símtöl, myndskilaboð og talskilaboð. Og það er hið síðarnefnda sem stundum veldur óþægindum fyrir viðtakanda þeirra. Oft er ekki hægt að hlusta á raddskilaboð í tölvu eða fartölvu. Það gæti verið umhverfishljóð, skortur á heyrnartólum eða þú vilt ekki að neinn heyri innihald skilaboðanna. Slík vandamál koma nánast aldrei upp ef þú notar Telegram í snjallsíma, því þú getur einfaldlega komið því með það að eyranu, ólíkt fartölvu eða tölvu. Við reyndum að leysa þetta vandamál.

Markmiðið með verkefninu okkar á DevDays var að bæta við getu til að þýða móttekin raddskilaboð yfir í texta í Telegram skjáborðsbiðlarann ​​(hér eftir nefnt Telegram Desktop).

Allar hliðstæður í augnablikinu eru vélmenni sem þú getur sent hljóðskilaboð við og fengið texta sem svar. Við erum ekki mjög ánægð með þetta: það er ekki mjög þægilegt að áframsenda skilaboð til vélmenni; við viljum hafa innbyggða virkni. Að auki er hvaða vél sem er þriðji aðili sem virkar sem milliliður milli talgreiningarforritaskila og notandans, og það er að minnsta kosti óöruggt.

Eins og áður hefur komið fram hefur símskeyti-skrifborð tvo mikilvæga kosti: Auðvelt og hraða í notkun. Og þetta er engin tilviljun, því það er alfarið skrifað í C++. Og þar sem við ákváðum að bæta nýjum virkni beint við viðskiptavininn urðum við að þróa hana í C++.

Hackathon DevDays'19 (hluti 2): hljóðskilaboðaþáttur fyrir símskeyti og málfræðiskoðun í IntelliJ IDEAÞað voru 4 manns í teyminu okkar. Upphaflega voru tveir menn að leita að hentugri bókasafni fyrir talgreiningu, einn var að kynna sér frumkóðann Telegram-desktop, annar var að setja upp byggingarverkefnið Telegram skrifborð. Seinna voru allir uppteknir við að laga HÍ og kemba.

Það virtist ekki vera erfitt að innleiða fyrirhugaða virkni, en eins og alltaf gerist komu upp erfiðleikar.

Lausnin á vandanum fólst í tveimur sjálfstæðum undirverkefnum: að velja viðeigandi talgreiningartæki og innleiða notendaviðmót fyrir nýja virkni.

Þegar við völdum bókasafn fyrir raddgreiningu urðum við strax að yfirgefa öll forritaskil án nettengingar, vegna þess að tungumálalíkön taka mikið pláss. En við erum bara að tala um eitt tungumál. Það varð ljóst að við yrðum að nota API á netinu. Síðar kom í ljós að talgreiningarþjónusta risa eins og Google, Yandex og Microsoft er alls ekki ókeypis og við verðum að láta okkur nægja prufutíma. Fyrir vikið var Google Speech-To-Text valið vegna þess að það gerir þér kleift að fá tákn fyrir notkun þjónustunnar sem endist í heilt ár.

Annað vandamálið sem við lentum í er tengt sumum göllum C++ - dýragarður ýmissa bókasöfna þar sem miðlæg geymsla er ekki til. Það vill svo til að Telegram Desktop er háð mörgum öðrum útgáfusértækum bókasöfnum. Opinbera geymslan hefur kennsla fyrir samsetningu verkefnisins. Og einnig mikill fjöldi opinna mála um byggingarvandamál, til dæmis tími и два. Öll vandamálin reyndust tengjast því að smíðahandritið var skrifað fyrir Ubuntu 14.04 og til þess að hægt væri að smíða símskeyti undir Ubuntu 18.04 þurfti að gera breytingar.

Telegram Desktop sjálft tekur nokkuð langan tíma að setja saman: á fartölvu með Intel Core i5-7200U tekur heildarsamsetning (fáni -j 4) með öllum ósjálfstæðum um þrjár klukkustundir. Þar af eru um 30 mínútur teknar með því að tengja biðlarann ​​sjálfan (síðar kom í ljós að í kembiforritinu tekur tengingin um 10 mínútur), en tengingarstigið þarf að endurtaka í hvert sinn eftir breytingar.

Þrátt fyrir vandamálin tókst okkur að hrinda hugmyndinni í framkvæmd, sem og uppfæra smíða handrit fyrir Ubuntu 18.04. Sýningu á verkinu má sjá kl tengill. Við erum líka með nokkrar hreyfimyndir. Hnappur hefur birst við hlið allra talskilaboða, sem gerir þér kleift að þýða skilaboðin yfir í texta. Með því að hægrismella geturðu auk þess tilgreint tungumálið sem verður notað fyrir útsendingar. By tengill viðskiptavinur sem hægt er að hlaða niður.

Geymsla.

Að okkar mati reyndist það vera góð Proof of Concept á virkni sem væri þægilegt fyrir marga notendur. Við vonumst til að sjá það í framtíðarútgáfum af Telegram Desktop.

Aukinn stuðningur við náttúrulegt tungumál í IntelliJ IDEA

Hackathon DevDays'19 (hluti 2): hljóðskilaboðaþáttur fyrir símskeyti og málfræðiskoðun í IntelliJ IDEA

Höfundur hugmyndarinnar

Tankov Vladislav

Uppröðun

Tankov Vladislav (teymisstjóri, vinnur með LanguageTool og IntelliJ IDEA)
Nikita Sokolov (vinna með LanguageTool og búa til notendaviðmót)
Khvorov Alexander (vinna með LanguageTool og hámarka frammistöðu)
Sadovnikov Alexander (stuðningur við að flokka álagningarmál og kóða)

Við höfum þróað viðbót fyrir IntelliJ IDEA sem athugar ýmsa texta (athugasemdir og skjöl, bókstafslínur í kóða, texta sem er sniðinn í Markdown eða XML merkingu) fyrir málfræðilega, stafsetningu og stílfræðilega nákvæmni (á ensku er þetta kallað prófarkalestur).

Hugmyndin með verkefninu var að stækka staðlaða villuleit IntelliJ IDEA í mælikvarða málfræði, til að gera eins konar málfræði inni í IDE.

Þú getur séð hvað gerðist по ссылке.

Jæja, hér að neðan munum við tala nánar um getu viðbótarinnar, sem og erfiðleikana sem komu upp við stofnun þess.

Hvatning

Það eru margar vörur hannaðar til að skrifa texta á náttúrulegum tungumálum, en skjöl og athugasemdir við kóða eru oftast skrifaðar í þróunarumhverfi. Á sama tíma, IDEs gera frábært starf við að finna villur í kóða, en henta illa fyrir texta á náttúrulegum tungumálum. Þetta gerir það mjög auðvelt að gera mistök í málfræði, greinarmerkjum eða stíl án þess að þróunarumhverfið bendi á þær. Það er mikilvægast að gera mistök við að skrifa notendaviðmótið, þar sem þetta hefur ekki aðeins áhrif á skiljanleika kóðans, heldur einnig notendur þróaða forritsins sjálfir.

Eitt vinsælasta og þróaðasta þróunarumhverfið er IntelliJ IDEA, auk IDE sem byggjast á IntelliJ pallinum. IntelliJ Platform er nú þegar með innbyggðan villuleit, en hann losnar ekki við jafnvel einföldustu málfræðivillur. Við ákváðum að samþætta eitt af vinsælustu náttúrumálgreiningarkerfunum í IntelliJ IDEA.

Framkvæmd

Hackathon DevDays'19 (hluti 2): hljóðskilaboðaþáttur fyrir símskeyti og málfræðiskoðun í IntelliJ IDEAVið settum okkur ekki það verkefni að búa til okkar eigin textastaðfestingarkerfi, svo við notuðum núverandi lausn. Heppilegasti kosturinn reyndist vera Tungumálatól. Leyfið gerði okkur kleift að nota það frjálslega í okkar tilgangi: það er ókeypis, skrifað í Java og opinn uppspretta. Að auki styður það 25 tungumál og hefur verið í þróun í meira en fimmtán ár. Þrátt fyrir hreinskilni sína er LanguageTool alvarlegur keppinautur við greiddar textastaðfestingarlausnir og sú staðreynd að það getur virkað á staðnum er bókstaflega drápseiginleikinn.

Viðbótarkóðinn er í geymslur á GitHub. Allt verkefnið var skrifað í Kotlin með smá viðbót af Java fyrir HÍ. Í hackathoninu tókst okkur að innleiða stuðning fyrir Markdown, JavaDoc, HTML og Plain Text. Eftir hackathonið bætti stór uppfærsla við stuðningi við XML, strengjabókstafi í Java, Kotlin og Python og villuleit.

Erfiðleikar

Nokkuð fljótt áttuðum við okkur á því að ef við færum allan texta í LanguageTool til skoðunar í hvert skipti, þá mun IDEA viðmótið frýs á meira eða minna alvarlegum texta, þar sem skoðunin sjálf lokar fyrir flæði HÍ. Vandamálið var leyst með `ProgressManager.checkCancelled` ávísuninni - þessi aðgerð gefur undantekningu ef IDEA telur að það sé kominn tími til að hætta við skoðun.

Þetta útilokaði algjörlega frystingar, en það er ómögulegt að nota: textann tekur mjög langan tíma að vinna. Þar að auki, í okkar tilfelli, breytist oftast mjög lítill hluti textans og við viljum vista niðurstöðurnar einhvern veginn. Það var einmitt það sem við gerðum. Til þess að athuga ekki allt í hvert skipti, skiptum við textanum á ákveðinn hátt í hluta og merktum aðeins við þá sem höfðu breyst. Þar sem textarnir geta verið stórir og við vildum ekki hlaða skyndiminni, geymdum við ekki textana sjálfa, heldur kjötkássa þeirra. Þetta gerði viðbótinni kleift að virka vel, jafnvel á stórum skrám.

LanguageTool styður meira en 25 tungumál, en ólíklegt er að einn notandi þurfi þau öll. Ég vildi gefa kost á að hlaða niður bókasöfnum fyrir ákveðið tungumál sé þess óskað (ef þú hakar við það í HÍ). Við innleiddum þetta meira að segja en það reyndist of flókið og óáreiðanlegt. Sérstaklega þurftum við að hlaða LanguageTool með nýju setti af tungumálum með því að nota sérstakan classloader og frumstilla það síðan vandlega. Á sama tíma voru öll söfnin í .m2 notendageymslu og við hverja byrjun þurftum við að athuga heilleika þeirra. Á endanum ákváðum við að ef notendur ættu í vandræðum með stærð viðbótarinnar, þá myndum við útvega sérstaka viðbót fyrir nokkur af vinsælustu tungumálunum.

Eftir hackathonið

Hackathoninu lauk en vinnan við viðbótina hélt áfram með þrengra lið. Ég vildi styðja strengi, athugasemdir og jafnvel tungumálasmíðar eins og breytuheiti og bekkjarheiti. Eins og er er þetta aðeins stutt fyrir Java, Kotlin og Python, en við vonum að þessi listi muni stækka. Við höfum lagað mikið af litlum villum og orðið samhæfara við innbyggða villuleit Idea. Að auki hefur XML stuðningur og villuleit birst. Allt þetta er að finna í seinni útgáfunni sem við birtum nýlega.

Hvað er næst?

Slík viðbót getur verið gagnleg ekki aðeins fyrir forritara, heldur einnig fyrir tæknilega rithöfunda (vinnur oft til dæmis með XML í IDE). Á hverjum degi þurfa þeir að vinna með náttúrulegt tungumál, án þess að hafa aðstoðarmann í formi ritstjóraráðs um hugsanlegar villur. Viðbótin okkar veitir slíkar vísbendingar og gerir það með mikilli nákvæmni.
Við ætlum að þróa viðbótina, bæði með því að bæta við nýjum tungumálum og með því að kanna almenna nálgun við að skipuleggja textaskoðun. Strax áætlanir okkar fela í sér innleiðingu á stílsniðum (reglusett sem skilgreina stílleiðbeiningar fyrir texta, til dæmis „ekki skrifa td, heldur skrifa allt form“), stækka orðabókina og bæta notendaviðmótið (sérstaklega, við viljum gefa notandanum ekki bara tækifæri til að hunsa orð, heldur bæta því við orðabókina og tilgreina orðalagið).

Heimild: www.habr.com

Bæta við athugasemd