DevDays'19 Hackathon (Sehemu ya 2): Kichanganuzi cha Ujumbe wa Sauti kwa Telegramu na Kikagua Sarufi katika IntelliJ IDEA

Tunaendelea kuzungumza juu ya miradi ya spring hackathon DevDays, ambayo wanafunzi wa programu ya bwana walishiriki. "Maendeleo ya Programu / Uhandisi wa Programu".

Hackathon DevDays'19 (sehemu ya 2): kichanganuzi cha ujumbe wa sauti kwa Telegraph na ukaguzi wa sarufi katika IntelliJ IDEA

Kwa njia, tungependa kuwaalika wasomaji kujiunga Kikundi cha VK cha wanafunzi wa bwana. Ndani yake tutachapisha habari za hivi punde kuhusu kuajiri na kusoma. Video kutoka kwa siku ya wazi pia inaweza kupatikana kwenye kikundi. Tunakukumbusha: tukio litafanyika Aprili 29, maelezo online.

Kichanganuzi cha Ujumbe wa Sauti kwenye Eneo-kazi la Telegraph

Hackathon DevDays'19 (sehemu ya 2): kichanganuzi cha ujumbe wa sauti kwa Telegraph na ukaguzi wa sarufi katika IntelliJ IDEA

Mwandishi wa wazo
Khoroshev Artyom

Mpangilio

Khoroshev Artem - meneja wa mradi / msanidi / QA
Eliseev Anton - mchambuzi wa biashara / mtaalamu wa masoko
Maria Kuklina - mbuni wa UI / msanidi programu
Bakhvalov Pavel - Mbuni wa UI/msanidi/QA

Kwa mtazamo wetu, Telegram ni mjumbe wa kisasa na rahisi, na toleo lake la PC ni maarufu na chanzo wazi, ambayo inafanya uwezekano wa kurekebisha. Mteja hutoa utendaji tajiri kabisa. Mbali na ujumbe wa kawaida wa maandishi, ina simu za sauti, ujumbe wa video na ujumbe wa sauti. Na ni ya mwisho ambayo wakati mwingine huleta usumbufu kwa mpokeaji wao. Mara nyingi haiwezekani kusikiliza ujumbe wa sauti ukiwa kwenye kompyuta au kompyuta ndogo. Kunaweza kuwa na kelele iliyoko, ukosefu wa vipokea sauti vya masikioni, au hutaki mtu yeyote asikie yaliyomo kwenye ujumbe. Shida kama hizo karibu hazitokei ikiwa unatumia Telegraph kwenye simu mahiri, kwa sababu unaweza kuileta kwenye sikio lako, tofauti na kompyuta ndogo au PC. Tulijaribu kutatua tatizo hili.

Lengo la mradi wetu katika DevDays lilikuwa kuongeza uwezo wa kutafsiri ujumbe wa sauti uliopokewa kuwa maandishi kwa mteja wa eneo-kazi la Telegram (hapa inajulikana kama Telegram Desktop).

Analogues zote kwa sasa ni roboti ambazo unaweza kutuma ujumbe wa sauti na kupokea maandishi kujibu. Hatujafurahishwa sana na hili: kusambaza ujumbe kwa bot sio rahisi sana; tungependa kuwa na utendakazi asilia. Kwa kuongeza, bot yoyote ni mhusika wa tatu ambaye hufanya kazi kama mpatanishi kati ya API ya utambuzi wa usemi na mtumiaji, na hii ni, kwa kiwango cha chini, si salama.

Kama ilivyoelezwa hapo awali, telegram-desktop ina faida mbili muhimu: urahisi na kasi ya uendeshaji. Na hii sio bahati mbaya, kwa sababu imeandikwa kabisa katika C ++. Na kwa kuwa tuliamua kuongeza utendakazi mpya moja kwa moja kwa mteja, tulilazimika kuikuza katika C++.

