Hackathon DevDays'19 (2-qism): IntelliJ IDEA-da Telegram va grammatika tekshiruvi uchun audio xabar tahlilchisi

Biz magistratura talabalari ishtirok etgan DevDays bahorgi hackathon loyihalari haqida gapirishni davom ettiramiz. "Dasturiy ta'minotni ishlab chiqish / dasturiy ta'minot muhandisligi".

Hackathon DevDays'19 (2-qism): IntelliJ IDEA-da Telegram va grammatika tekshiruvi uchun audio xabar tahlilchisi

Aytgancha, biz o'quvchilarni qo'shilishga taklif qilmoqchimiz VK magistrantlar guruhi. Unda biz ishga qabul qilish va o'qish haqidagi so'nggi yangiliklarni e'lon qilamiz. Ochiq eshiklar kunidan videoni ham guruhda topish mumkin. Eslatib o'tamiz: tadbir 29 aprel kuni bo'lib o'tadi, tafsilotlar saytda.

Telegram ish stoli ovozli xabarlarini tahlil qilish

Hackathon DevDays'19 (2-qism): IntelliJ IDEA-da Telegram va grammatika tekshiruvi uchun audio xabar tahlilchisi

Fikr muallifi
Xoroshev Artyom

Jamoa tarkibi

Xoroshev Artem – loyiha menejeri/ishlab chiquvchisi/QA
Eliseev Anton – biznes-tahlilchi/marketing bo'yicha mutaxassis
Mariya Kuklina - UI dizayneri / dasturchisi
Baxvalov Pavel – UI dizayneri/ishlab chiquvchisi/QA

Bizningcha, Telegram zamonaviy va qulay messenjer bo‘lib, uning shaxsiy kompyuter versiyasi ommabop va ochiq manba bo‘lib, uni o‘zgartirish imkonini beradi. Mijoz juda boy funksionallikni taklif etadi. Standart matnli xabarlarga qo'shimcha ravishda u ovozli qo'ng'iroqlar, video xabarlar va ovozli xabarlarni o'z ichiga oladi. Va bu ikkinchisi, ba'zida ularni oluvchiga noqulaylik tug'diradi. Ko'pincha kompyuter yoki noutbukda ovozli xabarni tinglash mumkin emas. Atrof-muhit shovqini, eshitish vositalarining etishmasligi yoki hech kim xabar mazmunini eshitishini xohlamasligingiz mumkin. Agar siz smartfonda Telegram-dan foydalansangiz, bunday muammolar deyarli yuzaga kelmaydi, chunki noutbuk yoki shaxsiy kompyuterdan farqli o'laroq, uni shunchaki qulog'ingizga olib kelishingiz mumkin. Biz bu muammoni hal qilishga harakat qildik.

DevDays’dagi loyihamizning maqsadi Telegram ish stoli mijoziga (keyingi o‘rinlarda Telegram Desktop deb yuritiladi) qabul qilingan ovozli xabarlarni matnga tarjima qilish imkoniyatini qo‘shish edi.

Hozirgi vaqtda barcha analoglar botlar bo'lib, siz ularga audio xabar yuborishingiz va javob sifatida matn olishingiz mumkin. Biz bundan unchalik mamnun emasmiz: xabarni botga yo‘naltirish unchalik qulay emas, biz mahalliy funksiyalarga ega bo‘lishni xohlaymiz. Bundan tashqari, har qanday bot uchinchi tomon bo'lib, nutqni aniqlash API va foydalanuvchi o'rtasida vositachi bo'lib ishlaydi va bu, hech bo'lmaganda, xavfli hisoblanadi.

Yuqorida aytib o'tilganidek, telegram-desktop ikkita muhim afzalliklarga ega: ishlash qulayligi va tezligi. Va bu tasodif emas, chunki u butunlay C++ da yozilgan. Va biz to'g'ridan-to'g'ri mijozga yangi funksionallikni qo'shishga qaror qilganimiz sababli, biz uni C++ da ishlab chiqishimiz kerak edi.

