Hackathon DevDays'19 (қисми 2): таҳлилгари паёми аудиоӣ барои Telegram ва санҷиши грамматика дар IntelliJ IDEA

Мо сӯҳбатро дар бораи лоиҳаҳои ҳакафони баҳории DevDays, ки дар он донишҷӯёни барномаи магистрӣ иштирок доштанд, идома медиҳем. "Таҳияи нармафзор / Муҳандисии нармафзор".

Hackathon DevDays'19 (қисми 2): таҳлилгари паёми аудиоӣ барои Telegram ва санҷиши грамматика дар IntelliJ IDEA

Зимнан, мо хонандагонро ба ҳамроҳ даъват мекунем ВК гурӯҳи донишҷӯёни магистр. Дар он мо хабарҳои охиринро дар бораи қабул ва таҳсил нашр хоҳем кард. Видеоро аз рӯзи кушод низ дар гурӯҳ пайдо кардан мумкин аст. Ёдовар мешавем: чорабинӣ 29 апрел баргузор мешавад, тафсилот онлайн.

Таҳлилгари паёмҳои овозии мизи кории Telegram

Hackathon DevDays'19 (қисми 2): таҳлилгари паёми аудиоӣ барои Telegram ва санҷиши грамматика дар IntelliJ IDEA

Муаллиф фикри
Хорошев Артём

Сафорои

Хорошев Артем – менеҷери лоиҳа/таҳиягар/ҚА
Елисеев Антон – таҳлилгари тиҷорат/маркетинг
Мария Куклина - тарроҳи UI / таҳиякунанда
Бахвалов Павел – тарроҳи UI/таҳиягар/QA

Аз нуқтаи назари мо, Telegram як мессенҷери муосир ва қулай буда, версияи компютерии он маъмул ва манбаи кушода аст, ки имкон медиҳад, ки онро тағир диҳед. Муштарӣ функсияҳои хеле бойро пешниҳод мекунад. Илова ба паёмҳои матнии стандартӣ, он дорои зангҳои овозӣ, паёмҳои видеоӣ ва паёмҳои овозӣ мебошад. Ва ин охирин аст, ки баъзан ба гирандаи онҳо нороҳатӣ меорад. Ҳангоми дар компютер ё ноутбук гӯш кардани паёми овозӣ аксар вақт имконнопазир аст. Шояд садои муҳити атроф, набудани гӯшмонакҳо бошад ё шумо намехоҳед, ки касе мундариҷаи паёмро бишнавад. Агар шумо Telegram-ро дар смартфон истифода баред, чунин мушкилот қариб ҳеҷ гоҳ ба миён намеояд, зеро шумо метавонед онро ба гӯши худ кашед, баръакси ноутбук ё компютер. Мо кӯшиш кардем, ки ин мушкилотро ҳал кунем.

Ҳадафи лоиҳаи мо дар DevDays ин илова кардани қобилияти тарҷумаи паёмҳои овозии гирифташуда ба матн ба муштарии мизи кории Telegram (минбаъд Telegram Desktop) буд.

Ҳама аналогҳо дар айни замон ботҳо мебошанд, ки шумо метавонед ба онҳо паёми аудиоӣ фиристед ва дар ҷавоб матн қабул кунед. Мо аз ин чандон қаноатманд нестем: ирсоли паём ба бот чандон қулай нест; мо мехоҳем, ки функсияи аслӣ дошта бошем. Илова бар ин, ҳама бот шахси сеюм аст, ки ҳамчун миёнарав байни API эътирофи нутқ ва корбар амал мекунад ва ин ҳадди аққал хатарнок аст.

Тавре ки қаблан зикр гардид, телеграм-мизи корӣ ду бартарии назаррас дорад: осонӣ ва суръати кор. Ва ин тасодуфӣ нест, зеро он комилан дар C++ навишта шудааст. Ва азбаски мо тасмим гирифтем, ки функсияҳои навро мустақиман ба муштарӣ илова кунем, мо бояд онро дар C++ таҳия кунем.

Hackathon DevDays'19 (қисми 2): таҳлилгари паёми аудиоӣ барои Telegram ва санҷиши грамматика дар IntelliJ IDEAДар бригадаи мо 4 кас буд. Дар аввал ду нафар дар ҷустуҷӯи китобхонаи мувофиқ барои шинохти нутқ буданд, як нафар коди ибтидоии Telegram-мизи мизи кориро меомӯхт, дигаре лоиҳаи сохтмонро ҷорӣ мекард. Мизи кории Telegram. Баъдтар, ҳама ба ислоҳи UI ва ислоҳи хатогӣ машғул буданд.

