DevDays'19 Hackathon (Part 2): Analizzatore di Messaggi Vocali per Telegram and Grammar Checker in IntelliJ IDEA

Continuemu à parlà di i prughjetti di l'hackathon di primavera DevDays, in quale anu participatu i studienti di u prugramma di maestru. "Sviluppu di software / Ingegneria di software".

Hackathon DevDays'19 (parte 2): parser di messagi audio per a verificazione di Telegram è grammatica in IntelliJ IDEA

Per via, vulemu invità i lettori à unisce VK gruppu di studienti di u maestru. In questu publicheremu l'ultime nutizie nantu à u reclutamentu è u studiu. Un video da u ghjornu apertu pò ancu esse truvatu in u gruppu. Ricurdemu : l'evenimentu si ferà u 29 d'aprile, ditagli Online.

Parser di messagi vocali di Telegram Desktop

Hackathon DevDays'19 (parte 2): parser di messagi audio per a verificazione di Telegram è grammatica in IntelliJ IDEA

L'auteur de l'idée
Khoroshev Artyom

Cumpusizioni di u squadra

Khoroshev Artem - capu di prughjettu / sviluppatore / QA
Eliseev Anton - analista cummerciale / specialista in marketing
Maria Kuklina - UI designer / developer
Bakhvalov Pavel - Designer UI / sviluppatore / QA

Da u nostru puntu di vista, Telegram hè un messenger mudernu è cunvene, è a so versione per PC hè populari è open source, chì permette di mudificà. U cliente offre una funziunalità abbastanza ricca. In più di i missaghji di testu standard, cuntene chjama di voce, missaghji video è missaghji di voce. È hè l'ultime chì qualchì volta portanu inconvenienti à u so destinatariu. Spessu ùn hè micca pussibule di sente un messagiu di voce mentre in un computer o laptop. Ci pò esse rumore ambientale, mancanza di cuffie, o ùn vulete micca chì nimu sente u cuntenutu di u messagiu. Tali prublemi guasi mai si presentanu s'è vo aduprate Telegram in un smartphone, perchè pudete simpricimenti purtallu à l'arechja, à u cuntrariu di un laptop o PC. Avemu pruvatu à risolve stu prublema.

L'obiettivu di u nostru prughjettu à DevDays era di aghjunghje l'abilità di traduce i missaghji di voce ricevuti in testu à u cliente di desktop Telegram (in seguitu chjamatu Telegram Desktop).

Tutti l'analogi à u mumentu sò bots à quale pudete mandà un missaghju audio è riceve un testu in risposta. Ùn simu assai cuntenti di questu: invià un missaghju à un bot ùn hè micca assai cunvene; vulemu avè una funziunalità nativa. Inoltre, ogni bot hè un terzu chì agisce cum'è un intermediariu trà l'API di ricunniscenza di parlà è l'utilizatore, è questu hè, à u minimu, inseguru.

Comu nutatu prima, telegram-desktop hà dui vantaghji significativi: facilità è rapidità di funziunamentu. È questu ùn hè micca una coincidenza, perchè hè scrittu interamente in C++. E postu chì avemu decisu di aghjunghje una nova funziunalità direttamente à u cliente, avemu avutu à sviluppà in C++.

Hackathon DevDays'19 (parte 2): parser di messagi audio per a verificazione di Telegram è grammatica in IntelliJ IDEACi era 4 persone in a nostra squadra. Inizialmente, duie persone cercavanu una libreria adattata per u ricunniscenza vocale, una persona studiava u codice fonte di Telegram-desktop, un'altra implementava u prughjettu di custruzzione. Telegram Desktop. In seguitu, tutti eranu occupati à riparà l'UI è debugging.

Paria chì l'implementazione di a funziunalità prevista ùn saria micca difficiule, ma, cum'è sempre succede, i difficultà sò ghjunti.

A suluzione à u prublema hè custituita da dui subtasks indipendenti: sceglie un strumentu di ricunniscenza di parlà adattatu è implementà una UI per una nova funziunalità.

Quandu sceglite una biblioteca per u ricunniscenza di voce, avemu avutu immediatamente abbandunà tutte l'API offline, perchè i mudelli di lingua occupanu assai spaziu. Ma parlemu di una sola lingua. Hè diventatu chjaru chì avemu avutu aduprà l'API in linea. In seguitu, hè statu fattu chì i servizii di ricunniscenza di parlà di tali giganti cum'è Google, Yandex è Microsoft ùn sò micca in tuttu liberi, è avemu da esse cuntentate cù un periodu di prova. In u risultatu, Google Speech-To-Text hè statu sceltu perchè permette di ottene un token per utilizà u serviziu, chì durà per un annu sanu.