Hackathon DevDays'19 (sehemu ya 2): kichanganuzi cha ujumbe wa sauti kwa Telegraph na ukaguzi wa sarufi katika IntelliJ IDEAKulikuwa na watu 4 katika timu yetu. Hapo awali, watu wawili walikuwa wakitafuta maktaba inayofaa kwa utambuzi wa hotuba, mtu mmoja alikuwa akisoma nambari ya chanzo ya Telegraph-desktop, mwingine alikuwa akipeleka mradi wa ujenzi. Telegramu Desktop. Baadaye, kila mtu alikuwa na kazi ya kurekebisha UI na kurekebisha hitilafu.

Ilionekana kuwa kutekeleza utendakazi uliokusudiwa haitakuwa ngumu, lakini, kama kawaida hufanyika, shida ziliibuka.

Suluhisho la tatizo lilikuwa na kazi ndogo mbili huru: kuchagua zana inayofaa ya utambuzi wa usemi na kutekeleza UI kwa utendakazi mpya.

Wakati wa kuchagua maktaba ya utambuzi wa sauti, tulilazimika kuacha mara moja API zote za nje ya mtandao, kwa sababu miundo ya lugha inachukua nafasi nyingi. Lakini tunazungumza juu ya lugha moja tu. Ilionekana wazi kwamba tutalazimika kutumia API ya mtandaoni. Baadaye ikawa kwamba huduma za utambuzi wa hotuba za makubwa kama Google, Yandex na Microsoft sio bure kabisa, na tutalazimika kuridhika na kipindi cha majaribio. Kwa hiyo, Google Speech-To-Text ilichaguliwa kwa sababu inakuwezesha kupata tokeni ya kutumia huduma, ambayo itaendelea kwa mwaka mzima.

Shida ya pili tuliyokumbana nayo inahusiana na baadhi ya mapungufu ya C++ - zoo ya maktaba mbalimbali kwa kukosekana kwa hazina kuu. Inatokea kwamba Kompyuta ya Telegraph inategemea maktaba zingine nyingi maalum za toleo. Hifadhi rasmi ina maelekezo kwa ajili ya kuunganisha mradi. Na pia idadi kubwa ya masuala ya wazi kuhusu matatizo ya kujenga, kwa mfano wakati ΠΈ Π΄Π²Π°. Matatizo yote yaligeuka kuwa yanahusiana na ukweli kwamba hati ya kujenga iliandikwa kwa Ubuntu 14.04, na ili kufanikiwa kujenga telegram chini ya Ubuntu 18.04, mabadiliko yalipaswa kufanywa.

Telegram Desktop yenyewe inachukua muda mrefu sana kukusanyika: kwenye kompyuta ya mkononi yenye Intel Core i5-7200U, mkusanyiko kamili (bendera -j 4) na utegemezi wote huchukua saa tatu. Kati ya hizi, kama dakika 30 huchukuliwa kwa kuunganisha mteja yenyewe (baadaye ikawa kwamba katika usanidi wa Debug, kuunganisha huchukua muda wa dakika 10), lakini hatua ya kuunganisha inapaswa kurudiwa kila wakati baada ya kufanya mabadiliko.

Licha ya shida, tuliweza kutekeleza wazo lililoundwa, na pia kusasisha tengeneza hati kwa Ubuntu 18.04. Maonyesho ya kazi yanaweza kuonekana kiungo. Pia tunajumuisha uhuishaji kadhaa. Kitufe kimeonekana karibu na ujumbe wote wa sauti, huku kuruhusu kutafsiri ujumbe kwa maandishi. Kwa kubofya kulia, unaweza kubainisha zaidi lugha ambayo itatumika kwa utangazaji. Na kiungo mteja inapatikana kwa kupakuliwa.

Hifadhi.

Kwa maoni yetu, iligeuka kuwa Uthibitisho mzuri wa Dhana ya utendaji ambayo itakuwa rahisi kwa watumiaji wengi. Tunatumai kuiona katika matoleo yajayo ya Telegram Desktop.

Usaidizi wa Lugha Asilia ulioimarishwa katika IDEA ya IntelliJ

Hackathon DevDays'19 (sehemu ya 2): kichanganuzi cha ujumbe wa sauti kwa Telegraph na ukaguzi wa sarufi katika IntelliJ IDEA

Mwandishi wa wazo

Tankov Vladislav