Чунин ба назар мерасид, ки татбиқи функсияҳои пешбинишуда душвор нест, аммо, чунон ки ҳамеша рӯй медиҳад, мушкилот ба миён омаданд.

Ҳалли мушкилот аз ду зервазифаи мустақил иборат буд: интихоби абзори мувофиқи шинохти нутқ ва татбиқи UI барои функсияҳои нав.

Ҳангоми интихоби китобхона барои шинохти овоз, мо бояд фавран аз ҳама API-ҳои офлайн даст кашем, зеро моделҳои забонӣ фазои зиёдро ишғол мекунанд. Аммо сухан дар бораи як забон меравад. Маълум шуд, ки мо бояд API-и онлайнро истифода барем. Баъдтар маълум шуд, ки хидматрасонии шинохти нутқи аз қабили Google, Yandex ва Microsoft умуман ройгон нестанд ва мо бояд бо давраи озмоишӣ қаноат кунем. Дар натиҷа, Google Speech-To-Text интихоб шуд, зеро он ба шумо имкон медиҳад токен барои истифодаи хидмат, ки тамоми сол давом мекунад, ба даст оред.

Мушкилоти дуюме, ки мо дучор шудем, ба баъзе камбудиҳои C++ - боғи ҳайвоноти китобхонаҳои гуногун дар сурати мавҷуд набудани анбори мутамарказ алоқаманд аст. Чунин мешавад, ки Telegram Desktop аз бисёр китобхонаҳои дигари версияи мушаххас вобаста аст. Анбори расмӣ дорад дастур барои монтажи лоиха. Ва инчунин шумораи зиёди масъалаҳои кушода оид ба мушкилоти сохтмон, масалан вақтҳо и два. Ҳама мушкилот ба он вобаста буданд, ки скрипти сохтмон барои Ubuntu 14.04 навишта шудааст ва барои бомуваффақият сохтани телеграмма дар Ubuntu 18.04, бояд тағирот ворид карда шавад.

Худи Telegram Desktop барои ҷамъоварӣ вақти хеле зиёдро мегирад: дар ноутбук бо Intel Core i5-7200U, васлкунии пурра (парчам -j 4) бо ҳама вобастагӣ тақрибан се соатро мегирад. Аз инҳо, тақрибан 30 дақиқа тавассути пайваст кардани худи муштарӣ гирифта мешавад (баъдтар маълум шуд, ки дар конфигуратсияи Debug пайвастшавӣ тақрибан 10 дақиқа вақт мегирад) ва аммо марҳилаи пайвастшавӣ бояд ҳар дафъа пас аз ворид кардани тағирот такрор карда шавад.

Сарфи назар аз мушкилот, мо тавонистем идеяи пешбинишударо амалӣ созем ва инчунин навсозӣ кунем сохтани скрипт барои Ubuntu 18.04. Намоиши асарро дар он дидан мумкин аст пайванд. Мо инчунин якчанд аниматсияҳоро дар бар мегирем. Дар паҳлӯи ҳамаи паёмҳои овозӣ тугма пайдо шуд, ки ба шумо имкон медиҳад, ки паёмро ба матн тарҷума кунед. Бо пахши тугмаи рост, шумо метавонед ба таври илова забонеро, ки барои пахш истифода мешавад, муайян кунед. Аз ҷониби пайванд муштарӣ барои зеркашӣ дастрас аст.

Анбор.

Ба андешаи мо, он як далели хуби консепсияи функсия буд, ки барои бисёр корбарон қулай хоҳад буд. Мо умедворем, ки онро дар нашрҳои ояндаи Desktop Telegram мебинем.

Дастгирии мукаммали забони табиӣ дар IntelliJ IDEA

Hackathon DevDays'19 (қисми 2): таҳлилгари паёми аудиоӣ барои Telegram ва санҷиши грамматика дар IntelliJ IDEA

Муаллиф фикри

Танков Владислав

Сафорои