U sicondu prublema chì avemu scontru hè in relazione cù alcune di e carenze di C++ - un zoo di diverse biblioteche in l'absenza di un repositoriu centralizatu. Hè cusì chì Telegram Desktop dipende da parechje altre librerie specifiche di versione. U repositoriu ufficiale hà manuale per l'assemblea di u prugettu. È ancu un gran numaru di prublemi aperti nantu à i prublemi di custruisce, per esempiu i tempi и два. Tutti i prublemi sò stati cunnessi cù u fattu chì u script di custruzzione hè statu scrittu per Ubuntu 14.04, è per pudè custruisce telegramma in Ubuntu 18.04, i cambiamenti anu da esse fattu.

Telegram Desktop stessu pigghia assai tempu per assemble: nantu à un laptop cù un Intel Core i5-7200U, l'assemblea cumpleta (bandiera -j 4) cù tutte e dipendenze dura circa trè ore. Di questi, circa 30 minuti sò pigliati da u ligame di u cliente stessu (più tardi si scopre chì in a cunfigurazione di Debug, u ligame dura circa 10 minuti), è ancu u stadiu di ligame deve esse ripetutu ogni volta dopu à fà cambiamenti.

Malgradu i prublemi, avemu riesciutu à implementà l'idea cuncipita, è ancu aghjurnà custruisce script per Ubuntu 18.04. Una dimostrazione di u travagliu pò esse vistu à a lea. Includemu ancu parechje animazioni. Un buttone hè apparsu accantu à tutti i missaghji di voce, chì vi permette di traduce u messagiu in testu. Facendu clic destro, pudete ancu specificà a lingua chì serà aduprata per a trasmissione. By a lea cliente dispunibule per scaricà.

Repository.

In u nostru parè, hè diventatu una bona Prova di Cuncepimentu di funziunalità chì saria cunvene per parechji utilizatori. Speremu di vede in future versioni di Telegram Desktop.

Supportu di Lingua Naturale Enhanced in IntelliJ IDEA

Hackathon DevDays'19 (parte 2): parser di messagi audio per a verificazione di Telegram è grammatica in IntelliJ IDEA

L'auteur de l'idée

Tankov Vladislav

Cumpusizioni di u squadra

