Hackathon DevDays'19 (2. del): razčlenjevalnik zvočnih sporočil za Telegram in preverjanje slovnice v IntelliJ IDEA

Še naprej govorimo o projektih spomladanskega hackathona DevDays, v katerem so sodelovali študenti magistrskega programa "Razvoj programske opreme/programski inženiring".

Hackathon DevDays'19 (2. del): razčlenjevalnik zvočnih sporočil za Telegram in preverjanje slovnice v IntelliJ IDEA

Mimogrede, bralce bi radi povabili k sodelovanju VK-skupina magistrskih študentov. V njem bomo objavljali najnovejše novice o zaposlovanju in študiju. Posnetek z dneva odprtih vrat najdete tudi v skupini. Spomnimo vas: dogodek bo 29. aprila, podrobnosti dosegljiv.

Razčlenjevalnik glasovnih sporočil Telegram Desktop

Hackathon DevDays'19 (2. del): razčlenjevalnik zvočnih sporočil za Telegram in preverjanje slovnice v IntelliJ IDEA

Avtor ideje
Khoroshev Artyom

Poravnaj

Khoroshev Artem – vodja projekta/razvijalec/QA
Eliseev Anton – poslovni analitik/strokovnjak za trženje
Maria Kuklina – oblikovalka/razvijalka uporabniškega vmesnika
Bakhvalov Pavel – UI oblikovalec/razvijalec/QA

Z našega vidika je Telegram sodoben in priročen messenger, njegova računalniška različica pa je priljubljena in odprtokodna, kar omogoča njeno spreminjanje. Stranka ponuja precej bogato funkcionalnost. Poleg standardnih besedilnih sporočil vsebuje glasovne klice, video sporočila in glasovna sporočila. In prav slednji včasih prejemniku prinašajo neprijetnosti. Pogosto ni mogoče poslušati glasovnega sporočila, ko ste za računalnikom ali prenosnikom. Morda je v okolju hrup, ni slušalk ali pa ne želite, da bi kdo slišal vsebino sporočila. Takšne težave se skoraj nikoli ne pojavijo, če Telegram uporabljate na pametnem telefonu, saj ga lahko preprosto prinesete k ušesu, za razliko od prenosnika ali računalnika. Poskušali smo rešiti ta problem.

Cilj našega projekta na DevDays je bil dodati možnost prevajanja prejetih glasovnih sporočil v besedilo namiznemu odjemalcu Telegram (v nadaljevanju Telegram Desktop).

Vsi analogi so trenutno roboti, ki jim lahko pošljete zvočno sporočilo in v odgovor prejmete besedilo. S tem nismo preveč zadovoljni: posredovanje sporočila botu ni zelo priročno; radi bi imeli izvorno funkcionalnost. Poleg tega je vsak bot tretja oseba, ki deluje kot posrednik med API-jem za prepoznavanje govora in uporabnikom, kar je vsaj nevarno.

Kot smo že omenili, ima telegram-desktop dve pomembni prednosti: enostavnost in hitrost delovanja. In to ni naključje, saj je v celoti napisan v C++. In ker smo se odločili dodati novo funkcionalnost neposredno odjemalcu, smo jo morali razviti v C++.

Hackathon DevDays'19 (2. del): razčlenjevalnik zvočnih sporočil za Telegram in preverjanje slovnice v IntelliJ IDEAV naši ekipi so bili 4 ljudje. Na začetku sta dve osebi iskali primerno knjižnico za prepoznavanje govora, ena oseba je preučevala izvorno kodo namizja Telegram, druga je uvajala gradbeni projekt Telegram Desktop. Kasneje so bili vsi zaposleni s popravljanjem uporabniškega vmesnika in odpravljanjem napak.

Zdelo se je, da implementacija predvidene funkcionalnosti ne bo težka, a kot vedno so se pojavile težave.

Rešitev problema je bila sestavljena iz dveh neodvisnih podnalog: izbire ustreznega orodja za prepoznavanje govora in implementacije uporabniškega vmesnika za nove funkcionalnosti.

Pri izbiri knjižnice za prepoznavanje glasu smo morali takoj opustiti vse API-je brez povezave, saj jezikovni modeli zavzamejo veliko prostora. Ampak govorimo samo o enem jeziku. Postalo je jasno, da bomo morali uporabiti spletni API. Kasneje se je izkazalo, da storitve prepoznavanja govora takšnih velikanov, kot so Google, Yandex in Microsoft, sploh niso brezplačne in se bomo morali zadovoljiti s poskusnim obdobjem. Kot rezultat je bil izbran Google Speech-To-Text, ker vam omogoča pridobitev žetona za uporabo storitve, ki bo trajal celo leto.