Танков Владислав (роҳбари даста, кор бо LanguageTool ва IntelliJ IDEA)
Никита Соколов (кор бо LanguageTool ва сохтани UI)
Хворов Александр (кор бо LanguageTool ва оптимизатсияи иҷроиш)
Садовников Александр (дастгирии таҳлили забонҳои аломатгузорӣ ва код)

Мо як плагинро барои IntelliJ IDEA таҳия кардем, ки матнҳои гуногунро (шарҳҳо ва ҳуҷҷатҳо, хатҳои аслӣ дар код, матни дар Markdown ё аломатгузории XML форматшуда) барои дурустии грамматикӣ, имлоӣ ва услубӣ тафтиш мекунад (ба забони англисӣ инро proofreading меноманд).

Идеяи лоиҳа васеъ кардани санҷиши стандартии IntelliJ IDEA ба миқёси Grammarly, сохтани як навъ Grammarly дар дохили IDE буд.

Шумо мебинед, ки чӣ рӯй дод пайванд.

Хуб, дар зер мо дар бораи имкониятҳои плагин ва инчунин мушкилоте, ки ҳангоми эҷоди он ба вуҷуд омадаанд, муфассалтар сӯҳбат хоҳем кард.

Муваффақият

Маҳсулотҳои зиёде мавҷуданд, ки барои навиштани матн бо забонҳои табиӣ тарҳрезӣ шудаанд, аммо ҳуҷҷатҳо ва шарҳҳои код аксар вақт дар муҳити таҳия навишта мешаванд. Дар айни замон, IDE-ҳо дар ҷустуҷӯи хатогиҳо дар код кори аъло доранд, аммо барои матнҳо бо забонҳои табиӣ чандон мувофиқ нестанд. Ин имкон медиҳад, ки хатогиҳоро дар грамматика, пунктуатсия ё услуб бидуни муҳити рушд нишон диҳад. Дар навиштани интерфейси корбар хато кардан аз ҳама муҳим аст, зеро ин на танҳо ба фаҳмиши код, балки ба худи корбарони барномаи таҳияшуда низ таъсир мерасонад.

Яке аз муҳитҳои маъмултарин ва таҳияшуда IntelliJ IDEA ва инчунин IDE-ҳо дар платформаи IntelliJ мебошад. IntelliJ Platform аллакай як санҷиши дарунсохт дорад, аммо он ҳатто аз оддитарин хатогиҳои грамматикӣ халос намешавад. Мо тасмим гирифтем, ки яке аз системаҳои маъмули таҳлили забони табииро ба IntelliJ IDEA ворид кунем.

Реализация

Hackathon DevDays'19 (қисми 2): таҳлилгари паёми аудиоӣ барои Telegram ва санҷиши грамматика дар IntelliJ IDEAМо дар назди худ вазифа нагузоштем, ки системаи санҷиши матнии худро эҷод кунем, бинобар ин мо ҳалли мавҷударо истифода бурдем. Варианти аз ҳама мувофиқ маълум шуд Забони олӣ. Литсензия ба мо имкон дод, ки онро барои мақсадҳои худ озодона истифода барем: он ройгон аст, дар Java навишта шудааст ва сарчашмаи кушода аст. Илова бар ин, он 25 забонро дастгирӣ мекунад ва дар тӯли зиёда аз понздаҳ сол таҳия шудааст. Сарфи назар аз кушода будани худ, LanguageTool як рақиби ҷиддии ҳалли пулакӣ оид ба тафтиши матн аст ва далели он, ки он метавонад ба таври маҳаллӣ кор кунад, аслан хусусияти қотилони он аст.

Рамзи плагин дар анборҳо дар GitHub. Тамоми лоиҳа дар Котлин бо иловаи хурди Java барои UI навишта шудааст. Дар давоми ҳакатон мо тавонистем дастгирии Markdown, JavaDoc, HTML ва Plain Text-ро амалӣ созем. Пас аз ҳакатон, навсозии асосӣ дастгирии XML, сатри литерал дар Java, Kotlin ва Python ва санҷиши имлоро илова кард.

Мушкилот

