Hackathon DevDays'19 (حصو 2): ٽيليگرام لاءِ آڊيو پيغام پارسر ۽ IntelliJ IDEA ۾ گرامر چيڪنگ

اسان بهار جي هيڪاٿون DevDays جي منصوبن بابت ڳالهائڻ جاري رکون ٿا، جن ۾ ماسٽر پروگرام جي شاگردن شرڪت ڪئي. "سافٽ ويئر ڊولپمينٽ / سافٽ ويئر انجنيئرنگ".

Hackathon DevDays'19 (حصو 2): ٽيليگرام لاءِ آڊيو پيغام پارسر ۽ IntelliJ IDEA ۾ گرامر چيڪنگ

رستي ۾، اسان پڙهندڙن کي شامل ٿيڻ جي دعوت ڏيڻ چاهيندا ماسٽر جي شاگردن جو VK گروپ. ان ۾ اسين نوڪرين ۽ مطالعي بابت تازيون خبرون شايع ڪنداسين. کليل ڏينهن کان هڪ وڊيو پڻ گروپ ۾ ملي سگهي ٿي. اسان توهان کي ياد ڏياريندا آهيون: واقعي 29 اپريل تي ٿيندي، تفصيل آن لائن.

ٽيليگرام ڊيسڪ ٽاپ وائس ميسيج پارسر

Hackathon DevDays'19 (حصو 2): ٽيليگرام لاءِ آڊيو پيغام پارسر ۽ IntelliJ IDEA ۾ گرامر چيڪنگ

خيال جو مصنف
خروشوف آرٽيوم

قطار ٺاهيو

Khoroshev Artem - پروجيڪٽ مئنيجر / ڊولپر / QA
Eliseev Anton - ڪاروباري تجزيه نگار / مارڪيٽنگ ماهر
ماريا ڪوڪلينا - UI ڊيزائنر / ڊولپر
Bakhvalov Pavel - UI ڊيزائنر / ڊولپر / QA

اسان جي نقطي نظر کان، ٽيليگرام هڪ جديد ۽ آسان ميسينجر آهي، ۽ ان جو پي سي نسخو مشهور ۽ اوپن سورس آهي، جيڪو ان کي تبديل ڪرڻ ممڪن بڻائي ٿو. ڪلائنٽ ڪافي امير ڪارڪردگي پيش ڪري ٿو. معياري ٽيڪسٽ پيغامن کان علاوه، ان ۾ وائس ڪالز، وڊيو پيغام، ۽ وائس پيغام شامل آهن. ۽ اهو بعد ۾ آهي جيڪو ڪڏهن ڪڏهن انهن جي وصول ڪندڙ کي تڪليف آڻيندو آهي. ڪمپيوٽر يا ليپ ٽاپ تي ويس پيغام ٻڌڻ اڪثر ممڪن ناهي. ٿي سگهي ٿو وسيع شور، هيڊ فون جي گهٽتائي، يا توهان نٿا چاهيو ته ڪو به پيغام جو مواد ٻڌي. جيڪڏهن توهان سمارٽ فون تي ٽيليگرام استعمال ڪندا آهيو ته اهڙا مسئلا تقريبا ڪڏهن به پيدا نه ٿيندا، ڇو ته توهان ليپ ٽاپ يا پي سي جي برعڪس ان کي پنهنجي ڪنن تي آڻي سگهو ٿا. اسان هن مسئلي کي حل ڪرڻ جي ڪوشش ڪئي.

DevDays تي اسان جي پروجيڪٽ جو مقصد ٽيليگرام ڊيسڪ ٽاپ ڪلائنٽ ۾ وصول ٿيل وائس پيغامن کي ٽيڪسٽ ۾ ترجمو ڪرڻ جي صلاحيت شامل ڪرڻ هو (هتي ٽيليگرام ڊيسڪ ٽاپ جو حوالو ڏنو ويو).