Mpangilio

Tankov Vladislav (kiongozi wa timu, anayefanya kazi na LanguageTool na IntelliJ IDEA)
Nikita Sokolov (anafanya kazi na LanguageTool na kuunda UI)
Khvorov Alexander (anafanya kazi na LanguageTool na kuongeza utendaji)
Sadovnikov Alexander (msaada wa kuchanganua lugha za alama na nambari)

Tumeunda programu-jalizi ya IntelliJ IDEA ambayo hukagua maandishi mbalimbali (maoni na uwekaji kumbukumbu, mistari halisi katika msimbo, maandishi yaliyoumbizwa katika Markdown au alama ya XML) kwa usahihi wa kisarufi, tahajia na kimtindo (kwa Kiingereza hii inaitwa kusahihisha).

Wazo la mradi lilikuwa kupanua kikagua tahajia cha IntelliJ IDEA hadi kiwango cha Sarufi, ili kutengeneza aina ya Sarufi ndani ya IDE.

Unaweza kuona kilichotokea ΠΏΠΎ ссылкС.

Kweli, hapa chini tutazungumza kwa undani zaidi juu ya uwezo wa programu-jalizi, na vile vile shida zilizotokea wakati wa uundaji wake.

Motisha

Kuna bidhaa nyingi iliyoundwa kwa ajili ya kuandika maandishi katika lugha asilia, lakini hati na maoni ya msimbo mara nyingi huandikwa katika mazingira ya maendeleo. Wakati huo huo, IDE hufanya kazi nzuri ya kutafuta makosa katika msimbo, lakini haifai kwa maandishi katika lugha asilia. Hii hurahisisha sana kufanya makosa katika sarufi, uakifishaji au mtindo bila mazingira ya ukuzaji kuyaelekeza. Ni muhimu sana kufanya makosa katika kuandika kiolesura cha mtumiaji, kwani hii haitaathiri tu uelewa wa msimbo, lakini pia watumiaji wa programu iliyotengenezwa wenyewe.

Mojawapo ya mazingira maarufu na yaliyoendelea ya maendeleo ni IntelliJ IDEA, pamoja na IDE kulingana na IntelliJ Platform. IntelliJ Platform tayari ina kikagua tahajia kilichojengewa ndani, lakini haiondoi hata makosa rahisi ya kisarufi. Tuliamua kujumuisha mojawapo ya mifumo maarufu ya uchanganuzi wa lugha asilia katika IntelliJ IDEA.

Utekelezaji

Hackathon DevDays'19 (sehemu ya 2): kichanganuzi cha ujumbe wa sauti kwa Telegraph na ukaguzi wa sarufi katika IntelliJ IDEAHatukujiwekea jukumu la kuunda mfumo wetu wa uthibitishaji wa maandishi, kwa hivyo tulitumia suluhisho lililopo. Chaguo la kufaa zaidi liligeuka kuwa LughaTaol. Leseni ilituruhusu kuitumia bila malipo kwa madhumuni yetu: ni bure, imeandikwa katika Java na chanzo-wazi. Kwa kuongezea, inasaidia lugha 25 na imekuwa katika maendeleo kwa zaidi ya miaka kumi na tano. Licha ya uwazi wake, LanguageTool ni mshindani mkubwa wa suluhu za uthibitishaji wa maandishi yaliyolipiwa, na ukweli kwamba inaweza kufanya kazi ndani ya nchi ni kipengele chake cha kuua.

Msimbo wa programu-jalizi umeingia hazina kwenye GitHub. Mradi mzima uliandikwa Kotlin na nyongeza ndogo ya Java kwa UI. Wakati wa udukuzi, tuliweza kutekeleza usaidizi wa Markdown, JavaDoc, HTML na Nakala Wazi. Baada ya hackathon, sasisho kuu liliongeza usaidizi wa XML, maandishi ya kamba katika Java, Kotlin na Python, na ukaguzi wa tahajia.

Matatizo

