DevDays'19 Hackathon (2-ci Hissə): IntelliJ IDEA-da Telegram və Qrammatika Yoxlayıcısı üçün Səsli Mesaj Ayrışdırıcısı

Magistratura proqramı tələbələrinin iştirak etdiyi yaz hakatonu DevDays layihələrindən danışmağa davam edirik. "Proqram təminatının inkişafı / proqram mühəndisliyi".

Hackathon DevDays'19 (hissə 2): IntelliJ IDEA-da Telegram və qrammatika yoxlaması üçün audio mesaj analizatoru

Yeri gəlmişkən, oxucuları qoşulmağa dəvət edirik VK - magistr tələbələri qrupu. Orada işə qəbul və təhsillə bağlı ən son xəbərləri dərc edəcəyik. Açıq qapı günündən videonu da qrupda tapa bilərsiniz. Xatırladırıq ki, tədbir aprelin 29-da baş tutacaq, təfərrüatlar online.

Telegram Masaüstü Səsli Mesaj Ayrışdırıcısı

Hackathon DevDays'19 (hissə 2): IntelliJ IDEA-da Telegram və qrammatika yoxlaması üçün audio mesaj analizatoru

İdeya müəllifidir
Xoroşev Artyom

Düzəliş

Xoroşev Artem – layihə meneceri/developer/QA
Eliseev Anton – biznes analitiki/marketinq mütəxəssisi
Maria Kuklina – UI dizayneri/developer
Bakhvalov Pavel – UI dizayneri/developer/QA

Bizim nöqteyi-nəzərimizdən Telegram müasir və rahat messencerdir və onun PC versiyası populyar və açıq mənbədir ki, bu da onu dəyişdirməyə imkan verir. Müştəri kifayət qədər zəngin funksionallıq təklif edir. Standart mətn mesajlarına əlavə olaraq səsli zənglər, video mesajlar və səsli mesajları ehtiva edir. Və bəzən alıcıya narahatlıq gətirən sonuncudur. Kompüter və ya noutbukda olarkən səsli mesajı dinləmək çox vaxt mümkün olmur. Ətrafdakı səs-küy, qulaqlıq çatışmazlığı ola bilər və ya mesajın məzmununu heç kimin eşitməsini istəmirsiniz. Smartfonda Telegram-dan istifadə etsəniz, bu cür problemlər demək olar ki, heç vaxt yaranmır, çünki noutbuk və ya PC-dən fərqli olaraq onu sadəcə qulağınıza gətirə bilərsiniz. Biz bu problemi həll etməyə çalışdıq.

DevDays-dakı layihəmizin məqsədi qəbul edilmiş səsli mesajları Telegram masa üstü müştərisinə (bundan sonra Telegram Desktop adlandırılacaq) mətnə ​​çevirmək qabiliyyətini əlavə etmək idi.

Hal-hazırda bütün analoqlar audio mesaj göndərə və cavab olaraq mətn ala biləcəyiniz botlardır. Biz bundan çox məmnun deyilik: mesajı bota yönləndirmək o qədər də rahat deyil, biz doğma funksionallığa sahib olmaq istərdik. Bundan əlavə, istənilən bot nitqin tanınması API ilə istifadəçi arasında vasitəçi kimi çıxış edən üçüncü tərəfdir və bu, ən azı, təhlükəlidir.

Daha əvvəl qeyd edildiyi kimi, telegram-desktopun iki əhəmiyyətli üstünlüyü var: işin asanlığı və sürəti. Və bu heç də təsadüfi deyil, çünki o, tamamilə C++ dilində yazılmışdır. Və biz birbaşa müştəriyə yeni funksionallıq əlavə etmək qərarına gəldiyimiz üçün onu C++-da inkişaf etdirməli olduq.

Hackathon DevDays'19 (hissə 2): IntelliJ IDEA-da Telegram və qrammatika yoxlaması üçün audio mesaj analizatoruKomandamızda 4 nəfər var idi. Əvvəlcə iki nəfər nitqin tanınması üçün uyğun kitabxana axtarırdı, bir nəfər Telegram-desktopun mənbə kodunu öyrənir, digəri tikinti layihəsini tətbiq edirdi. Telegram Masaüstü. Daha sonra hamı UI-ni düzəltmək və sazlamaqla məşğul idi.