هن وقت سڀئي اينالاگ بوٽس آهن جن تي توهان هڪ آڊيو پيغام موڪلي سگهو ٿا ۽ جواب ۾ ٽيڪسٽ وصول ڪري سگهو ٿا. اسان ان سان ڏاڍا خوش نه آهيون: هڪ بوٽ ڏانهن پيغام اڳتي وڌڻ تمام آسان ناهي؛ اسان چاهيون ٿا ته مقامي ڪارڪردگي هجي. ان کان علاوه، ڪو به بوٽ هڪ ٽين ڌر آهي جيڪا تقرير جي سڃاڻپ API ۽ صارف جي وچ ۾ وچولي طور ڪم ڪري ٿي، ۽ اهو آهي، گهٽ ۾ گهٽ، غير محفوظ.

جيئن اڳ بيان ڪيو ويو آهي، ٽيليگرام-ڊيسڪ ٽاپ جا ٻه اهم فائدا آهن: آسان ۽ آپريشن جي رفتار. ۽ اهو ڪو اتفاق نه آهي، ڇاڪاڻ ته اهو مڪمل طور تي C++ ۾ لکيل آهي. ۽ جيئن ته اسان نئين ڪارڪردگي کي سڌو سنئون ڪلائنٽ ۾ شامل ڪرڻ جو فيصلو ڪيو، اسان کي ان کي C ++ ۾ ترقي ڪرڻو پوندو.

Hackathon DevDays'19 (حصو 2): ٽيليگرام لاءِ آڊيو پيغام پارسر ۽ IntelliJ IDEA ۾ گرامر چيڪنگاسان جي ٽيم ۾ 4 ماڻهو هئا. شروعات ۾، ٻه ماڻهو تقرير جي سڃاڻپ لاءِ مناسب لائبريري ڳولي رهيا هئا، هڪ شخص ٽيليگرام ڊيسڪ ٽاپ جو سورس ڪوڊ پڙهي رهيو هو، ٻيو ماڻهو تعميراتي پروجيڪٽ کي ترتيب ڏئي رهيو هو. ٽيليگرام ڊيسڪ ٽاپ. بعد ۾، هرڪو UI کي درست ڪرڻ ۽ ڊيبنگ ڪرڻ ۾ مصروف هو.

اهو لڳي ٿو ته ارادي ڪارڪردگي کي لاڳو ڪرڻ ڏکيو نه هوندو، پر، هميشه وانگر، مشڪلاتون پيدا ٿينديون آهن.

مسئلي جو حل ٻن آزاد ذيلي ڪمن تي مشتمل آهي: هڪ مناسب تقرير جي سڃاڻپ وارو اوزار چونڊڻ ۽ نئين ڪارڪردگي لاءِ UI لاڳو ڪرڻ.

جڏهن آواز جي سڃاڻپ لاءِ لائبريري چونڊيو، اسان کي فوري طور تي سڀني آف لائن APIs کي ڇڏڻو پوندو، ڇاڪاڻ ته ٻولي جا ماڊل تمام گهڻي جاءِ وٺن ٿا. پر اسان صرف هڪ ٻولي جي باري ۾ ڳالهائي رهيا آهيون. اهو واضح ٿيو ته اسان کي آن لائن API استعمال ڪرڻو پوندو. بعد ۾ اهو ظاهر ٿيو ته گوگل، يانڊيڪس ۽ مائڪروسافٽ جي تقرير جي سڃاڻپ جون خدمتون بلڪل مفت نه آهن، ۽ اسان کي آزمائشي مدت سان مطمئن ٿيڻو پوندو. نتيجي طور، Google Speech-To-Text چونڊيو ويو ڇاڪاڻ ته اهو توهان کي خدمت استعمال ڪرڻ لاءِ هڪ ٽوڪن حاصل ڪرڻ جي اجازت ڏئي ٿو، جيڪو سڄو سال هلندو.

