Tunaendelea kuzungumza juu ya miradi ya spring hackathon DevDays, ambayo wanafunzi wa programu ya bwana walishiriki.
Kwa njia, tungependa kuwaalika wasomaji kujiunga
Kichanganuzi cha Ujumbe wa Sauti kwenye Eneo-kazi la Telegraph
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++.
Kulikuwa 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.
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
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
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
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
Hatukujiwekea jukumu la kuunda mfumo wetu wa uthibitishaji wa maandishi, kwa hivyo tulitumia suluhisho lililopo. Chaguo la kufaa zaidi liligeuka kuwa
Msimbo wa programu-jalizi umeingia
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