Görünürdü ki, nəzərdə tutulan funksionallığı həyata keçirmək çətin olmayacaq, lakin həmişə olduğu kimi, çətinliklər yarandı.

Problemin həlli iki müstəqil alt tapşırıqdan ibarət idi: uyğun nitqin tanınması alətinin seçilməsi və yeni funksionallıq üçün UI tətbiqi.

Səsin tanınması üçün kitabxana seçərkən dərhal bütün oflayn API-lərdən imtina etməli olduq, çünki dil modelləri çox yer tutur. Ancaq biz yalnız bir dildən danışırıq. Onlayn API-dən istifadə etməli olacağımız aydın oldu. Sonradan məlum oldu ki, Google, Yandex və Microsoft kimi nəhənglərin nitqin tanınması xidmətləri heç də pulsuz deyil və biz sınaq müddəti ilə kifayətlənməli olacağıq. Nəticədə, Google Speech-To-Text seçilmişdir, çünki o, xidmətdən istifadə üçün əlamət əldə etməyə imkan verir və bu, bütün il ərzində davam edəcək.

Qarşılaşdığımız ikinci problem C++ dilinin bəzi çatışmazlıqları ilə bağlıdır - mərkəzləşdirilmiş repozitoriyanın olmadığı şəraitdə müxtəlif kitabxanaların zooparkı. Belə olur ki, Telegram Desktop bir çox digər versiyaya aid kitabxanalardan asılıdır. Rəsmi depoda var təlim layihənin yığılması üçün. Həm də, məsələn, tikinti problemləri ilə bağlı çox sayda açıq məsələlər vaxt и два. Bütün problemlər quruculuq skriptinin Ubuntu 14.04 üçün yazılması ilə bağlı olduğu ortaya çıxdı və Ubuntu 18.04 altında teleqramı uğurla qurmaq üçün dəyişikliklər edilməli idi.

Telegram Desktop-un özünün yığılması kifayət qədər uzun vaxt aparır: Intel Core i5-7200U ilə noutbukda bütün asılılıqlarla tam montaj (bayraq -j 4) təxminən üç saat çəkir. Bunlardan təxminən 30 dəqiqə müştərinin özünü əlaqələndirməklə aparılır (sonradan məlum oldu ki, Debug konfiqurasiyasında əlaqə təxminən 10 dəqiqə çəkir), lakin hər dəfə dəyişiklik etdikdən sonra əlaqələndirmə mərhələsi təkrarlanmalıdır.

Problemlərə baxmayaraq, biz düşünülmüş ideyanı həyata keçirə bildik, həm də yeniləməyə nail olduq skript qurmaq Ubuntu 18.04 üçün. Əsərin nümayişinə burada baxmaq olar əlaqə. Biz həmçinin bir neçə animasiyalar daxildir. Bütün səsli mesajların yanında mesajı mətnə ​​çevirməyə imkan verən düymə peyda olub. Sağ klikləməklə, əlavə olaraq yayım üçün istifadə ediləcək dili təyin edə bilərsiniz. By əlaqə müştəri yükləmək üçün mövcuddur.

Repozitoriya.

Fikrimizcə, bir çox istifadəçi üçün rahat olacaq funksionallıq Konsepsiyasının yaxşı sübutu olduğu ortaya çıxdı. Ümid edirik ki, bunu Telegram Desktop-un gələcək buraxılışlarında görəcəyik.

IntelliJ IDEA-da Təkmilləşdirilmiş Təbii Dil Dəstəyi

Hackathon DevDays'19 (hissə 2): IntelliJ IDEA-da Telegram və qrammatika yoxlaması üçün audio mesaj analizatoru

İdeya müəllifidir

Tankov Vladislav

Düzəliş