Druga težava, na katero smo naleteli, je povezana z nekaterimi pomanjkljivostmi C++ - živalski vrt različnih knjižnic v odsotnosti centraliziranega repozitorija. Tako se zgodi, da je Telegram Desktop odvisen od številnih drugih knjižnic, specifičnih za različico. Uradno skladišče ima Navodila za sestavo projekta. In tudi veliko število odprtih vprašanj o težavah pri gradnji, na primer čas и два. Izkazalo se je, da so vse težave povezane z dejstvom, da je bil skript za gradnjo napisan za Ubuntu 14.04 in da bi uspešno zgradili telegram pod Ubuntu 18.04, je bilo treba narediti spremembe.

Samo Telegram Desktop se sestavi precej dolgo: na prenosnem računalniku z Intel Core i5-7200U celotna sestava (zastavica -j 4) z vsemi odvisnostmi traja približno tri ure. Od tega približno 30 minut vzame povezovanje samega odjemalca (kasneje se je izkazalo, da v konfiguraciji Debug povezovanje traja približno 10 minut), vendar je treba fazo povezovanja ponoviti vsakič po spremembah.

Kljub težavam smo zamišljeno idejo uspeli uresničiti, pa tudi posodobiti zgraditi skript za Ubuntu 18.04. Predstavitev dela si lahko ogledate na povezava. Vključujemo tudi več animacij. Poleg vseh glasovnih sporočil se je pojavil gumb, ki vam omogoča, da sporočilo prevedete v besedilo. Z desnim klikom lahko dodatno določite jezik, ki bo uporabljen za oddajanje. Avtor: povezava odjemalec na voljo za prenos.

Repozitorij.

Po našem mnenju se je izkazalo za dober dokaz funkcionalnosti, ki bi bil primeren za številne uporabnike. Upamo, da ga bomo videli v prihodnjih izdajah Telegram Desktop.

Izboljšana podpora za naravni jezik v IntelliJ IDEA

Hackathon DevDays'19 (2. del): razčlenjevalnik zvočnih sporočil za Telegram in preverjanje slovnice v IntelliJ IDEA

Avtor ideje

Tankov Vladislav

Poravnaj

Tankov Vladislav (vodja ekipe, delo z LanguageTool in IntelliJ IDEA)
Nikita Sokolov (delo z LanguageTool in ustvarjanje uporabniškega vmesnika)
Khvorov Alexander (delo z LanguageTool in optimizacija delovanja)
Sadovnikov Alexander (podpora za razčlenjevanje označevalnih jezikov in kode)

Razvili smo vtičnik za IntelliJ IDEA, ki preverja slovnično, črkovalno in slogovno natančnost različnih besedil (komentarji in dokumentacija, dobesedne vrstice v kodi, besedilo, oblikovano v Markdown ali XML markup) (v angleščini se to imenuje lektoriranje).

Ideja projekta je bila razširiti standardno preverjanje črkovanja IntelliJ IDEA na lestvico Grammarly, da bi naredili neke vrste Grammarly znotraj IDE.

Lahko vidite, kaj se je zgodilo по ссылке.

No, spodaj bomo podrobneje govorili o zmožnostih vtičnika, pa tudi o težavah, ki so se pojavile med njegovim ustvarjanjem.

Motivacija

Obstaja veliko izdelkov, zasnovanih za pisanje besedil v naravnih jezikih, vendar se dokumentacija in komentarji kode najpogosteje pišejo v razvojnih okoljih. Hkrati IDE odlično opravljajo delo pri iskanju napak v kodi, vendar so slabo primerni za besedila v naravnih jezikih. Zaradi tega je zelo enostavno narediti napake v slovnici, ločilih ali slogu, ne da bi jih razvojno okolje opozorilo. Najbolj kritična je napaka pri pisanju uporabniškega vmesnika, saj bo to vplivalo ne le na razumljivost kode, temveč tudi na same uporabnike razvite aplikacije.

Eno najbolj priljubljenih in razvitih razvojnih okolij je IntelliJ IDEA, pa tudi IDE, ki temeljijo na platformi IntelliJ. Platforma IntelliJ že ima vgrajen črkovalnik, ki pa se ne znebi niti najpreprostejših slovničnih napak. Odločili smo se, da v IntelliJ IDEA integriramo enega izmed priljubljenih sistemov za analizo naravnega jezika.

Реализация