Tankov Vladislav (capu di squadra, travagliendu cù LanguageTool è IntelliJ IDEA)
Nikita Sokolov (travagliu cù LanguageTool è crea UI)
Khvorov Alexander (travagliu cù LanguageTool è ottimisazione di u rendiment)
Sadovnikov Alexander (supportu per l'analisi di linguaggi di marcatura è codice)

Avemu sviluppatu un plugin per IntelliJ IDEA chì verifica diversi testi (cumenti è ducumentazione, linee literale in codice, testu furmatu in Markdown o marcatura XML) per a precisione grammaticale, ortografica è stilistica (in inglese questu hè chjamatu correzione di prova).

L'idea di u prugettu era di espansione u standard di spellcheck IntelliJ IDEA à a scala di Grammarly, per fà un tipu di Grammarly in IDE.

Pudete vede ciò chì hè accadutu Member.

Ebbè, quì sottu parlemu in più detail nantu à e capacità di u plugin, è ancu di e difficultà chì si sò sviluppati durante a so creazione.

Motivazione

Ci sò parechji prudutti pensati per scrive testu in lingue naturali, ma a documentazione è i cumenti di codice sò più spessu scritti in ambienti di sviluppu. À u listessu tempu, l'IDE facenu un excelente travagliu di truvà errori in u codice, ma sò pocu adattati per i testi in lingue naturali. Questu rende assai faciule fà sbaglià in grammatica, puntuazione o stile senza chì l'ambiente di sviluppu li indicà. Hè u più criticu di fà un sbagliu in scrive l'interfaccia d'utilizatore, postu chì questu affettarà micca solu a comprensibilità di u codice, ma ancu l'utilizatori di l'applicazione sviluppata stessi.

Unu di l'ambienti di sviluppu più populari è sviluppati hè IntelliJ IDEA, è ancu IDE basati nantu à a piattaforma IntelliJ. IntelliJ Platform hà digià un correttore ortograficu integratu, ma ùn si sbarazza ancu di l'errori grammaticali più simplici. Avemu decisu di integrà unu di i sistemi di analisi di lingua naturale populari in IntelliJ IDEA.

Реализация

Hackathon DevDays'19 (parte 2): parser di messagi audio per a verificazione di Telegram è grammatica in IntelliJ IDEAÙn avemu micca stabilitu u compitu di creà u nostru sistema di verificazione di testu, cusì avemu usatu una suluzione esistente. L'opzione più adatta hè stata Strumentu di lingua. A licenza ci hà permessu di aduprà liberamente per i nostri scopi: hè liberu, scrittu in Java è open-source. Inoltre, sustene 25 lingue è hè in sviluppu per più di quindici anni. Malgradu a so apertura, LanguageTool hè un cuncurrente seriu per suluzioni di verificazione di testu pagatu, è u fattu chì pò travaglià in u locu hè literalmente a so funzione assassina.

U codice plugin hè in repository nantu à GitHub. Tuttu u prughjettu hè statu scrittu in Kotlin cù una piccula aghjunta di Java per l'UI. Durante l'hackathon, avemu riesciutu à implementà u supportu per Markdown, JavaDoc, HTML è Plain Text. Dopu l'hackathon, una aghjurnazione maiò hà aghjustatu supportu per XML, string literals in Java, Kotlin è Python, è u cuntrollu ortograficu.

Difficultà

Piuttostu prestu avemu capitu chì se alimentamu tuttu u testu à LanguageTool per l'ispezione ogni volta, allora l'interfaccia IDEA si congelarà nantu à qualsiasi testu più o menu seriu, postu chì l'ispezione stessa blocca u flussu di l'UI. U prublema hè stata risolta per mezu di a verificazione "ProgressManager.checkCancelled" - sta funzione tira una eccezzioni se IDEA crede chì hè ora di abbandunà l'ispezione.

Questu hà eliminatu cumplettamente i congelamenti, ma hè impussibile di utilizà: u testu pigghia assai tempu per processà. Inoltre, in u nostru casu, a maiò spessu una parte assai chjuca di u testu cambia è vulemu cache i risultati in qualchì modu. Hè esattamente ciò chì avemu fattu. Per ùn verificà tuttu ogni volta, avemu deterministically split u testu in pezzi è verificatu solu quelli chì avianu cambiatu. Siccomu i testi ponu esse grande è ùn avemu micca vulutu carricà u cache, ùn avemu micca guardatu i testi stessi, ma i so hashes. Questu hà permessu à u plugin per uperà bè ancu nantu à i schedarii grossi.

LanguageTool supporta più di 25 lingue, ma hè improbabile chì un utilizatore hà bisognu di tutti. Vuliu dà l'uppurtunità di scaricà biblioteche per una lingua specifica nantu à dumanda (se ti marca in l'UI). Avemu ancu implementatu questu, ma hè statu troppu complicatu è pocu affidabile. In particulare, avemu avutu à carricà LanguageTool cù un novu settore di lingue cù un classloader separatu, è poi inizializza cù cura. À u listessu tempu, tutte e biblioteche eranu in un repository .m2 d'utilizatore, è à ogni principiu avemu avutu à verificà a so integrità. À a fine, avemu decisu chì se l'utilizatori avianu prublemi cù a dimensione di u plugin, allora avemu da furnisce un plugin separatu per parechje di e lingue più populari.

Dopu à l'hackathon

L'hackathon hà finitu, ma u travagliu nantu à u plugin cuntinuò cù una squadra più stretta. Vuliu sustene strings, cumenti, è ancu custruzzioni di lingua cum'è nomi di variàbili è classi. Attualmente questu hè solu supportatu per Java, Kotlin è Python, ma speremu chì sta lista cresce. Avemu riparatu assai bug è diventate più cumpatibili cù u verificatore ortograficu integratu di Idea. Inoltre, u supportu XML è u cuntrollu ortograficu sò apparsu. Tuttu chistu pò esse truvatu in a seconda versione, chì avemu publicatu pocu tempu.

Chi c'è vicinu?

Un tali plugin pò esse utile micca solu per i sviluppatori, ma ancu per i scrittori tecnichi (spessu travagliendu, per esempiu, cù XML in un IDE). Ogni ghjornu anu da travaglià cù a lingua naturale, senza avè un assistente in forma di cunsiglii di editore nantu à i pussibuli errori. U nostru plugin furnisce tali suggerimenti è face cun un altu gradu di precisione.
Avemu pensatu à sviluppà u plugin, sia aghjustendu lingue novi sia esplorendu un approcciu generale per urganizà a verificazione di testu. I nostri piani immediati includenu l'implementazione di profili stilistici (insiemi di regule chì definiscenu una guida di stile per u testu, per esempiu, "ùn scrive micca per esempiu, ma scrivite a forma completa"), espansione u dizziunariu è migliurà l'interfaccia d'utilizatore (in particulare, vulemu dà à l'utilizatori l'uppurtunità micca solu di ignurà una parolla, ma di aghjunghje in u dizziunariu, indicà a parte di parlà).

Fonte: www.habr.com

Add a comment