ٻيو مسئلو جيڪو اسان کي سامهون آيو آهي اهو C++ جي ڪجهه نقصن سان لاڳاپيل آهي - مرڪزي ذخيري جي غير موجودگي ۾ مختلف لائبريرين جو هڪ زو. اهو ائين ٿئي ٿو ته ٽيليگرام ڊيسڪ ٽاپ ڪيترن ئي ٻين نسخن جي مخصوص لائبريرين تي منحصر آهي. سرڪاري مخزن آهي دستياب منصوبي کي گڏ ڪرڻ لاء. ۽ پڻ وڏي تعداد ۾ کليل مسئلن جي تعمير بابت مسئلن، مثال طور ڀيرا и два. سڀ مسئلا ان حقيقت سان لاڳاپيل هئا ته بلڊ اسڪرپٽ Ubuntu 14.04 لاءِ لکيو ويو هو، ۽ Ubuntu 18.04 تحت ٽيليگرام کي ڪاميابيءَ سان ٺاهڻ لاءِ، تبديليون ڪرڻيون پونديون هيون.

ٽيليگرام ڊيسڪ ٽاپ پاڻ کي گڏ ڪرڻ ۾ ڪافي وقت وٺندو آهي: هڪ ليپ ٽاپ تي هڪ Intel Core i5-7200U سان، مڪمل اسيمبلي (پرچم -j 4) سڀني انحصار سان لڳ ڀڳ ٽي ڪلاڪ لڳن ٿا. انهن مان، ڪلائنٽ پاڻ سان ڳنڍڻ ۾ اٽڪل 30 منٽ کنيا ويندا آهن (بعد ۾ اهو ظاهر ٿيو ته ڊيبگ ترتيب ۾، ڳنڍڻ لڳ ڀڳ 10 منٽ لڳن ٿا)، پر ڳنڍڻ واري اسٽيج کي هر دفعي تبديلين کان پوء بار بار ڪرڻو پوندو.

مسئلن جي باوجود، اسان منظم ڪيل خيال کي لاڳو ڪرڻ سان گڏ اپڊيٽ ڪيو اسڪرپٽ ٺاهيو Ubuntu 18.04 لاءِ. ڪم جو هڪ مظاهرو تي ڏسي سگهجي ٿو لنڪ. اسان وٽ ڪيترائي متحرڪ پڻ شامل آهن. سڀني وائس پيغامن جي اڳيان هڪ بٽڻ ظاهر ٿيو آهي، توهان کي پيغام کي متن ۾ ترجمو ڪرڻ جي اجازت ڏئي ٿو. ساڄي پاسي ڪلڪ ڪندي، توهان اضافي طور تي بيان ڪري سگھو ٿا ٻولي جيڪا نشر ڪرڻ لاءِ استعمال ڪئي ويندي. پاران لنڪ ڪلائنٽ ڊائون لوڊ لاء دستياب آهي.

مخزن.

اسان جي راء ۾، اهو ثابت ٿيو ته ڪارڪردگي جي تصور جو سٺو ثبوت جيڪو ڪيترن ئي استعمال ڪندڙن لاء آسان هوندو. اسان ان کي ٽيليگرام ڊيسڪ ٽاپ جي مستقبل جي رليز ۾ ڏسڻ جي اميد رکون ٿا.

IntelliJ IDEA ۾ قدرتي ٻولي جي مدد کي وڌايو

Hackathon DevDays'19 (حصو 2): ٽيليگرام لاءِ آڊيو پيغام پارسر ۽ IntelliJ IDEA ۾ گرامر چيڪنگ

خيال جو مصنف

Tankov Vladislav

قطار ٺاهيو