Hackathon DevDays'19 (2-qism): IntelliJ IDEA-da Telegram va grammatika tekshiruvi uchun audio xabar tahlilchisiJamoamizda 4 kishi bor edi. Dastlab, ikki kishi nutqni aniqlash uchun mos kutubxona qidirayotgan edi, bir kishi Telegram-ish stolining manba kodini o'rganayotgan edi, boshqasi qurilish loyihasini ishga tushirdi. Telegram stoli. Keyinchalik hamma foydalanuvchi interfeysini tuzatish va disk raskadrovka bilan band edi.

Ko'zlangan funktsiyani amalga oshirish qiyin bo'lmagandek tuyuldi, lekin har doimgidek, qiyinchiliklar paydo bo'ldi.

Muammoni hal qilish ikkita mustaqil kichik vazifadan iborat edi: tegishli nutqni aniqlash vositasini tanlash va yangi funksionallik uchun UIni amalga oshirish.

Ovozni aniqlash uchun kutubxonani tanlashda biz darhol barcha oflayn API-lardan voz kechishimiz kerak edi, chunki til modellari juda ko'p joy egallaydi. Ammo biz faqat bitta til haqida gapiramiz. Onlayn API-dan foydalanishimiz kerakligi aniq bo'ldi. Keyinchalik ma'lum bo'lishicha, Google, Yandex va Microsoft kabi gigantlarning nutqni aniqlash xizmatlari mutlaqo bepul emas va biz sinov muddati bilan qanoatlanishimiz kerak. Natijada Google Speech-to-Text tanlandi, chunki u butun yil davomida xizmat qiladigan xizmatdan foydalanish tokenini olish imkonini beradi.

Biz duch kelgan ikkinchi muammo C++ tilining ba'zi kamchiliklari bilan bog'liq - markazlashtirilgan ombor mavjud bo'lmaganda turli kutubxonalar hayvonot bog'i. Shunday bo'ladiki, Telegram Desktop boshqa ko'plab versiyalarga xos kutubxonalarga bog'liq. Rasmiy omborda mavjud ko'rsatmalar loyihani yig'ish uchun. Va shuningdek, masalan, qurilish muammolari bo'yicha juda ko'p ochiq muammolar vaqt и два. Barcha muammolar qurilish skripti Ubuntu 14.04 uchun yozilganligi bilan bog'liq bo'lib chiqdi va Ubuntu 18.04 ostida telegramni muvaffaqiyatli qurish uchun o'zgartirishlar kiritilishi kerak edi.

Telegram Desktop-ning o'zini yig'ish ancha vaqtni oladi: Intel Core i5-7200U-ga ega noutbukda barcha bog'liqliklar bilan to'liq yig'ish (bayroq -j 4) taxminan uch soat davom etadi. Ulardan taxminan 30 daqiqa mijozning o'zini bog'lash orqali olinadi (keyinchalik Nosozliklarni tuzatish konfiguratsiyasida ulanish taxminan 10 daqiqa davom etishi ma'lum bo'ldi), lekin ulanish bosqichi har safar o'zgarishlar kiritilgandan keyin takrorlanishi kerak.

Muammolarga qaramay, biz o'ylangan g'oyani amalga oshirishga, shuningdek, yangilashga muvaffaq bo'ldik skript yaratish Ubuntu 18.04 uchun. Ishning namoyishini quyidagi manzilda ko'rish mumkin aloqa. Shuningdek, biz bir nechta animatsiyalarni o'z ichiga olamiz. Barcha ovozli xabarlar yonida xabarni matnga tarjima qilish imkonini beruvchi tugma paydo bo'ldi. Sichqonchaning o'ng tugmachasini bosish orqali siz qo'shimcha ravishda eshittirish uchun ishlatiladigan tilni belgilashingiz mumkin. tomonidan aloqa mijoz yuklab olish uchun mavjud.

Repozitariy.

Bizning fikrimizcha, bu ko'plab foydalanuvchilar uchun qulay bo'lgan funktsional kontseptsiyaning yaxshi isboti bo'lib chiqdi. Biz buni Telegram Desktop’ning kelgusi relizlarida ko‘rishga umid qilamiz.

IntelliJ IDEA-da tabiiy tilni qo'llab-quvvatlash yaxshilandi

Hackathon DevDays'19 (2-qism): IntelliJ IDEA-da Telegram va grammatika tekshiruvi uchun audio xabar tahlilchisi

Fikr muallifi

Tankov Vladislav

Jamoa tarkibi

