Hackathon DevDays'19 (2-бөлім): IntelliJ IDEA жүйесінде Telegram және грамматиканы тексеруге арналған аудио хабарлама талдаушысы

Біз магистратура студенттері қатысқан DevDays көктемгі хакатонының жобалары туралы айтуды жалғастырамыз. «Бағдарламалық қамтамасыз етуді әзірлеу / бағдарламалық қамтамасыз ету инженериясы».

Hackathon DevDays'19 (2-бөлім): IntelliJ IDEA жүйесінде Telegram және грамматиканы тексеруге арналған аудио хабарлама талдаушысы

Айтпақшы, оқырмандарды қосылуға шақырамыз ВК магистранттар тобы. Онда біз жұмысқа қабылдау және оқу туралы соңғы жаңалықтарды жариялайтын боламыз. Ашық есік күнінен бейнероликті де топтан табуға болады. Естеріңізге сала кетейік: іс-шара 29 сәуірде өтеді, толығырақ сайтта.

Telegram жұмыс үстеліндегі дауыстық хабарды талдаушы

Hackathon DevDays'19 (2-бөлім): IntelliJ IDEA жүйесінде Telegram және грамматиканы тексеруге арналған аудио хабарлама талдаушысы

Идея авторы
Хорошев Артём

Команда құрамы

Хорошев Артем – жоба менеджері/әзірлеуші/QA
Елисеев Антон – бизнес-аналитик/маркетинг бойынша маман
Мария Куклина – UI дизайнері/әзірлеушісі
Бахвалов Павел – UI дизайнер/әзірлеуші/QA

Біздің көзқарасымыз бойынша, Telegram - заманауи және ыңғайлы мессенджер және оның ДК нұсқасы танымал және ашық бастапқы коды болып табылады, бұл оны өзгертуге мүмкіндік береді. Клиент өте бай функционалдылықты ұсынады. Стандартты мәтіндік хабарламалардан басқа, ол дауыстық қоңырауларды, бейне хабарламаларды және дауыстық хабарламаларды қамтиды. Және бұл кейде олардың алушысына қолайсыздық әкеледі. Компьютерде немесе ноутбукта дауыстық хабарламаны тыңдау жиі мүмкін емес. Қоршаған ортаның шуы, құлаққаптардың болмауы немесе хабардың мазмұнын ешкімнің естігенін қаламауыңыз мүмкін. Смартфонда Telegram-ды пайдалансаңыз, мұндай проблемалар ешқашан пайда болмайды, өйткені ноутбук немесе компьютерден айырмашылығы оны жай ғана құлағыңызға апара аласыз. Біз бұл мәселені шешуге тырыстық.

DevDays-тегі жобамыздың мақсаты Telegram жұмыс үстелі клиентіне (бұдан әрі - Telegram жұмыс үстелі) қабылданған дауыстық хабарламаларды мәтінге аудару мүмкіндігін қосу болды.

Қазіргі уақытта барлық аналогтар аудио хабарлама жіберуге және жауап ретінде мәтінді алуға болатын боттар болып табылады. Біз бұған өте риза емеспіз: хабарды ботқа қайта жіберу өте ыңғайлы емес, біз жергілікті функцияға ие болғымыз келеді. Сонымен қатар, кез келген бот сөйлеуді тану API интерфейсі мен пайдаланушы арасында делдал ретінде әрекет ететін үшінші тарап болып табылады және бұл, кем дегенде, қауіпті.

Жоғарыда айтылғандай, telegram-десктоптың екі маңызды артықшылығы бар: жұмыс істеудің қарапайымдылығы мен жылдамдығы. Және бұл кездейсоқ емес, өйткені ол толығымен C++ тілінде жазылған. Біз жаңа функционалдылықты тікелей клиентке қосуды шешкендіктен, оны C++ тілінде әзірлеуге тура келді.

