DevDays'19 Hackathon (část 2): Parser hlasových zpráv pro kontrolu telegramů a gramatiky v IntelliJ IDEA

Pokračujeme v povídání o projektech jarního hackathonu DevDays, do kterého se zapojili studenti magisterského programu "Vývoj softwaru / softwarové inženýrství".

Hackathon DevDays'19 (část 2): analyzátor zvukových zpráv pro telegram a kontrolu gramatiky v IntelliJ IDEA

Mimochodem, rádi bychom pozvali čtenáře, aby se přidali VK skupina studentů magisterského studia. V něm budeme zveřejňovat nejnovější zprávy o náboru a studiu. Video ze dne otevřených dveří najdete také ve skupině. Připomínáme: akce se koná 29. dubna, podrobnosti on-line.

Analyzátor hlasových zpráv Telegram Desktop

Hackathon DevDays'19 (část 2): analyzátor zvukových zpráv pro telegram a kontrolu gramatiky v IntelliJ IDEA

Autor myšlenky
Chorošev Arťom

Příkazová struktura

Khoroshev Artem – projektový manažer/vývojář/QA
Eliseev Anton – obchodní analytik/marketingový specialista
Maria Kuklina – návrhářka/vývojářka uživatelského rozhraní
Bakhvalov Pavel – UI designér/vývojář/QA

Telegram je z našeho pohledu moderní a pohodlný messenger a jeho PC verze je oblíbená a open source, což umožňuje jeho úpravu. Klient nabízí poměrně bohatou funkcionalitu. Kromě standardních textových zpráv obsahuje hlasové hovory, video zprávy a hlasové zprávy. A právě ty druhé někdy přinášejí svému příjemci nepříjemnosti. Často není možné poslouchat hlasovou zprávu u počítače nebo notebooku. Může se objevit okolní hluk, chybí sluchátka nebo nechcete, aby někdo slyšel obsah zprávy. Takové problémy téměř nikdy nevznikají, pokud používáte Telegram na smartphonu, protože jej můžete jednoduše přiložit k uchu, na rozdíl od notebooku nebo PC. Pokusili jsme se tento problém vyřešit.

Cílem našeho projektu na DevDays bylo přidat do desktopového klienta Telegram (dále jen Telegram Desktop) možnost překládat přijaté hlasové zprávy do textu.

Všechny analogy jsou v tuto chvíli roboty, kterým můžete poslat zvukovou zprávu a přijmout textovou odpověď. Nejsme s tím příliš spokojeni: přeposílání zprávy robotovi není příliš pohodlné, rádi bychom měli nativní funkcionalitu. Kromě toho je každý bot třetí stranou, která působí jako prostředník mezi rozhraním API pro rozpoznávání řeči a uživatelem, což je přinejmenším nebezpečné.

Jak bylo uvedeno dříve, telegram-desktop má dvě významné výhody: snadnost a rychlost provozu. A to není náhoda, protože je celý napsaný v C++. A jelikož jsme se rozhodli přidat novou funkcionalitu přímo klientovi, museli jsme ji vyvinout v C++.

Hackathon DevDays'19 (část 2): analyzátor zvukových zpráv pro telegram a kontrolu gramatiky v IntelliJ IDEAV našem týmu byli 4 lidé. Zpočátku dva lidé hledali vhodnou knihovnu pro rozpoznávání řeči, jedna osoba studovala zdrojový kód Telegram-desktop, další nasazovala projekt sestavení Telegram Desktop. Později byli všichni zaneprázdněni opravou uživatelského rozhraní a laděním.

Zdálo se, že implementace zamýšlené funkce nebude obtížná, ale jako vždy se objevily potíže.

Řešení problému sestávalo ze dvou nezávislých dílčích úkolů: výběr vhodného nástroje pro rozpoznávání řeči a implementace uživatelského rozhraní pro novou funkcionalitu.

Při výběru knihovny pro rozpoznávání hlasu jsme okamžitě museli opustit všechna offline API, protože jazykové modely zabírají spoustu místa. Ale to mluvíme jen o jednom jazyce. Bylo jasné, že budeme muset použít online API. Později se ukázalo, že služby rozpoznávání řeči takových gigantů, jako jsou Google, Yandex a Microsoft, nejsou vůbec zdarma a budeme se muset spokojit se zkušební dobou. V důsledku toho byl vybrán Google Speech-To-Text, protože umožňuje získat token za používání služby, který bude trvat celý rok.