Tankov Vladislav (komanda rəhbəri, LanguageTool və IntelliJ IDEA ilə işləyir)
Nikita Sokolov (LanguageTool ilə işləmək və UI yaratmaq)
Xvorov Alexander (LanguageTool ilə işləyir və performansı optimallaşdırır)
Sadovnikov Alexander (işarələmə dillərinin və kodun təhlili üçün dəstək)

Biz IntelliJ IDEA üçün müxtəlif mətnləri (şərhlər və sənədlər, koddakı hərfi xətlər, Markdown-da formatlanmış mətn və ya XML işarələməsi) qrammatik, orfoqrafik və üslub dəqiqliyi (ingilis dilində buna proofreading adlanır) üçün yoxlayan plagin hazırlamışıq.

Layihənin ideyası IntelliJ IDEA standart orfoqrafiya yoxlamasını Grammarly miqyasına qədər genişləndirmək, IDE daxilində bir növ Grammarly etmək idi.

Nə baş verdiyini görə bilərsiniz по ссылке.

Yaxşı, aşağıda plaqinin imkanları, həmçinin onun yaradılması zamanı yaranan çətinliklər haqqında daha ətraflı danışacağıq.

Motivasiya

Təbii dillərdə mətn yazmaq üçün nəzərdə tutulmuş bir çox məhsul var, lakin sənədlər və kod şərhləri ən çox inkişaf mühitlərində yazılır. Eyni zamanda, IDE-lər kodda səhvləri tapmaqda əla iş görür, lakin təbii dillərdə mətnlər üçün zəif uyğun gəlir. Bu, inkişaf mühiti onlara işarə etmədən qrammatika, durğu işarələri və ya üslubda səhvlər etməyi çox asanlaşdırır. İstifadəçi interfeysini yazarkən səhv etmək çox vacibdir, çünki bu, yalnız kodun başa düşülməsinə deyil, həm də hazırlanmış tətbiqin istifadəçilərinə də təsir edəcəkdir.

Ən populyar və inkişaf etmiş inkişaf mühitlərindən biri IntelliJ IDEA, həmçinin IntelliJ Platformasına əsaslanan IDE-lərdir. IntelliJ Platformasında artıq daxili orfoqrafiya yoxlayıcısı var, lakin o, hətta ən sadə qrammatik səhvlərdən də xilas olmur. Biz məşhur təbii dil analiz sistemlərindən birini IntelliJ IDEA-ya inteqrasiya etmək qərarına gəldik.

Tətbiq

Hackathon DevDays'19 (hissə 2): IntelliJ IDEA-da Telegram və qrammatika yoxlaması üçün audio mesaj analizatoruBiz özümüzə öz mətn yoxlama sistemimizi yaratmaq vəzifəsini qoymadıq, ona görə də mövcud həll yolu istifadə etdik. Ən uyğun variant olduğu ortaya çıxdı Dil vasitəsi. Lisenziya bizə ondan məqsədlərimiz üçün sərbəst istifadə etməyə imkan verdi: pulsuzdur, Java-da yazılmışdır və açıq mənbəlidir. Bundan əlavə, 25 dili dəstəkləyir və on beş ildən çoxdur ki, inkişaf etdirilir. Açıqlığına baxmayaraq, LanguageTool pullu mətn yoxlama həlləri üçün ciddi rəqibdir və yerli olaraq işləyə bilməsi sözün əsl mənasında onun öldürücü xüsusiyyətidir.

Plugin kodu içəridədir GitHub-da depolar. Bütün layihə UI üçün kiçik Java əlavəsi ilə Kotlin dilində yazılmışdır. Hackathon zamanı biz Markdown, JavaDoc, HTML və Plain Text üçün dəstəyi həyata keçirə bildik. Hackathondan sonra böyük bir yeniləmə XML, Java, Kotlin və Python dillərində string literals və orfoqrafiya yoxlaması üçün dəstək əlavə etdi.

Çətinliklər

Çox tez başa düşdük ki, hər dəfə yoxlama üçün bütün mətni LanguageTool-a ötürsək, IDEA interfeysi daha çox və ya daha az ciddi mətndə donacaq, çünki yoxlama özü UI axınını bloklayır. Problem `ProgressManager.checkCancelled` yoxlanışı vasitəsilə həll edildi - IDEA yoxlamanı dayandırmağın vaxtının gəldiyinə inanarsa, bu funksiya istisna yaradır.