Hackathon DevDays'19 (2-бөлім): IntelliJ IDEA жүйесінде Telegram және грамматиканы тексеруге арналған аудио хабарлама талдаушысыБіздің топта 4 адам болды. Бастапқыда екі адам сөйлеуді тану үшін қолайлы кітапхананы іздеді, біреуі Telegram жұмыс үстелінің бастапқы кодын зерттеді, екіншісі құрастыру жобасын енгізді. Телеграммалық үстел. Кейінірек барлығы пайдаланушы интерфейсін түзетумен және жөндеумен айналысты.

Белгіленген функционалдылықты жүзеге асыру қиынға соқпайтын сияқты көрінді, бірақ әдеттегідей қиындықтар туындады.

Мәселені шешу екі тәуелсіз ішкі тапсырмадан тұрды: сәйкес сөйлеуді тану құралын таңдау және жаңа функционалдылық үшін UI енгізу.

Дауысты тану үшін кітапхананы таңдағанда, біз барлық офлайн API интерфейстерінен дереу бас тартуға тура келді, өйткені тіл үлгілері көп орын алады. Бірақ біз бір ғана тіл туралы айтып отырмыз. Бізге онлайн API пайдалану керек екені белгілі болды. Кейінірек Google, Яндекс және Microsoft сияқты алпауыттардың сөйлеуді тану қызметтері мүлдем тегін емес екені белгілі болды және біз сынақ мерзіміне қанағаттануымыз керек. Нәтижесінде Google Speech-to-Text таңдалды, себебі ол сізге бір жыл бойы қызмет ететін қызметті пайдалану белгісін алуға мүмкіндік береді.

Біз кездестірген екінші мәселе орталықтандырылған репозиторий болмаған кезде әртүрлі кітапханалардың хайуанаттар бағы С++ тілінің кейбір кемшіліктеріне қатысты. Telegram жұмыс үстелі көптеген басқа нұсқаларға арналған кітапханаларға байланысты болады. Ресми репозиторийде бар нұсқаулық жобаны құрастыру үшін. Сондай-ақ, мысалы, құрылыс мәселелеріне қатысты көптеген ашық мәселелер рет и два. Барлық мәселелер құрастыру сценарийі Ubuntu 14.04 үшін жазылғанымен байланысты болды және Ubuntu 18.04 астында телеграмманы сәтті құру үшін өзгерістер енгізу қажет болды.

Telegram Desktop-тің өзін құрастыру өте көп уақытты алады: Intel Core i5-7200U бар ноутбукта барлық тәуелділіктері бар толық құрастыру (жалау -j 4) шамамен үш сағатты алады. Олардың ішінде клиенттің өзін байланыстыруға шамамен 30 минут жұмсалады (кейінірек Debug конфигурациясында байланыстыру шамамен 10 минутты алады), бірақ өзгертулер енгізілгеннен кейін байланыстыру кезеңі қайталануы керек.

Мәселелерге қарамастан, біз ойластырылған идеяны жүзеге асыра алдық, сонымен қатар жаңарту сценарий құру Ubuntu 18.04 үшін. Жұмыстың демонстрациясын мына жерден көруге болады байланыс. Біз сонымен қатар бірнеше анимацияларды қосамыз. Барлық дауыстық хабарлардың жанында хабарламаны мәтінге аударуға мүмкіндік беретін түйме пайда болды. Тінтуірдің оң жақ түймешігімен басу арқылы сіз хабар тарату үшін қолданылатын тілді қосымша көрсете аласыз. Авторы байланыс жүктеп алуға болатын клиент.

Репозиторий.

Біздің ойымызша, бұл көптеген пайдаланушылар үшін ыңғайлы болатын функционалдық тұжырымдаманың жақсы дәлелі болды. Біз оны Telegram жұмыс үстелінің болашақ шығарылымдарында көреміз деп үміттенеміз.

IntelliJ IDEA жүйесінде табиғи тілдің жақсартылған қолдауы

Hackathon DevDays'19 (2-бөлім): IntelliJ IDEA жүйесінде Telegram және грамматиканы тексеруге арналған аудио хабарлама талдаушысы

Идея авторы

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

Команда құрамы