Druhý problém, na který jsme narazili, souvisí s některými nedostatky C++ – zoo různých knihoven při absenci centralizovaného úložiště. Stává se, že Telegram Desktop závisí na mnoha dalších knihovnách specifických pro verzi. Oficiální úložiště má instrukce pro sestavení projektu. A také velké množství otevřených problémů například o problémech se stavbou čas и два. Ukázalo se, že všechny problémy souvisely se skutečností, že skript sestavení byl napsán pro Ubuntu 14.04, a aby bylo možné úspěšně sestavit telegram pod Ubuntu 18.04, musely být provedeny změny.

Samotný Telegram Desktop se sestavuje poměrně dlouho: na notebooku s Intel Core i5-7200U trvá kompletní sestavení (příznak -j 4) se všemi závislostmi zhruba tři hodiny. Z toho asi 30 minut zabere propojení samotného klienta (později se ukázalo, že v konfiguraci Debug propojení trvá asi 10 minut), ale fáze propojení se musí po provedení změn pokaždé opakovat.

I přes problémy se podařilo vymyšlený nápad zrealizovat, stejně jako aktualizaci sestavení skriptu pro Ubuntu 18.04. Ukázku práce můžete vidět na odkaz. Zahrnujeme také několik animací. Vedle všech hlasových zpráv se objevilo tlačítko, které umožňuje přeložit zprávu do textu. Kliknutím pravým tlačítkem myši můžete dodatečně určit jazyk, který bude použit pro vysílání. Podle odkaz klient k dispozici ke stažení.

Úložiště.

Podle našeho názoru se ukázalo, že jde o dobrý Proof of Concept funkčnosti, který by vyhovoval mnoha uživatelům. Doufáme, že to uvidíme v budoucích verzích Telegram Desktop.

Vylepšená podpora přirozeného jazyka v IntelliJ IDEA

Hackathon DevDays'19 (část 2): analyzátor zvukových zpráv pro telegram a kontrolu gramatiky v IntelliJ IDEA

Autor myšlenky

Tankov Vladislav

Příkazová struktura

Tankov Vladislav (vedoucí týmu, spolupracuje s LanguageTool a IntelliJ IDEA)
Nikita Sokolov (pracuje s LanguageTool a vytváří uživatelské rozhraní)
Khvorov Alexander (práce s LanguageTool a optimalizace výkonu)
Sadovnikov Alexander (podpora analýzy značkovacích jazyků a kódu)

Vyvinuli jsme plugin pro IntelliJ IDEA, který kontroluje různé texty (komentáře a dokumentaci, doslovné řádky v kódu, text formátovaný v Markdown nebo XML markup) na gramatickou, pravopisnou a stylistickou správnost (v angličtině se tomu říká korektura).

Myšlenkou projektu bylo rozšířit standardní kontrolu pravopisu IntelliJ IDEA na měřítko Grammarly, vytvořit jakousi Grammarly uvnitř IDE.

Můžete vidět, co se stalo по ссылке.

Níže budeme hovořit podrobněji o možnostech pluginu a také o obtížích, které se vyskytly při jeho vytváření.

Motivace

Existuje mnoho produktů určených pro psaní textu v přirozených jazycích, ale dokumentace a komentáře ke kódu se nejčastěji píší ve vývojových prostředích. IDE zároveň odvádějí vynikající práci při hledání chyb v kódu, ale špatně se hodí pro texty v přirozených jazycích. Díky tomu je velmi snadné dělat chyby v gramatice, interpunkci nebo stylu, aniž by na ně vývojové prostředí upozorňovalo. Nejkritičtější je udělat chybu při psaní uživatelského rozhraní, protože to ovlivní nejen srozumitelnost kódu, ale také samotné uživatele vyvíjené aplikace.

Jedním z nejpopulárnějších a nejrozvinutějších vývojových prostředí je IntelliJ IDEA, stejně jako IDE založené na platformě IntelliJ. IntelliJ Platform již má vestavěnou kontrolu pravopisu, ale nezbaví se ani těch nejjednodušších gramatických chyb. Rozhodli jsme se integrovat jeden z oblíbených systémů analýzy přirozeného jazyka do IntelliJ IDEA.

uskutečnění

