Við höldum áfram að tala um verkefni vorhakkaþonsins DevDays þar sem nemendur meistaranámsins tóku þátt í
Að leiðarlokum viljum við bjóða lesendum að vera með
Telegram Desktop Voice Message Parser
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++.
Þ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ð
Þ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
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
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
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
Við settum okkur ekki það verkefni að búa til okkar eigin textastaðfestingarkerfi, svo við notuðum núverandi lausn. Heppilegasti kosturinn reyndist vera
Viðbótarkóðinn er í
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