Танков Владислав (топ жетекшісі, LanguageTool және IntelliJ IDEA бағдарламаларымен жұмыс істейді)
Никита Соколов (LanguageTool-пен жұмыс істеу және UI құру)
Хворов Александр (LanguageTool-пен жұмыс істеу және өнімділікті оңтайландыру)
Садовников Александр (белгілеу тілдері мен кодтарын талдауды қолдау)

Біз IntelliJ IDEA плагинін әзірледік, ол әртүрлі мәтіндерді (түсініктемелер мен құжаттама, кодтағы әріптік жолдар, Markdown немесе XML белгілеуінде пішімделген мәтін) грамматикалық, емле және стилистикалық дәлдікке (ағылшын тілінде бұл түзету деп аталады) тексереді.

Жобаның идеясы IntelliJ IDEA стандартты емлені тексеруді Grammarly шкаласына дейін кеңейту, IDE ішіндегі грамматиканың бір түрін жасау болды.

Не болғанын көруге болады байланыс.

Төменде біз плагиннің мүмкіндіктері, сондай-ақ оны жасау кезінде туындаған қиындықтар туралы толығырақ сөйлесетін боламыз.

Мотивация

Табиғи тілдерде мәтін жазуға арналған көптеген өнімдер бар, бірақ құжаттама мен кодтық түсініктемелер көбінесе әзірлеу орталарында жазылады. Сонымен қатар, IDE кодтағы қателерді табуда тамаша жұмыс істейді, бірақ табиғи тілдегі мәтіндерге нашар сәйкес келеді. Бұл грамматикада, тыныс белгілерінде немесе стильде қателерді әзірлеу ортасын көрсетпей-ақ жасауды өте жеңілдетеді. Пайдаланушы интерфейсін жазуда қателесу өте маңызды, өйткені бұл кодтың түсініктілігіне ғана емес, сонымен қатар әзірленген қолданбаны пайдаланушылардың өздеріне де әсер етеді.

Ең танымал және дамыған әзірлеу орталарының бірі IntelliJ IDEA, сонымен қатар IntelliJ платформасына негізделген IDE болып табылады. IntelliJ платформасында ендірілген емлені тексеру құралы бар, бірақ ол қарапайым грамматикалық қателерден де құтылмайды. Біз танымал табиғи тілді талдау жүйелерінің бірін IntelliJ IDEA жүйесіне біріктіруді шештік.

Реализация

Hackathon DevDays'19 (2-бөлім): IntelliJ IDEA жүйесінде Telegram және грамматиканы тексеруге арналған аудио хабарлама талдаушысыБіз өз алдымызға мәтінді тексеру жүйесін құру міндетін қойған жоқпыз, сондықтан біз бар шешімді қолдандық. Ең қолайлы нұсқа болып шықты Тіл құралы. Лицензия бізге оны өз мақсаттарымыз үшін еркін пайдалануға мүмкіндік берді: ол тегін, Java тілінде жазылған және ашық бастапқы кодта. Сонымен қатар, ол 25 тілді қолдайды және он бес жылдан астам әзірленуде. Ашықтығына қарамастан, LanguageTool мәтінді тексерудің ақылы шешімдеріне елеулі бәсекелес болып табылады және оның жергілікті түрде жұмыс істей алатындығы оның өлтіретін қасиеті болып табылады.

Плагин коды бар GitHub репозиторийлері. Бүкіл жоба Котлин тілінде UI үшін Java-ның кішкене қосымшасымен жазылған. Хакатон барысында біз Markdown, JavaDoc, HTML және Plain Text бағдарламаларын қолдауды жүзеге асыра алдық. Хакатоннан кейін негізгі жаңарту XML қолдауын, Java, Kotlin және Python тіліндегі жол литералдарын және емлені тексеруді қосты.

Қиындықтар

Тез арада біз барлық мәтінді тексеру үшін LanguageTool-қа беретін болсақ, IDEA интерфейсі кез келген азды-көпті мәтінде қатып қалатынын түсіндік, өйткені тексерудің өзі UI ағынын блоктайды. Мәселе "ProgressManager.checkCancelled" тексеруі арқылы шешілді - бұл функция IDEA тексеруді тоқтату уақыты келді деп есептесе, ерекше жағдайды шығарады.