Tankov Vladislav (ٽيم جي اڳواڻي، LanguageTool ۽ IntelliJ IDEA سان ڪم ڪرڻ)
Nikita Sokolov (LanguageTool سان ڪم ڪرڻ ۽ UI ٺاهڻ)
Khvorov Alexander (LanguageTool سان ڪم ڪرڻ ۽ ڪارڪردگي کي بهتر ڪرڻ)
Sadovnikov اليگزينڊر (مارڪ اپ ٻولين ۽ ڪوڊ کي پارس ڪرڻ جي حمايت)

اسان IntelliJ IDEA لاءِ ھڪ پلگ ان ٺاھيو آھي جيڪو مختلف متنن (تبصرن ۽ دستاويزن، ڪوڊ ۾ لفظي لائينون، ٽيڪسٽ فارميٽ ۾ مارڪ ڊائون يا XML مارڪ اپ) کي گرامر، اسپيلنگ ۽ اسٽائلسٽڪ جي درستگي لاءِ چيڪ ڪري ٿو (انگريزيءَ ۾ ھن کي پروف ريڊنگ چئبو آھي).

پروجيڪٽ جو خيال هو ته معياري اسپيل چيڪ IntelliJ IDEA کي گرامرلي جي پيماني تي وڌايو وڃي، هڪ قسم جي گرامرلي اندر IDE ٺاهڻ لاءِ.

توهان ڏسي سگهو ٿا ته ڇا ٿيو لنڪ.

خير، هيٺ اسان پلگ ان جي صلاحيتن جي باري ۾ وڌيڪ تفصيل سان ڳالهائينداسين، ۽ انهي سان گڏ مشڪلات جيڪي ان جي پيدائش دوران پيدا ٿيا.

حرڪت

قدرتي ٻولين ۾ ٽيڪسٽ لکڻ لاءِ ڪيتريون ئي پراڊڪٽس ٺهيل آهن، پر دستاويز ۽ ڪوڊ تبصرا گهڻو ڪري ترقي واري ماحول ۾ لکيا ويندا آهن. ساڳئي وقت، IDEs ڪوڊ ۾ غلطيون ڳولڻ جو هڪ بهترين ڪم ڪن ٿا، پر قدرتي ٻولين ۾ نصوص لاء خراب طور تي مناسب آهن. اهو ان کي تمام آسان بڻائي ٿو گرامر، اوقاف، يا انداز ۾ غلطيون ڪرڻ کان سواءِ ترقي واري ماحول کان سواءِ انهن کي اشارو ڪندي. يوزر انٽرفيس کي لکڻ ۾ غلطي ڪرڻ تمام ضروري آهي، ڇاڪاڻ ته اهو نه رڳو ڪوڊ جي سمجھڻ تي اثر انداز ڪندو، پر خود ترقي يافته ايپليڪيشن جي استعمال ڪندڙن کي پڻ.

سڀ کان وڌيڪ مشهور ۽ ترقي يافته ترقياتي ماحول مان هڪ آهي IntelliJ IDEA، انهي سان گڏ IDEs IntelliJ پليٽ فارم تي ٻڌل آهي. IntelliJ پليٽ فارم وٽ اڳ ۾ ئي هڪ تعمير ٿيل اسپيل چيڪ ڪندڙ آهي، پر اهو آسان ترين گراماتي غلطين کان به نجات حاصل نٿو ڪري. اسان IntelliJ IDEA ۾ هڪ مشهور قدرتي ٻولي تجزياتي نظام کي ضم ڪرڻ جو فيصلو ڪيو.

عمل