Tankov Vladislav (guruh rahbari, LanguageTool va IntelliJ IDEA bilan ishlaydi)
Nikita Sokolov (LanguageTool bilan ishlash va UI yaratish)
Xvorov Aleksandr (LanguageTool bilan ishlash va ish faoliyatini optimallashtirish)
Sadovnikov Aleksandr (belgilash tillari va kodlarini tahlil qilishni qo'llab-quvvatlash)

Biz IntelliJ IDEA plaginini ishlab chiqdik, u turli matnlarni (sharhlar va hujjatlar, koddagi so‘zma-so‘z satrlar, Markdown yoki XML belgilarida formatlangan matn) grammatik, imlo va stilistik aniqlikni (ingliz tilida bu proofreading deb ataladi) tekshiradi.

Loyihaning g'oyasi IntelliJ IDEA standart imlo tekshiruvini Grammarly miqyosiga kengaytirish, IDE ichida Grammarly-ni yaratish edi.

Nima bo'lganini ko'rishingiz mumkin aloqa.

Xo'sh, quyida biz plaginning imkoniyatlari, shuningdek uni yaratishda yuzaga kelgan qiyinchiliklar haqida batafsilroq gaplashamiz.

Motivatsiya

Tabiiy tillarda matn yozish uchun mo'ljallangan ko'plab mahsulotlar mavjud, ammo hujjatlar va kod sharhlari ko'pincha ishlab chiqish muhitida yoziladi. Shu bilan birga, IDE koddagi xatolarni topishda juda yaxshi ish qiladi, lekin tabiiy tillardagi matnlar uchun juda mos emas. Bu grammatikada, tinish belgilarida yoki uslubda xatolarga yo'l qo'yishni rivojlantirish muhiti ularni ko'rsatmasdan juda oson qiladi. Foydalanuvchi interfeysini yozishda xato qilish juda muhim, chunki bu nafaqat kodning tushunarliligiga, balki ishlab chiqilgan dastur foydalanuvchilarining o'ziga ham ta'sir qiladi.

Eng mashhur va rivojlangan ishlab chiqish muhitlaridan biri bu IntelliJ IDEA, shuningdek IntelliJ Platformasiga asoslangan IDElardir. IntelliJ Platformasi allaqachon o'rnatilgan imlo tekshirgichiga ega, ammo u hatto eng oddiy grammatik xatolardan ham xalos bo'lolmaydi. Biz mashhur tabiiy til tahlil tizimlaridan birini IntelliJ IDEA-ga integratsiya qilishga qaror qildik.

Реализация

Hackathon DevDays'19 (2-qism): IntelliJ IDEA-da Telegram va grammatika tekshiruvi uchun audio xabar tahlilchisiBiz o'z oldimizga matnni tekshirish tizimini yaratish vazifasini qo'ymadik, shuning uchun biz mavjud yechimdan foydalandik. Eng mos variant bo'lib chiqdi Til vositasi. Litsenziya bizga undan o'z maqsadlarimiz uchun erkin foydalanish imkonini berdi: u bepul, Java-da yozilgan va ochiq manba. Bundan tashqari, u 25 tilni qo'llab-quvvatlaydi va o'n besh yildan ortiq vaqt davomida ishlab chiqilmoqda. Ochiqligiga qaramay, LanguageTool pullik matnni tekshirish yechimlari uchun jiddiy raqobatchidir va uning mahalliy darajada ishlashi uning tom ma'noda qotil xususiyatidir.

Plagin kodi mavjud GitHub-dagi omborlar. Butun loyiha UI uchun Java-ning kichik qo'shilishi bilan Kotlin tilida yozilgan. Hackathon davomida biz Markdown, JavaDoc, HTML va Plain Text dasturlarini qo'llab-quvvatlashni amalga oshirishga muvaffaq bo'ldik. Xakatondan so'ng, katta yangilanish XML, Java, Kotlin va Python tillarida string literallari va imlo tekshiruvini qo'llab-quvvatladi.

Muammolar

Tez orada tushundikki, agar biz har safar tekshirish uchun barcha matnni LanguageTool-ga bersak, IDEA interfeysi har qanday jiddiy yoki jiddiy matnda qotib qoladi, chunki tekshirishning o'zi UI oqimini bloklaydi. Muammo "ProgressManager.checkCancelled" tekshiruvi orqali hal qilindi - agar IDEA tekshiruvni to'xtatish vaqti keldi deb hisoblasa, bu funksiya istisno qiladi.

Bu muzlashlarni butunlay yo'q qildi, ammo undan foydalanish mumkin emas: matnni qayta ishlash juda uzoq vaqt talab etadi. Bundan tashqari, bizning holatlarimizda, ko'pincha matnning juda kichik qismi o'zgaradi va biz natijalarni qandaydir tarzda keshlashni xohlaymiz. Biz aynan shunday qildik. Har safar hamma narsani tekshirmaslik uchun biz matnni aniq qismlarga ajratdik va faqat o'zgarganlarini tekshirdik. Matnlar katta bo'lishi mumkinligi va biz keshni yuklashni xohlamaganimiz sababli, biz matnlarning o'zini emas, balki ularning xeshlarini saqladik. Bu plaginning hatto katta fayllarda ham muammosiz ishlashiga imkon berdi.

LanguageTool 25 dan ortiq tillarni qo'llab-quvvatlaydi, ammo har bir foydalanuvchiga ularning barchasi kerak bo'lishi dargumon. Men so'rov bo'yicha ma'lum bir til uchun kutubxonalarni yuklab olish imkoniyatini bermoqchi edim (agar siz uni UIda belgilasangiz). Biz buni hatto amalga oshirdik, lekin bu juda murakkab va ishonchsiz bo'lib chiqdi. Xususan, biz LanguageTool-ni alohida classloader yordamida yangi tillar to'plami bilan yuklashimiz va keyin uni ehtiyotkorlik bilan ishga tushirishimiz kerak edi. Shu bilan birga, barcha kutubxonalar foydalanuvchi .m2 omborida edi va har bir boshida biz ularning yaxlitligini tekshirishimiz kerak edi. Oxir-oqibat, agar foydalanuvchilarda plagin hajmi bilan bog'liq muammolar bo'lsa, biz eng mashhur tillarning bir nechtasi uchun alohida plaginni taqdim etishga qaror qildik.

Hakatondan keyin

Hackathon yakunlandi, lekin plagin ustida ishlash torroq jamoa bilan davom etdi. Men satrlarni, sharhlarni va hatto o'zgaruvchilar va sinf nomlari kabi til konstruktsiyalarini qo'llab-quvvatlamoqchi edim. Hozirda bu faqat Java, Kotlin va Python uchun qo'llab-quvvatlanadi, ammo bu ro'yxat o'sishiga umid qilamiz. Biz ko‘plab kichik xatolarni tuzatdik va Idea’ning o‘rnatilgan imlo tekshiruvi bilan yanada moslashdik. Bundan tashqari, XML-ni qo'llab-quvvatlash va imlo tekshiruvi paydo bo'ldi. Bularning barchasini biz yaqinda nashr etgan ikkinchi versiyada topish mumkin.

Keyin nima?

Bunday plagin nafaqat ishlab chiquvchilar uchun, balki texnik yozuvchilar uchun ham foydali bo'lishi mumkin (ko'pincha, masalan, IDEda XML bilan ishlaydi). Har kuni ular mumkin bo'lgan xatolar haqida muharrir maslahatlari shaklida yordamchisiz tabiiy til bilan ishlashlari kerak. Bizning plaginimiz bunday maslahatlar beradi va buni yuqori darajadagi aniqlik bilan bajaradi.
Biz plaginni yangi tillarni qo'shish va matnni tekshirishni tashkil qilishning umumiy yondashuvini o'rganish orqali ishlab chiqishni rejalashtirmoqdamiz. Bizning yaqin rejalarimiz stilistik profillarni (matn uchun uslublar qo'llanmasini belgilaydigan qoidalar to'plamini, masalan, "yozmang, balki to'liq shaklni yozing") amalga oshirishni, lug'atni kengaytirishni va foydalanuvchi interfeysini yaxshilashni (xususan, biz foydalanuvchiga shunchaki so'zni e'tiborsiz qoldirish emas, balki uni nutq qismini ko'rsatgan holda lug'atga qo'shish imkoniyatini berishni xohlaymiz).

Manba: www.habr.com

a Izoh qo'shish