Hackathon DevDays'19 (část 2): analyzátor zvukových zpráv pro telegram a kontrolu gramatiky v IntelliJ IDEANedali jsme si za úkol vytvořit vlastní systém ověřování textu, proto jsme využili existující řešení. Jako nejvhodnější se ukázala varianta Jazykový nástroj. Licence nám umožnila jej volně používat pro naše účely: je zdarma, napsaný v Javě a open-source. Kromě toho podporuje 25 jazyků a vyvíjí se více než patnáct let. Navzdory své otevřenosti je LanguageTool vážným konkurentem placených řešení pro ověřování textu a skutečnost, že může fungovat lokálně, je doslova jeho zabijáckou funkcí.

Kód pluginu je in úložiště na GitHubu. Celý projekt byl napsán v Kotlinu s malým přídavkem Javy pro uživatelské rozhraní. Během hackathonu se nám podařilo implementovat podporu pro Markdown, JavaDoc, HTML a Plain Text. Po hackathonu velká aktualizace přidala podporu pro XML, řetězcové literály v Javě, Kotlinu a Pythonu a kontrolu pravopisu.

Potíže

Poměrně rychle jsme si uvědomili, že pokud pokaždé vložíme veškerý text do LanguageTool ke kontrole, pak rozhraní IDEA zamrzne na jakémkoli více či méně závažném textu, protože samotná kontrola blokuje tok uživatelského rozhraní. Problém byl vyřešen pomocí kontroly `ProgressManager.checkCancelled` - tato funkce vyvolá výjimku, pokud se IDEA domnívá, že je čas přerušit kontrolu.

To zcela odstranilo zamrzání, ale nelze jej použít: zpracování textu trvá velmi dlouho. Navíc v našem případě se nejčastěji mění velmi malá část textu a výsledky chceme nějak kešovat. Přesně to jsme udělali. Abychom pokaždé nekontrolovali vše, deterministicky jsme text rozdělili na kousky a zkontrolovali pouze ty, které se změnily. Protože texty mohou být velké a nechtěli jsme načítat mezipaměť, neuložili jsme samotné texty, ale jejich hashe. To umožnilo, aby plugin fungoval hladce i na velkých souborech.

LanguageTool podporuje více než 25 jazyků, ale je nepravděpodobné, že by je některý uživatel potřeboval všechny. Chtěl jsem dát možnost stáhnout si knihovny pro konkrétní jazyk na požádání (pokud to zaškrtnete v uživatelském rozhraní). Dokonce jsme to implementovali, ale ukázalo se to jako příliš složité a nespolehlivé. Konkrétně jsme museli načíst LanguageTool s novou sadou jazyků pomocí samostatného classloaderu a poté jej pečlivě inicializovat. Všechny knihovny byly zároveň v uživatelském .m2 úložišti a při každém spuštění jsme museli kontrolovat jejich integritu. Nakonec jsme se rozhodli, že pokud budou mít uživatelé problémy s velikostí pluginu, poskytneme samostatný plugin pro několik nejoblíbenějších jazyků.

Po hackathonu

Hackathon skončil, ale práce na pluginu pokračovaly s užším týmem. Chtěl jsem podporovat řetězce, komentáře a dokonce i jazykové konstrukce, jako jsou názvy proměnných a tříd. V současné době je to podporováno pouze pro Java, Kotlin a Python, ale doufáme, že tento seznam poroste. Opravili jsme spoustu malých chyb a stali se kompatibilnějšími s vestavěnou kontrolou pravopisu Idea. Navíc se objevila podpora XML a kontrola pravopisu. To vše najdete ve druhé verzi, kterou jsme zveřejnili nedávno.

Co bude dál?

Takový plugin může být užitečný nejen pro vývojáře, ale také pro technické autory (často pracující např. s XML v IDE). Každý den musí pracovat s přirozeným jazykem, aniž by měli asistenta v podobě tipů editora na možné chyby. Náš plugin takové rady poskytuje a dělá to s vysokou mírou přesnosti.
Plánujeme vyvinout plugin, a to jak přidáním nových jazyků, tak prozkoumáním obecného přístupu k organizaci kontroly textu. Mezi naše nejbližší plány patří implementace stylistických profilů (soubory pravidel, které definují stylistickou příručku pro text, např. „nepište např., ale pište celou formu“), rozšíření slovníku a vylepšení uživatelského rozhraní (zejména, chceme dát uživateli možnost slovo nejen ignorovat, ale přidat ho do slovníku s uvedením slovního druhu).

Zdroj: www.habr.com

Přidat komentář