Hackathon DevDays'19 (մաս 2). աուդիո հաղորդագրությունների վերլուծիչ IntelliJ IDEA-ում Telegram-ի և քերականության ստուգման համար

Շարունակում ենք խոսել DevDays գարնանային հաքաթոնի նախագծերի մասին, որին մասնակցել են մագիստրատուրայի ուսանողները։ «Ծրագրային ապահովման մշակում / Ծրագրային ճարտարագիտություն».

Hackathon DevDays'19 (մաս 2). աուդիո հաղորդագրությունների վերլուծիչ IntelliJ IDEA-ում Telegram-ի և քերականության ստուգման համար

Ի դեպ, ուզում ենք ընթերցողներին հրավիրել միանալու Մագիստրատուրայի ուսանողների VK խումբ. Դրանում մենք կհրապարակենք հավաքագրման և ուսման մասին վերջին նորությունները: Խմբում կարելի է գտնել նաև տեսանյութ բաց դռների օրվանից։ Հիշեցնենք՝ միջոցառումը տեղի կունենա ապրիլի 29-ին, մանրամասներ առցանց.

Telegram աշխատասեղանի ձայնային հաղորդագրությունների վերլուծիչ

Hackathon DevDays'19 (մաս 2). աուդիո հաղորդագրությունների վերլուծիչ IntelliJ IDEA-ում Telegram-ի և քերականության ստուգման համար

Գաղափարի հեղինակը
Խորոշև Արտյոմ

Թիմի կազմը

Խորոշև Արտեմ – ծրագրի ղեկավար/մշակող/QA
Էլիզեև Անտոն – բիզնես վերլուծաբան/մարքեթինգի մասնագետ
Մարիա Կուկլինա – UI դիզայներ/մշակող
Բախվալով Պավել – UI դիզայներ/մշակող/QA

Մեր տեսանկյունից, Telegram-ը ժամանակակից և հարմար մեսենջեր է, և դրա PC տարբերակը հանրաճանաչ է և բաց կոդով, ինչը հնարավորություն է տալիս փոփոխել այն։ Հաճախորդն առաջարկում է բավականին հարուստ ֆունկցիոնալություն: Բացի ստանդարտ տեքստային հաղորդագրություններից, այն պարունակում է ձայնային զանգեր, տեսահաղորդագրություններ և ձայնային հաղորդագրություններ: Եվ հենց վերջիններս երբեմն անհարմարություններ են պատճառում իրենց հասցեատիրոջը։ Հաճախ հնարավոր չէ ձայնային հաղորդագրություն լսել համակարգչում կամ նոութբուքում աշխատելիս: Հնարավոր է շրջակա միջավայրի աղմուկ, ականջակալների բացակայություն կամ չցանկանաք, որ որևէ մեկը լսի հաղորդագրության բովանդակությունը: Նման խնդիրներ գրեթե երբեք չեն առաջանում, եթե դուք օգտագործում եք Telegram-ը սմարթֆոնի վրա, քանի որ այն կարող եք պարզապես մոտեցնել ձեր ականջին, ի տարբերություն նոութբուքի կամ համակարգչի։ Մենք փորձեցինք լուծել այս խնդիրը։

DevDays-ում մեր նախագծի նպատակն էր ավելացնել ստացված ձայնային հաղորդագրությունները տեքստի թարգմանելու հնարավորություն Telegram-ի աշխատասեղանի հաճախորդին (այսուհետ՝ Telegram Desktop):

Այս պահին բոլոր անալոգները բոտեր են, որոնց կարելի է ձայնային հաղորդագրություն ուղարկել և ի պատասխան ստանալ տեքստ: Մենք այդքան էլ գոհ չենք դրանով. հաղորդագրություն ուղարկելը բոտին այնքան էլ հարմար չէ, մենք կցանկանայինք ունենալ հայրենի ֆունկցիոնալություն: Բացի այդ, ցանկացած բոտ երրորդ կողմ է, որը հանդես է գալիս որպես միջնորդ խոսքի ճանաչման API-ի և օգտատիրոջ միջև, և դա առնվազն վտանգավոր է:

Ինչպես նշվեց ավելի վաղ, Telegram-desktop-ն ունի երկու նշանակալի առավելություն՝ աշխատանքի հեշտությունը և արագությունը: Եվ սա պատահական չէ, քանի որ այն ամբողջությամբ գրված է C++-ով։ Եվ քանի որ մենք որոշեցինք ուղղակիորեն հաճախորդին ավելացնել նոր ֆունկցիոնալություն, մենք ստիպված էինք այն զարգացնել C++-ով:

Hackathon DevDays'19 (մաս 2). աուդիո հաղորդագրությունների վերլուծիչ IntelliJ IDEA-ում Telegram-ի և քերականության ստուգման համարՄեր թիմում 4 հոգի էին։ Սկզբում երկու հոգի փնտրում էին խոսքի ճանաչման համար հարմար գրադարան, մեկը ուսումնասիրում էր Telegram-desktop-ի սկզբնական կոդը, մյուսը՝ կառուցապատման նախագիծը։ Telegram Desktop. Հետագայում բոլորը զբաղված էին UI-ի շտկմամբ և վրիպազերծմամբ:

Թվում էր, թե նախատեսված ֆունկցիոնալությունն իրականացնելը դժվար չի լինի, բայց, ինչպես միշտ է պատահում, դժվարություններ առաջացան։

Խնդրի լուծումը բաղկացած էր երկու անկախ ենթաառաջադրանքից՝ խոսքի ճանաչման հարմար գործիքի ընտրություն և նոր ֆունկցիոնալության համար միջերեսի ներդրում:

Ձայնի ճանաչման համար գրադարան ընտրելիս մենք անմիջապես ստիպված եղանք հրաժարվել բոլոր օֆլայն API-ներից, քանի որ լեզվական մոդելները շատ տեղ են զբաղեցնում: Բայց մենք խոսում ենք միայն մեկ լեզվի մասին. Պարզ դարձավ, որ մենք պետք է օգտագործենք առցանց API-ն։ Ավելի ուշ պարզվեց, որ Google-ի, Yandex-ի և Microsoft-ի նման հսկաների խոսքի ճանաչման ծառայություններն ամենևին էլ անվճար չեն, և մենք ստիպված կլինենք բավարարվել փորձաշրջանով։ Արդյունքում ընտրվել է Google Speech-To-Text, քանի որ այն թույլ է տալիս ստանալ ծառայությունից օգտվելու նշան, որը կտևի մի ամբողջ տարի։

Երկրորդ խնդիրը, որին մենք հանդիպեցինք, կապված է C++-ի որոշ թերությունների հետ՝ տարբեր գրադարանների կենդանաբանական այգի կենտրոնացված պահեստի բացակայության դեպքում: Պատահում է, որ Telegram Desktop-ը կախված է բազմաթիվ այլ տարբերակի հատուկ գրադարաններից: Պաշտոնական պահոցն ունի հրահանգավորում նախագիծը հավաքելու համար: Եվ նաև մեծ թվով բաց հարցեր շինարարական խնդիրների վերաբերյալ, օրինակ ժամանակ и два. Պարզվեց, որ բոլոր խնդիրները կապված են այն բանի հետ, որ build script-ը գրվել է Ubuntu 14.04-ի համար, և Ubuntu 18.04-ի տակ հեռագիր հաջողությամբ կառուցելու համար պետք էր փոփոխություններ կատարել։

Telegram Desktop-ն ինքնին բավականին երկար ժամանակ է պահանջում հավաքելու համար. Intel Core i5-7200U նոութբուքի վրա ամբողջական հավաքումը (դրոշ -j 4) բոլոր կախվածություններով տևում է մոտ երեք ժամ: Դրանցից մոտ 30 րոպեն ծախսվում է հենց հաճախորդին միացնելով (հետագայում պարզվեց, որ Debug-ի կոնֆիգուրացիայի մեջ կապը տևում է մոտ 10 րոպե), սակայն կապի փուլը պետք է կրկնվի ամեն անգամ փոփոխություններ կատարելուց հետո։

Չնայած խնդիրներին՝ մեզ հաջողվեց կյանքի կոչել մտահղացումը, ինչպես նաև թարմացնել կառուցել սցենար Ubuntu 18.04-ի համար: Աշխատանքի ցուցադրությունը կարելի է տեսնել այստեղ ՈՒղեցույց. Մենք նաև ներառում ենք մի քանի անիմացիաներ։ Բոլոր ձայնային հաղորդագրությունների կողքին հայտնվել է կոճակ, որը թույլ է տալիս հաղորդագրությունը թարգմանել տեքստի: Աջ սեղմելով՝ կարող եք լրացուցիչ նշել այն լեզուն, որը կօգտագործվի հեռարձակման համար։ Ըստ ՈՒղեցույց հաճախորդը հասանելի է ներբեռնման համար:

Պահեստարան.

Մեր կարծիքով, այն ֆունկցիոնալության հայեցակարգի լավ ապացույց է, որը հարմար կլինի շատ օգտատերերի համար: Հուսով ենք, որ դա կտեսնենք Telegram Desktop-ի հետագա թողարկումներում:

Ընդլայնված բնական լեզվի աջակցություն IntelliJ IDEA-ում

Hackathon DevDays'19 (մաս 2). աուդիո հաղորդագրությունների վերլուծիչ IntelliJ IDEA-ում Telegram-ի և քերականության ստուգման համար

Գաղափարի հեղինակը

Տանկով Վլադիսլավ

Թիմի կազմը

Տանկով Վլադիսլավ (թիմի ղեկավար, աշխատում է LanguageTool-ի և IntelliJ IDEA-ի հետ)
Նիկիտա Սոկոլով (աշխատում է LanguageTool-ի հետ և ստեղծում UI)
Խվորով Ալեքսանդր (աշխատում է LanguageTool-ի հետ և օպտիմիզացնում է կատարումը)
Սադովնիկով Ալեքսանդր (նշման լեզուների և կոդերի վերլուծության աջակցություն)

Մենք մշակել ենք պլագին IntelliJ IDEA-ի համար, որը ստուգում է տարբեր տեքստեր (մեկնաբանություններ և փաստաթղթեր, բառացի տողեր կոդի մեջ, տեքստը ձևաչափված է Markdown-ով կամ XML նշումով) քերականական, ուղղագրական և ոճական ճշգրտության համար (անգլերենում դա կոչվում է սրբագրում):

Նախագծի գաղափարն էր ընդլայնել IntelliJ IDEA-ի ստանդարտ ուղղագրության ստուգումը Grammarly-ի մասշտաբով՝ IDE-ի ներսում մի տեսակ Grammarly ստեղծելու համար:

Դուք կարող եք տեսնել, թե ինչ է տեղի ունեցել по ссылке.

Դե, ստորև մենք ավելի մանրամասն կխոսենք plugin-ի հնարավորությունների, ինչպես նաև դրա ստեղծման ընթացքում առաջացած դժվարությունների մասին։

Մոտիվացիա

Կան բազմաթիվ ապրանքներ, որոնք նախատեսված են բնական լեզուներով տեքստ գրելու համար, սակայն փաստաթղթերը և կոդի մեկնաբանությունները առավել հաճախ գրվում են զարգացման միջավայրերում: Միևնույն ժամանակ, IDE-ները հիանալի աշխատանք են կատարում կոդում սխալներ գտնելու հարցում, սակայն վատ են պիտանի բնական լեզուներով տեքստերի համար: Սա շատ հեշտ է դարձնում սխալներ քերականության, կետադրական նշանների կամ ոճի մեջ՝ առանց զարգացման միջավայրի մատնանշման: Ամենակարևորն է սխալվել օգտատիրոջ միջերեսը գրելիս, քանի որ դա կազդի ոչ միայն կոդի հասկանալիության վրա, այլև մշակված հավելվածի օգտագործողների վրա:

Զարգացման ամենատարածված և զարգացած միջավայրերից մեկը IntelliJ IDEA-ն է, ինչպես նաև IntelliJ պլատֆորմի վրա հիմնված IDE-ները: IntelliJ Platform-ն արդեն ունի ներկառուցված ուղղագրության ստուգիչ, սակայն այն չի ազատվում նույնիսկ ամենապարզ քերականական սխալներից։ Մենք որոշեցինք ինտեգրել բնական լեզվի վերլուծության հայտնի համակարգերից մեկը 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-ն կարծում է, որ ժամանակն է ընդհատել ստուգումը:

Սա ամբողջովին վերացրեց սառեցումները, բայց դա անհնար է օգտագործել. տեքստի մշակման համար շատ երկար ժամանակ է պահանջվում: Ավելին, մեր դեպքում ամենից հաճախ տեքստի շատ փոքր մասը փոխվում է, և մենք ցանկանում ենք ինչ-որ կերպ քեշավորել արդյունքները։ Դա հենց այն է, ինչ մենք արեցինք: Որպեսզի ամեն անգամ չստուգենք ամեն ինչ, մենք դետերմինիստորեն բաժանեցինք տեքստը մասերի և ստուգեցինք միայն փոխվածները: Քանի որ տեքստերը կարող են մեծ լինել, և մենք չէինք ուզում բեռնել քեշը, մենք պահեցինք ոչ թե իրենք տեքստերը, այլ դրանց հեշերը: Սա թույլ տվեց plugin-ին սահուն աշխատել նույնիսկ մեծ ֆայլերի վրա:

LanguageTool-ն աջակցում է ավելի քան 25 լեզուների, բայց դժվար թե որևէ օգտվողի կարիք ունենա դրանք բոլորը: Ես ուզում էի հնարավորություն տալ ներբեռնել գրադարաններ կոնկրետ լեզվի համար ըստ պահանջի (եթե այն նշել եք UI-ում): Մենք նույնիսկ դա իրականացրեցինք, բայց պարզվեց, որ այն չափազանց բարդ ու անվստահելի է։ Մասնավորապես, մենք պետք է բեռնեինք LanguageTool-ը լեզուների նոր հավաքածուով՝ օգտագործելով առանձին դասի բեռնիչ, այնուհետև զգուշորեն նախաստորագրեինք այն: Միևնույն ժամանակ, բոլոր գրադարանները գտնվում էին օգտվողի .m2 պահեստում, և յուրաքանչյուր մեկնարկի ժամանակ մենք պետք է ստուգեինք դրանց ամբողջականությունը: Ի վերջո, մենք որոշեցինք, որ եթե օգտվողները խնդիրներ ունենան plugin-ի չափի հետ, ապա մենք կտրամադրենք առանձին plugin մի քանի ամենատարածված լեզուների համար:

Հեքըթոնից հետո

Հեքըթոնն ավարտվեց, բայց plugin-ի վրա աշխատանքը շարունակվեց ավելի նեղ թիմով: Ես ուզում էի աջակցել տողերի, մեկնաբանությունների և նույնիսկ լեզվական կառուցվածքների, ինչպիսիք են փոփոխականների և դասերի անունները: Ներկայումս սա աջակցվում է միայն Java-ի, Kotlin-ի և Python-ի համար, բայց մենք հուսով ենք, որ այս ցանկը կաճի: Մենք շտկել ենք բազմաթիվ փոքր սխալներ և ավելի համատեղելի ենք դարձել Idea-ի ներկառուցված ուղղագրության ստուգիչի հետ: Բացի այդ, հայտնվել են XML աջակցություն և ուղղագրության ստուգում: Այս ամենը կարելի է գտնել երկրորդ տարբերակում, որը վերջերս հրապարակեցինք։

Ինչ հաջորդ?

Նման փլագինը կարող է օգտակար լինել ոչ միայն մշակողների, այլև տեխնիկական գրողների համար (հաճախ աշխատում է, օրինակ, XML-ով IDE-ում): Ամեն օր նրանք պետք է աշխատեն բնական լեզվով, առանց օգնական ունենալու՝ հնարավոր սխալների մասին խմբագիրների խորհուրդների տեսքով։ Մեր փլագինը տալիս է նման ակնարկներ և դա անում է բարձր ճշգրտությամբ։
Մենք նախատեսում ենք զարգացնել հավելվածը՝ ինչպես նոր լեզուներ ավելացնելով, այնպես էլ տեքստի ստուգման կազմակերպման ընդհանուր մոտեցում ուսումնասիրելով: Մեր անմիջական ծրագրերը ներառում են ոճական պրոֆիլների իրականացում (կանոնների մի շարք, որոնք սահմանում են տեքստի ոճի ուղեցույց, օրինակ՝ «մի գրիր, օրինակ, գրիր ամբողջական ձևը»), բառարանի ընդլայնում և օգտատիրոջ միջերեսի բարելավում (մասնավորապես. մենք ցանկանում ենք օգտատիրոջը հնարավորություն տալ ոչ թե պարզապես անտեսել որևէ բառ, այլ ավելացնել այն բառարանում՝ նշելով խոսքի մասը):

Աղբյուրը` www.habr.com

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