Hackathon DevDays'19 (2. del): razčlenjevalnik zvočnih sporočil za Telegram in preverjanje slovnice v IntelliJ IDEANismo si zadali izdelave lastnega sistema za preverjanje besedila, zato smo uporabili obstoječo rešitev. Najprimernejša možnost se je izkazala Jezikovno orodje. Licenca nam je omogočila prosto uporabo za naše namene: je brezplačen, napisan v Javi in ​​odprtokoden. Poleg tega podpira 25 jezikov in se razvija že več kot petnajst let. Kljub svoji odprtosti je LanguageTool resna konkurenca plačljivim rešitvam za preverjanje besedila in dejstvo, da lahko deluje lokalno, je dobesedno njegova ubijalska funkcija.

Koda vtičnika je notri repozitorije na GitHubu. Celoten projekt je bil napisan v Kotlinu z majhnim dodatkom Jave za uporabniški vmesnik. Med hackathonom nam je uspelo implementirati podporo za Markdown, JavaDoc, HTML in Plain Text. Po hackathonu je velika posodobitev dodala podporo za XML, nizovne literale v Javi, Kotlin in Python ter preverjanje črkovanja.

Težave

Kar hitro smo ugotovili, da če vse besedilo vsakič posredujemo v pregled v LanguageTool, bo vmesnik IDEA zamrznil na vsakem bolj ali manj resnem besedilu, saj sam pregled blokira tok uporabniškega vmesnika. Težava je bila rešena s preverjanjem `ProgressManager.checkCancelled` - ta funkcija vrže izjemo, če IDEA meni, da je čas za prekinitev pregleda.

To je popolnoma odpravilo zamrznitve, vendar je nemogoče uporabiti: besedilo traja zelo dolgo za obdelavo. Poleg tega se v našem primeru največkrat spremeni zelo majhen del besedila in želimo rezultate nekako predpomniti. Točno to smo naredili. Da ne bi vsakič preverjali vsega, smo besedilo deterministično razdelili na dele in preverili le tiste, ki so se spremenili. Ker so lahko besedila velika in nismo želeli naložiti predpomnilnika, nismo shranili samih besedil, ampak njihove zgoščene vrednosti. To je omogočilo nemoteno delovanje vtičnika tudi pri velikih datotekah.

LanguageTool podpira več kot 25 jezikov, vendar je malo verjetno, da jih en uporabnik potrebuje vse. Želel sem dati možnost prenosa knjižnic za določen jezik na zahtevo (če to označite v uporabniškem vmesniku). To smo celo implementirali, a se je izkazalo za preveč zapleteno in nezanesljivo. Zlasti smo morali naložiti LanguageTool z novim naborom jezikov z uporabo ločenega nalagalnika razredov in ga nato skrbno inicializirati. Hkrati so bile vse knjižnice v uporabniškem repozitoriju .m2 in ob vsakem zagonu smo morali preveriti njihovo celovitost. Na koncu smo se odločili, da bomo, če bodo imeli uporabniki težave z velikostjo vtičnika, zagotovili ločen vtičnik za več najbolj priljubljenih jezikov.

Po hackathonu

Hackathon se je zaključil, vendar se je delo na vtičniku nadaljevalo z ožjo ekipo. Želel sem podpreti nize, komentarje in celo jezikovne konstrukcije, kot so imena spremenljivk in razredov. Trenutno je to podprto samo za Javo, Kotlin in Python, vendar upamo, da se bo ta seznam povečal. Popravili smo veliko majhnih napak in postali bolj združljivi z Ideinim vgrajenim črkovalnikom. Poleg tega sta se pojavila podpora za XML in preverjanje črkovanja. Vse to najdete v drugi različici, ki smo jo objavili pred kratkim.

Kaj sledi?

Tak vtičnik je lahko uporaben ne samo za razvijalce, ampak tudi za tehnične pisce (pogosto delajo na primer z XML v IDE). Vsak dan morajo delati z naravnim jezikom, ne da bi imeli pomočnika v obliki nasvetov urednika o morebitnih napakah. Naš vtičnik ponuja takšne namige in to z visoko stopnjo natančnosti.
Načrtujemo razvoj vtičnika, tako z dodajanjem novih jezikov kot z raziskovanjem splošnega pristopa k organiziranju preverjanja besedila. Naši bližnji načrti vključujejo implementacijo slogovnih profilov (sklopov pravil, ki določajo stilski vodnik za besedilo, na primer »ne piši npr., ampak piši celotno obliko«), razširitev slovarja in izboljšavo uporabniškega vmesnika (zlasti uporabniku želimo dati možnost, da ne le prezre besedo, ampak jo doda v slovar z navedbo dela govora).

Vir: www.habr.com

Dodaj komentar