Hackathon DevDays'19 (časť 2): analyzátor zvukových správ pre telegram a kontrolu gramatiky v IntelliJ IDEA

Pokračujeme v rozprávaní o projektoch jarného hackathonu DevDays, do ktorého sa zapojili študenti magisterského programu "Vývoj softvéru / softvérové ​​inžinierstvo".

Hackathon DevDays'19 (časť 2): analyzátor zvukových správ pre telegram a kontrolu gramatiky v IntelliJ IDEA

Mimochodom, radi by sme pozvali čitateľov, aby sa pridali VK skupina študentov magisterského štúdia. V ňom budeme zverejňovať najnovšie správy o nábore a štúdiu. Video z dňa otvorených dverí nájdete aj v skupine. Pripomíname: akcia sa uskutoční 29. apríla, podrobnosti on-line.

Analyzátor hlasových správ Telegram Desktop

Hackathon DevDays'19 (časť 2): analyzátor zvukových správ pre telegram a kontrolu gramatiky v IntelliJ IDEA

Autor myšlienky
Khoroshev Artyom

Štruktúra príkazov

Khoroshev Artem – projektový manažér/vývojár/QA
Eliseev Anton – obchodný analytik/marketingový špecialista
Maria Kuklina – dizajnérka/vývojárka používateľského rozhrania
Bakhvalov Pavel – dizajnér/vývojár/QA používateľského rozhrania

Telegram je z nášho pohľadu moderný a pohodlný messenger a jeho PC verzia je populárna a open source, čo umožňuje jeho úpravu. Klient ponúka pomerne bohatú funkcionalitu. Okrem štandardných textových správ obsahuje hlasové hovory, video správy a hlasové správy. A práve tie druhé občas svojmu príjemcovi prinášajú nepríjemnosti. Pri počítači alebo notebooku často nie je možné počúvať hlasovú správu. Môže sa vyskytnúť okolitý hluk, chýbajú vám slúchadlá alebo nechcete, aby niekto počul obsah správy. Takéto problémy sa takmer nikdy nevyskytujú, ak používate Telegram na smartfóne, pretože si ho môžete jednoducho priložiť k uchu, na rozdiel od notebooku alebo počítača. Tento problém sme sa snažili vyriešiť.

Cieľom nášho projektu na DevDays bolo pridať do desktopového klienta Telegram (ďalej len Telegram Desktop) možnosť prekladať prijaté hlasové správy do textu.

Všetky analógy sú v súčasnosti roboty, ktorým môžete poslať zvukovú správu a prijať textovú odpoveď. Nie sme s tým veľmi spokojní: posielanie správy robotovi nie je príliš pohodlné, chceli by sme mať natívnu funkčnosť. Okrem toho je každý robot treťou stranou, ktorá pôsobí ako sprostredkovateľ medzi rozhraním API na rozpoznávanie reči a používateľom, čo je prinajmenšom nebezpečné.

Ako už bolo uvedené, telegramový počítač má dve významné výhody: jednoduchosť a rýchlosť prevádzky. A to nie je náhoda, pretože je celý napísaný v C++. A keďže sme sa rozhodli pridať novú funkcionalitu priamo klientovi, museli sme ju vyvinúť v C++.

Hackathon DevDays'19 (časť 2): analyzátor zvukových správ pre telegram a kontrolu gramatiky v IntelliJ IDEAV našom tíme boli 4 ľudia. Spočiatku dvaja ľudia hľadali vhodnú knižnicu na rozpoznávanie reči, jedna osoba študovala zdrojový kód Telegram-desktop, druhá nasadzovala projekt zostavovania Telegram Desktop. Neskôr boli všetci zaneprázdnení opravovaním používateľského rozhrania a ladením.

Zdalo sa, že implementácia zamýšľanej funkcie nebude zložitá, ale ako vždy, vyskytli sa ťažkosti.

Riešenie problému pozostávalo z dvoch nezávislých čiastkových úloh: výber vhodného nástroja na rozpoznávanie reči a implementácia používateľského rozhrania pre novú funkcionalitu.

Pri výbere knižnice na rozpoznávanie hlasu sme museli okamžite opustiť všetky offline API, pretože jazykové modely zaberajú veľa miesta. Hovoríme však len o jednom jazyku. Bolo jasné, že budeme musieť použiť online API. Neskôr sa ukázalo, že služby rozpoznávania reči takých gigantov ako Google, Yandex a Microsoft nie sú vôbec zadarmo a budeme sa musieť uspokojiť so skúšobnou dobou. V dôsledku toho bol zvolený Google Speech-To-Text, pretože vám umožňuje získať token za používanie služby, ktorý bude trvať celý rok.