Haraka sana tuligundua kwamba ikiwa tutalisha maandishi yote kwa LanguageTool kwa ukaguzi kila wakati, basi kiolesura cha IDEA kitaganda kwenye maandishi yoyote mazito zaidi au duni, kwa kuwa ukaguzi wenyewe huzuia mtiririko wa UI. Tatizo lilitatuliwa kupitia tiki ya `ProgressManager.checkCancelled` - chaguo hili la kukokotoa linatoa kighairi ikiwa IDEA inaamini kuwa ni wakati wa kukomesha ukaguzi.

Hii iliondoa kabisa kufungia, lakini haiwezekani kutumia: maandishi huchukua muda mrefu sana kusindika. Zaidi ya hayo, kwa upande wetu, mara nyingi sehemu ndogo sana ya maandishi hubadilika na tunataka kuweka matokeo kwa namna fulani. Ndivyo tulivyofanya. Ili tusiangalie kila kitu kila wakati, tuligawanya maandishi vipande vipande na kuangalia yale tu ambayo yamebadilika. Kwa kuwa maandishi yanaweza kuwa makubwa na hatukutaka kupakia cache, hatukuhifadhi maandishi yenyewe, lakini hashi zao. Hii iliruhusu programu-jalizi kufanya kazi vizuri hata kwenye faili kubwa.

LughaTool inasaidia zaidi ya lugha 25, lakini hakuna uwezekano kwamba mtumiaji yeyote anazihitaji zote. Nilitaka kutoa fursa ya kupakua maktaba kwa lugha mahususi baada ya ombi (ikiwa utaweka alama kwenye kiolesura). Sisi hata tulitekeleza hili, lakini iligeuka kuwa ngumu sana na isiyoaminika. Hasa, tulilazimika kupakia LanguageTool na seti mpya ya lugha kwa kutumia kipakiaji tofauti cha darasa, na kisha kuianzisha kwa uangalifu. Wakati huo huo, maktaba zote zilikuwa kwenye hazina ya mtumiaji .m2, na katika kila mwanzo tulilazimika kuangalia uadilifu wao. Mwishowe, tuliamua kwamba ikiwa watumiaji walikuwa na shida na saizi ya programu-jalizi, basi tutatoa programu-jalizi tofauti kwa lugha kadhaa maarufu.

Baada ya hackathon

Hackathon iliisha, lakini kazi kwenye programu-jalizi iliendelea na timu nyembamba. Nilitaka kuunga mkono masharti, maoni, na hata miundo ya lugha kama vile majina ya kutofautisha na ya darasa. Hivi sasa hii inatumika tu kwa Java, Kotlin na Python, lakini tunatumai orodha hii itakua. Tumerekebisha hitilafu nyingi ndogo na kupatana zaidi na Kikagua tahajia kilichojengewa ndani cha Idea. Kwa kuongeza, usaidizi wa XML na ukaguzi wa tahajia umeonekana. Yote hii inaweza kupatikana katika toleo la pili, ambalo tulichapisha hivi karibuni.

Nini hapo?

Plugin hiyo inaweza kuwa na manufaa si tu kwa watengenezaji, lakini pia kwa waandishi wa kiufundi (mara nyingi hufanya kazi, kwa mfano, na XML katika IDE). Kila siku wanapaswa kufanya kazi na lugha ya asili, bila kuwa na msaidizi kwa namna ya vidokezo vya mhariri kuhusu makosa iwezekanavyo. Programu-jalizi yetu hutoa vidokezo kama hivyo na huifanya kwa kiwango cha juu cha usahihi.
Tunapanga kuendeleza programu-jalizi, kwa kuongeza lugha mpya na kwa kuchunguza mbinu ya jumla ya kupanga ukaguzi wa maandishi. Mipango yetu ya haraka ni pamoja na utekelezaji wa wasifu wa kimtindo (seti za sheria zinazofafanua mwongozo wa mtindo wa maandishi, kwa mfano, "usiandike kwa mfano, lakini uandike fomu kamili"), kupanua kamusi na kuboresha kiolesura cha mtumiaji (hasa; tunataka kumpa mtumiaji fursa sio tu kupuuza neno, lakini kuliongeza kwenye kamusi, kuonyesha sehemu ya hotuba).

Chanzo: www.habr.com

Kuongeza maoni