Бұл қатып қалуды толығымен жойды, бірақ оны пайдалану мүмкін емес: мәтінді өңдеу өте ұзақ уақыт алады. Сонымен қатар, біздің жағдайда, көбінесе мәтіннің өте аз бөлігі өзгереді және біз қандай да бір жолмен нәтижелерді кэштегіміз келеді. Біз дәл солай істедік. Әр уақытта барлығын тексермеу үшін біз мәтінді нақты бөліктерге бөліп, тек өзгергендерін тексердік. Мәтіндер үлкен болуы мүмкін болғандықтан және кэшті жүктегіміз келмегендіктен, біз мәтіндердің өзін емес, олардың хэштерін сақтадық. Бұл плагинге үлкен файлдарда да біркелкі жұмыс істеуге мүмкіндік берді.

LanguageTool 25-тен астам тілді қолдайды, бірақ кез келген пайдаланушыға олардың барлығы қажет болуы екіталай. Сұраныс бойынша белгілі бір тілге арналған кітапханаларды жүктеп алу мүмкіндігін бергім келді (егер сіз оны пайдаланушы интерфейсінде белгілесеңіз). Біз мұны тіпті жүзеге асырдық, бірақ ол тым күрделі және сенімсіз болып шықты. Атап айтқанда, біз LanguageTool-ты бөлек класс жүктеушінің көмегімен тілдердің жаңа жиынтығымен жүктеп, содан кейін оны мұқият инициализациялауға тура келді. Сонымен бірге барлық кітапханалар пайдаланушының .m2 репозиторийінде болды және әрбір басталған кезде олардың тұтастығын тексеруге тура келді. Соңында, егер пайдаланушыларда плагин өлшеміне қатысты проблемалар туындаса, біз ең танымал бірнеше тілдер үшін бөлек плагинді беретін боламыз деп шештік.

Хакатоннан кейін

Хакатон аяқталды, бірақ плагин бойынша жұмыс тар топпен жалғасты. Мен жолдарды, түсініктемелерді және тіпті айнымалылар мен сынып атаулары сияқты тілдік құрылымдарды қолдағым келді. Қазіргі уақытта бұл тек Java, Kotlin және Python үшін қолдау көрсетеді, бірақ бұл тізім өседі деп үміттенеміз. Біз көптеген кішігірім қателерді түзеттік және Idea-ның кірістірілген емлені тексеру құралымен үйлесімдірек болдық. Сонымен қатар, XML қолдауы және емлені тексеру пайда болды. Мұның бәрін біз жақында жариялаған екінші нұсқадан табуға болады.

Ары қарай не?

Мұндай плагин әзірлеушілер үшін ғана емес, сонымен қатар техникалық жазушылар үшін де пайдалы болуы мүмкін (көбінесе, мысалы, IDE-де XML-мен жұмыс істейді). Күн сайын олар мүмкін болатын қателер туралы кеңестер редакторының көмекшісінсіз табиғи тілмен жұмыс істеуі керек. Біздің плагин осындай кеңестер береді және оны жоғары дәлдікпен жасайды.
Біз плагинді жаңа тілдерді қосу арқылы және мәтінді тексеруді ұйымдастырудың жалпы тәсілін зерттеу арқылы әзірлеуді жоспарлап отырмыз. Біздің жақын арада жоспарларымызға стилистикалық профильдерді енгізу (мәтінге арналған стиль нұсқаулығын анықтайтын ережелер жиынтығы, мысалы, «жазбаңыз, бірақ толық пішінді жазыңыз»), сөздікті кеңейту және пайдаланушы интерфейсін жақсарту (атап айтқанда, біз пайдаланушыға сөзді елемеу ғана емес, оны сөздік бөлігін көрсете отырып, сөздікке қосу мүмкіндігін бергіміз келеді).

Дереккөз: www.habr.com

пікір қалдыру