Druhý problém, na ktorý sme narazili, súvisí s niektorými nedostatkami C++ – zoo rôznych knižníc pri absencii centralizovaného úložiska. Stáva sa, že Telegram Desktop závisí od mnohých ďalších knižníc špecifických pre verziu. Oficiálne úložisko má inštrukcie na zostavenie projektu. A tiež veľké množstvo otvorených problémov o problémoch so zostavením, napr čas и два. Ukázalo sa, že všetky problémy súviseli so skutočnosťou, že zostavovací skript bol napísaný pre Ubuntu 14.04 a aby bolo možné úspešne zostaviť telegram pod Ubuntu 18.04, museli byť vykonané zmeny.

Samotný Telegram Desktop sa skladá pomerne dlho: na notebooku s Intel Core i5-7200U trvá kompletné zostavenie (príznak -j 4) so ​​všetkými závislosťami asi tri hodiny. Z toho asi 30 minút zaberie prepojenie samotného klienta (neskôr sa ukázalo, že v konfigurácii Debug trvá prepojenie približne 10 minút), no po vykonaní zmien je potrebné zakaždým zopakovať fázu prepojenia.

Napriek problémom sa podarilo zrealizovať vytvorenú myšlienku, ako aj aktualizáciu zostaviť skript pre Ubuntu 18.04. Ukážku práce si môžete pozrieť na odkaz. Zahŕňame aj niekoľko animácií. Vedľa všetkých hlasových správ sa objavilo tlačidlo, ktoré vám umožňuje preložiť správu do textu. Kliknutím pravým tlačidlom myši môžete dodatočne určiť jazyk, ktorý sa bude používať na vysielanie. Autor: odkaz klient k dispozícii na stiahnutie.

Úložisko.

Podľa nášho názoru sa ukázalo, že ide o dobrý dôkaz o funkčnosti, ktorý by vyhovoval mnohým používateľom. Dúfame, že to uvidíme v budúcich vydaniach Telegram Desktop.

Vylepšená podpora prirodzeného jazyka v IntelliJ IDEA

Hackathon DevDays'19 (časť 2): analyzátor zvukových správ pre telegram a kontrolu gramatiky v IntelliJ IDEA

Autor myšlienky

Tankov Vladislav

Štruktúra príkazov

Tankov Vladislav (vedúci tímu, spolupracuje s LanguageTool a IntelliJ IDEA)
Nikita Sokolov (pracuje s LanguageTool a vytvára používateľské rozhranie)
Khvorov Alexander (práca s LanguageTool a optimalizácia výkonu)
Sadovnikov Alexander (podpora analýzy značkovacích jazykov a kódu)

Vyvinuli sme plugin pre IntelliJ IDEA, ktorý kontroluje gramatickú, pravopisnú a štylistickú presnosť rôznych textov (komentáre a dokumentáciu, doslovné riadky v kóde, text formátovaný v Markdown alebo XML značkách) (v angličtine sa to nazýva korektúra).

Myšlienkou projektu bolo rozšíriť štandardnú kontrolu pravopisu IntelliJ IDEA na úroveň gramatiky, aby sa v IDE vytvorila určitá gramatika.

Môžete vidieť, čo sa stalo по ссылке.

Nižšie budeme hovoriť podrobnejšie o možnostiach doplnku, ako aj o ťažkostiach, ktoré sa vyskytli pri jeho vytváraní.

Motivácia

Existuje mnoho produktov určených na písanie textu v prirodzených jazykoch, ale dokumentácia a komentáre ku kódu sa najčastejšie píšu vo vývojových prostrediach. IDE zároveň odvádzajú vynikajúcu prácu pri hľadaní chýb v kóde, ale nie sú vhodné pre texty v prirodzených jazykoch. Vďaka tomu je veľmi ľahké robiť chyby v gramatike, interpunkcii alebo štýle bez toho, aby na ne vývojové prostredie upozornilo. Najkritickejšie je urobiť chybu pri písaní používateľského rozhrania, pretože to ovplyvní nielen zrozumiteľnosť kódu, ale aj samotných používateľov vyvíjanej aplikácie.

Jedným z najpopulárnejších a najrozvinutejších vývojových prostredí je IntelliJ IDEA, ako aj IDE založené na platforme IntelliJ. IntelliJ Platform už má zabudovanú kontrolu pravopisu, no nezbaví sa ani tých najjednoduchších gramatických chýb. Rozhodli sme sa integrovať jeden z populárnych systémov analýzy prirodzeného jazyka do IntelliJ IDEA.

Реализация