Мо хеле зуд фаҳмидем, ки агар мо ҳама матнро ба LanguageTool барои санҷиш ҳар дафъа пешниҳод кунем, пас интерфейси IDEA дар ҳама гуна матни камтар ё ҷиддӣ ях мекунад, зеро худи санҷиш ҷараёни UI-ро маҳкам мекунад. Мушкилот тавассути санҷиши `ProgressManager.checkCancelled' ҳал карда шуд - ин функсия истисно мегузорад, агар IDEA боварӣ дошта бошад, ки вақти қатъи санҷиш расидааст.

Ин яхкуниро комилан аз байн бурд, аммо истифодаи он ғайриимкон аст: коркарди матн вақти хеле тӯлонӣ мегирад. Гузашта аз ин, дар ҳолати мо, аксар вақт қисми хеле хурди матн тағир меёбад ва мо мехоҳем, ки натиҷаҳоро бо ягон роҳ кэш кунем. Мо маҳз ҳамин тавр кардем. Барои он ки ҳама вақт ҳама чизро тафтиш накунем, мо матнро ба таври муайян ба қисмҳо тақсим кардем ва танҳо чизҳои тағирёфтаро тафтиш кардем. Азбаски матнҳо метавонанд калон бошанд ва мо намехостем кэшро бор кунем, мо на худи матнҳо, балки хэшҳои онҳоро захира кардем. Ин имкон дод, ки плагин ҳатто дар файлҳои калон ҳамвор кор кунад.

LanguageTool зиёда аз 25 забонро дастгирӣ мекунад, аммо гумон аст, ки ягон корбар ба ҳамаи онҳо ниёз дошта бошад. Ман мехостам, ки имкони зеркашии китобхонаҳоро барои забони мушаххас бо дархост (агар шумо онро дар UI қайд кунед). Мо ҳатто инро амалӣ кардем, аммо он хеле мураккаб ва эътимоднок буд. Аз ҷумла, ба мо лозим омад, ки LanguageTool-ро бо маҷмӯи нави забонҳо бо истифода аз синфборкунаки алоҳида бор кунем ва сипас онро бодиққат оғоз кунем. Ҳамзамон, ҳамаи китобхонаҳо дар як анбори корбар .m2 буданд ва дар ҳар оғоз мо бояд якпорчагии онҳоро тафтиш кунем. Дар ниҳоят, мо тасмим гирифтем, ки агар корбарон бо андозаи плагин мушкилот дошта бошанд, пас мо барои якчанд забонҳои маъмултарин плагини алоҳида пешниҳод мекунем.

Баъди хакатон

Ҳакатон ба охир расид, аммо кор дар плагин бо гурӯҳи тангтар идома ёфт. Ман мехостам, ки сатрҳо, шарҳҳо ва ҳатто сохторҳои забонро, аз қабили номҳои тағирёбанда ва синф дастгирӣ кунам. Дар айни замон ин танҳо барои Java, Kotlin ва Python дастгирӣ карда мешавад, аммо мо умедворем, ки ин рӯйхат афзоиш хоҳад ёфт. Мо бисёр хатогиҳои хурдро ислоҳ кардем ва бо санҷиши имло дар дохили Idea мувофиқтар шудем. Илова бар ин, дастгирии XML ва санҷиши имло пайдо шуданд. Хамаи инро дар версияи дуюм, ки ба наздикй нашр карда будем, дидан мумкин аст.

Чӣ оянда аст?

Чунин плагин метавонад на танҳо барои таҳиягарон, балки барои нависандагони техникӣ низ муфид бошад (аксар вақт, масалан, бо XML дар IDE кор мекунад). Ҳар рӯз онҳо бояд бо забони табиӣ кор кунанд, бе ёрдамчӣ дар шакли маслиҳатҳои муҳаррир дар бораи хатогиҳои эҳтимолӣ. Плагини мо чунин маслиҳатҳоро пешкаш мекунад ва онро бо дараҷаи баланди дақиқ иҷро мекунад.
Мо нақша дорем, ки плагинро ҳам тавассути илова кардани забонҳои нав ва ҳам тавассути омӯхтани равиши умумӣ барои ташкили санҷиши матн таҳия кунем. Нақшаҳои фаврии мо татбиқи профилҳои услубиро дар бар мегиранд (маҷмӯи қоидаҳое, ки дастури услубро барои матн муайян мекунанд, масалан, "нанависед, масалан, шакли пурраро нависед"), васеъ кардани луғат ва такмил додани интерфейси корбар (аз ҷумла, мо мехоҳем ба корбар имконият диҳем, ки на танҳо калимаро сарфи назар кунад, балки онро ба луғат бо нишон додани қисми нутқ илова кунад).

Манбаъ: www.habr.com

Илова Эзоҳ