Hackathon DevDays'19 (حصو 2): ٽيليگرام لاءِ آڊيو پيغام پارسر ۽ IntelliJ IDEA ۾ گرامر چيڪنگاسان پنهنجو پاڻ کي پنهنجو ٽيڪسٽ تصديق سسٽم ٺاهڻ جو ڪم مقرر نه ڪيو آهي، تنهنڪري اسان هڪ موجوده حل استعمال ڪيو. سڀ کان وڌيڪ مناسب اختيار ٿي چڪو آهي لئنگويج ٽول. لائسنس اسان کي اجازت ڏني ته اسان ان کي آزاديءَ سان اسان جي مقصدن لاءِ استعمال ڪريون: اهو مفت، جاوا ۽ اوپن سورس ۾ لکيل آهي. ان کان علاوه، اهو 25 ٻولين کي سپورٽ ڪري ٿو ۽ پندرهن سالن کان وڌيڪ ترقي ۾ آهي. ان جي کليل هجڻ جي باوجود، LanguageTool ادا ڪيل متن جي تصديق جي حل لاءِ هڪ سنگين مقابلو ڪندڙ آهي، ۽ حقيقت اها آهي ته اهو مقامي طور تي ڪم ڪري سگهي ٿو لفظي طور تي ان جي قاتل خصوصيت آهي.

پلگ ان ڪوڊ اندر آهي GitHub تي ذخيرو. UI لاءِ جاوا جي هڪ ننڍڙي اضافي سان ڪوٽلن ۾ سڄو پروجيڪٽ لکيو ويو هو. هيڪاٿون دوران، اسان مارڪ ڊائون، جاوا ڊاک، HTML ۽ سادي متن لاءِ سپورٽ لاڳو ڪرڻ ۾ ڪامياب ٿياسين. هيڪاٿون کان پوءِ، هڪ وڏي تازه ڪاري شامل ڪئي ايڪس ايم ايل لاءِ سپورٽ، جاوا ۾ اسٽرنگ لٽرلز، ڪوٽلن ۽ پٿون، ۽ اسپيل چيڪنگ.

مشڪلاتون

تمام جلدي اسان محسوس ڪيو ته جيڪڏهن اسان هر دفعي معائنو ڪرڻ لاءِ LanguageTool ۾ سمورو متن ڀريون ٿا، ته پوءِ IDEA انٽرفيس ڪنهن به وڌيڪ يا گهٽ سنجيده متن تي منجمد ٿي ويندو، ڇاڪاڻ ته معائنو پاڻ UI جي وهڪري کي بلاڪ ڪري ٿو. مسئلو حل ڪيو ويو 'ProgressManager.checkCancelled' چيڪ ذريعي - هي فنڪشن هڪ استثنا ڏئي ٿو جيڪڏهن IDEA مڃي ٿو ته اهو وقت آهي انسپيڪشن کي ختم ڪرڻ جو.

اهو مڪمل طور تي منجمد ختم ڪري ڇڏيو، پر اهو استعمال ڪرڻ ناممڪن آهي: متن کي پروسيس ڪرڻ لاء تمام ڊگهو وقت وٺندو آهي. ان کان علاوه، اسان جي صورت ۾، اڪثر ڪري متن جو تمام ننڍڙو حصو تبديل ڪري ٿو ۽ اسان نتيجن کي ڪيش ڪرڻ چاهيون ٿا. بلڪل ائين ئي ڪيوسين. هر دفعي هر شيءَ کي جانچڻ لاءِ نه، اسان مقرري سان متن کي ٽڪرن ۾ ورهايو ۽ صرف انهن کي چيڪ ڪيو جيڪي تبديل ٿي چڪا هئا. جيئن ته نصوص وڏيون ٿي سگهن ٿيون ۽ اسان ڪيش لوڊ ڪرڻ نٿا چاهيون، اسان نصوص پاڻ نه، پر انهن جي هيش کي محفوظ ڪيو. هن پلگ ان کي اجازت ڏني ته وڏي فائلن تي به آساني سان هلائڻ.