Bu, donmaları tamamilə aradan qaldırdı, lakin istifadə etmək mümkün deyil: mətni emal etmək çox uzun vaxt aparır. Üstəlik, bizim vəziyyətimizdə çox vaxt mətnin çox kiçik bir hissəsi dəyişir və biz nəticələri birtəhər yaddaşda saxlamaq istəyirik. Biz məhz belə etdik. Hər dəfə hər şeyi yoxlamamaq üçün mətni qəti şəkildə parçalara ayırdıq və yalnız dəyişmişləri yoxladıq. Mətnlər böyük ola bildiyindən və önbelleği yükləmək istəmədiyimiz üçün biz mətnlərin özlərini deyil, onların hashlarını saxladıq. Bu, plaqinin hətta böyük fayllarda da rəvan işləməsinə imkan verdi.

LanguageTool 25-dən çox dili dəstəkləyir, lakin hər hansı bir istifadəçinin hamısına ehtiyac duyması ehtimalı azdır. İstəyə uyğun olaraq müəyyən bir dil üçün kitabxanaları yükləmək imkanı vermək istədim (UI-də qeyd etsəniz). Biz bunu hətta həyata keçirdik, lakin çox mürəkkəb və etibarsız olduğu ortaya çıxdı. Xüsusilə, biz LanguageTool-u ayrı bir sinif yükləyicisindən istifadə edərək yeni dillər dəsti ilə yükləməli və sonra diqqətlə işə salmalı olduq. Eyni zamanda, bütün kitabxanalar istifadəçi .m2 deposunda idi və hər başlanğıcda onların bütövlüyünü yoxlamaq məcburiyyətində qaldıq. Sonda qərara gəldik ki, əgər istifadəçilərin plaqinin ölçüsü ilə bağlı problemləri olarsa, o zaman bir neçə ən populyar dillər üçün ayrıca plagin təqdim edəcəyik.

Hackathondan sonra

Hackathon başa çatdı, lakin plagin üzərində iş daha dar bir komanda ilə davam etdi. Mən sətirləri, şərhləri və hətta dəyişən və sinif adları kimi dil konstruksiyalarını dəstəkləmək istədim. Hal-hazırda bu, yalnız Java, Kotlin və Python üçün dəstəklənir, lakin bu siyahının artacağına ümid edirik. Biz bir çox kiçik səhvləri düzəltdik və Idea-nın daxili orfoqrafiya yoxlayıcısı ilə daha uyğunlaşdıq. Bundan əlavə, XML dəstəyi və orfoqrafiya yoxlanışı ortaya çıxdı. Bütün bunları bu yaxınlarda dərc etdiyimiz ikinci versiyada tapmaq olar.

Növbəti nədir?

Belə bir plagin təkcə tərtibatçılar üçün deyil, həm də texniki yazıçılar üçün faydalı ola bilər (tez-tez, məsələn, IDE-də XML ilə işləyir). Hər gün mümkün səhvlər haqqında redaktor məsləhətləri şəklində köməkçi olmadan təbii dillə işləmək məcburiyyətindədirlər. Pluginimiz bu cür göstərişlər verir və bunu yüksək dərəcədə dəqiqliklə edir.
Biz həm yeni dillər əlavə etməklə, həm də mətn yoxlamasını təşkil etmək üçün ümumi yanaşmanı araşdıraraq plaqini inkişaf etdirməyi planlaşdırırıq. Bizim yaxın planlarımıza stilistik profillərin həyata keçirilməsi (mətn üçün üslub bələdçisini müəyyən edən qaydalar toplusu, məsələn, “yazmayın, tam formanı yazın”), lüğətin genişləndirilməsi və istifadəçi interfeysinin təkmilləşdirilməsi (xüsusilə, istifadəçiyə sadəcə bir sözü görməməzlikdən gəlmək deyil, onu nitq hissəsini göstərərək lüğətə əlavə etmək imkanı vermək istəyirik).

Mənbə: www.habr.com

Добавить комментарий