Hackathon DevDays'19 (časť 2): analyzátor zvukových správ pre telegram a kontrolu gramatiky v IntelliJ IDEANedali sme si za úlohu vytvoriť vlastný systém overovania textu, preto sme použili existujúce riešenie. Ako najvhodnejšia možnosť sa ukázala Jazykový nástroj. Licencia nám umožnila voľne ho používať na naše účely: je bezplatný, napísaný v jazyku Java a má otvorený zdrojový kód. Okrem toho podporuje 25 jazykov a vyvíja sa už viac ako pätnásť rokov. Napriek svojej otvorenosti je LanguageTool vážnym konkurentom plateným riešeniam overovania textu a skutočnosť, že môže fungovať lokálne, je doslova jeho zabijáckou vlastnosťou.

Kód pluginu je in úložiská na GitHub. Celý projekt bol napísaný v Kotline s malým prídavkom Java pre používateľské rozhranie. Počas hackathonu sa nám podarilo implementovať podporu pre Markdown, JavaDoc, HTML a Plain Text. Po hackathone veľká aktualizácia pridala podporu pre XML, reťazcové literály v jazykoch Java, Kotlin a Python a kontrolu pravopisu.

Ťažkosti

Pomerne rýchlo sme si uvedomili, že ak zakaždým vložíme všetok text do LanguageTool na kontrolu, potom rozhranie IDEA zamrzne na akomkoľvek viac či menej závažnom texte, pretože samotná kontrola blokuje tok používateľského rozhrania. Problém bol vyriešený kontrolou `ProgressManager.checkCancelled` - táto funkcia vyvolá výnimku, ak sa IDEA domnieva, že je čas inšpekciu prerušiť.

Tým sa úplne odstránili zamrznutia, ale nie je možné ho použiť: spracovanie textu trvá veľmi dlho. Navyše, v našom prípade sa najčastejšie mení veľmi malá časť textu a výsledky chceme nejako ukladať do kešky. Presne to sme urobili. Aby sme zakaždým nekontrolovali všetko, deterministicky sme text rozdelili na časti a skontrolovali len tie, ktoré sa zmenili. Keďže texty môžu byť veľké a nechceli sme načítať vyrovnávaciu pamäť, neuložili sme samotné texty, ale ich hash. To umožnilo, aby plugin fungoval hladko aj na veľkých súboroch.

LanguageTool podporuje viac ako 25 jazykov, ale je nepravdepodobné, že by ich niektorý používateľ potreboval všetky. Chcel som dať možnosť stiahnuť si knižnice pre konkrétny jazyk na požiadanie (ak to zaškrtnete v používateľskom rozhraní). Dokonca sme to aj implementovali, ale ukázalo sa, že je to príliš komplikované a nespoľahlivé. Najmä sme museli načítať LanguageTool s novou sadou jazykov pomocou samostatného classloaderu a potom ho opatrne inicializovať. Všetky knižnice boli zároveň v užívateľskom .m2 úložisku a pri každom spustení sme museli kontrolovať ich integritu. Nakoniec sme sa rozhodli, že ak budú mať používatelia problémy s veľkosťou pluginu, poskytneme samostatný plugin pre niekoľko najpopulárnejších jazykov.

Po hackathone

Hackathon sa skončil, no práce na plugine pokračovali s užším tímom. Chcel som podporovať reťazce, komentáre a dokonca aj jazykové konštrukcie, ako sú názvy premenných a tried. V súčasnosti je to podporované iba pre Java, Kotlin a Python, ale dúfame, že tento zoznam bude rásť. Opravili sme veľa malých chýb a stali sme sa kompatibilnejšími so vstavanou kontrolou pravopisu Idea. Okrem toho sa objavila podpora XML a kontrola pravopisu. To všetko nájdete v druhej verzii, ktorú sme zverejnili nedávno.

Čo bude ďalej?

Takýto plugin môže byť užitočný nielen pre vývojárov, ale aj pre technických autorov (často pracujúcich napríklad s XML v IDE). Každý deň musia pracovať s prirodzeným jazykom bez toho, aby mali asistenta v podobe tipov redaktora na možné chyby. Náš plugin poskytuje takéto rady a robí to s vysokým stupňom presnosti.
Plánujeme vyvinúť doplnok pridaním nových jazykov a preskúmaním všeobecného prístupu k organizácii kontroly textu. Medzi naše najbližšie plány patrí implementácia štylistických profilov (súbory pravidiel, ktoré definujú štýlovú príručku pre text, napr. „nepíšte napr., ale píšte celú formu“), rozšírenie slovníka a zlepšenie používateľského rozhrania (najmä, chceme dať používateľovi príležitosť nielen ignorovať slovo, ale pridať ho do slovníka s uvedením slovného druhu).

Zdroj: www.habr.com

Pridať komentár