LanguageTool 25 کان وڌيڪ ٻولين کي سپورٽ ڪري ٿو، پر اهو ممڪن ناهي ته ڪنهن هڪ صارف کي انهن سڀني جي ضرورت هجي. مان درخواست ڪرڻ تي هڪ مخصوص ٻولي لاءِ لائبريريون ڊائون لوڊ ڪرڻ جو موقعو ڏيڻ چاهيان ٿو (جيڪڏهن توهان ان کي UI ۾ چيڪ ڪريو). اسان ان تي عمل پڻ ڪيو، پر اهو تمام پيچيده ۽ ناقابل اعتبار ثابت ٿيو. خاص طور تي، اسان کي الڳ ڪلاس لوڊر استعمال ڪندي ٻولين جي نئين سيٽ سان LanguageTool کي لوڊ ڪرڻو پوندو، ۽ پوءِ احتياط سان ان کي شروع ڪيو. ساڳئي وقت، سڀئي لائبريريون هڪ صارف .m2 مخزن ۾ هئا، ۽ هر شروعات ۾ اسان کي انهن جي سالميت کي جانچڻ گهرجي. آخر ۾، اسان فيصلو ڪيو ته جيڪڏهن صارفين کي پلگ ان جي سائيز سان مسئلو هجي، ته پوءِ اسان ڪيترن ئي مشهور ٻولين لاءِ الڳ پلگ ان مهيا ڪنداسين.

هيڪٿون کان پوء

هيڪاٿون ختم ٿي ويو، پر پلگ ان تي ڪم هڪ تنگ ٽيم سان جاري رهيو. مان اسٽرنگ، تبصرو، ۽ حتي ٻوليء جي تعميرات جهڙوڪ متغير ۽ طبقي جا نالا جي حمايت ڪرڻ چاهيندا. في الحال هي صرف جاوا، ڪوٽلن ۽ پٿون لاءِ سپورٽ ٿيل آهي، پر اسان کي اميد آهي ته اها لسٽ وڌندي ويندي. اسان تمام گھڻا ننڍا بگ درست ڪيا آھن ۽ آئيڊيا جي بلٽ ان اسپيل چيڪر سان وڌيڪ مطابقت پيدا ڪريون ٿا. ان کان علاوه، XML سپورٽ ۽ اسپيل چيڪنگ ظاهر ٿي چڪا آهن. اهو سڀ ڪجهه ٻئي نسخي ۾ ملي سگهي ٿو، جيڪو اسان تازو شايع ڪيو آهي.

ايندڙ ڇا آهي؟

اهڙو پلگ ان نه رڳو ڊولپرز لاءِ، پر ٽيڪنيڪل ليکڪن لاءِ (اڪثر ڪم ڪري ٿو، مثال طور، هڪ IDE ۾ XML سان). هر روز انهن کي قدرتي ٻولي سان ڪم ڪرڻو پوندو، بغير ڪنهن اسسٽنٽ جي صورت ۾ ممڪن غلطين بابت ايڊيٽر جي تجويزون. اسان جو پلگ ان اهڙا اشارا مهيا ڪري ٿو ۽ ان کي اعليٰ درجي جي درستگي سان ڪري ٿو.
اسان پلگ ان کي ترقي ڪرڻ جي رٿابندي ڪريون ٿا، ٻنهي نئين ٻولين کي شامل ڪندي ۽ ٽيڪسٽ چيڪنگ کي منظم ڪرڻ لاء عام طريقي جي ڳولا ڪندي. اسان جي فوري منصوبن ۾ اسٽائلسٽڪ پروفائيل تي عمل درآمد شامل آهي (قاعدن جا سيٽ جيڪي متن لاءِ طرز گائيڊ بيان ڪن ٿا، مثال طور، ”مثال طور نه لکو، پر مڪمل فارم لکو“)، ڊڪشنري کي وڌائڻ ۽ يوزر انٽرفيس کي بهتر ڪرڻ (خاص طور تي، اسان صارف کي موقعو ڏيڻ چاهيون ٿا ته نه رڳو هڪ لفظ کي نظر انداز ڪرڻ، پر ان کي لغت ۾ شامل ڪرڻ لاء، تقرير جي حصي کي اشارو ڪندي).

ذريعو: www.habr.com

تبصرو شامل ڪريو