Hackathon DevDays'19 (pàirt 2): parser teachdaireachd claisneachd airson Telegram agus sgrùdadh gràmair ann an IntelliJ IDEA

Tha sinn a’ leantainn air adhart a’ bruidhinn mu phròiseactan an earraich hackathon DevDays, anns an do ghabh oileanaich a’ phrògram mhaighstir pàirt "Leasachadh Bathar-bog / Innleadaireachd Bathar-bog".

Hackathon DevDays'19 (pàirt 2): parser teachdaireachd claisneachd airson Telegram agus sgrùdadh gràmair ann an IntelliJ IDEA

Co-dhiù, bu mhath leinn cuireadh a thoirt do luchd-leughaidh a thighinn còmhla VK buidheann de dh'oileanaich a. An sin foillsichidh sinn na naidheachdan as ùire mu dheidhinn fastadh agus sgrùdadh. Gheibhear bhidio bhon latha fosgailte sa bhuidheann cuideachd. Tha sinn gad chuimhneachadh: thèid an tachartas a chumail air 29 Giblean, mion-fhiosrachadh Online.

Parser teachdaireachd guth deasg Telegram

Hackathon DevDays'19 (pàirt 2): parser teachdaireachd claisneachd airson Telegram agus sgrùdadh gràmair ann an IntelliJ IDEA

Ùghdar a 'bheachd
Artem Khoroshev saor an asgaidh

Dèanamh Sgioba

Khoroshev Artem - manaidsear pròiseict / leasaiche / QA
Eliseev Anton - anailisiche gnìomhachais / eòlaiche margaidheachd
Maria Kuklina - dealbhaiche / leasaiche UI
Bakhvalov Pavel - dealbhaiche UI / leasaiche / QA

Bho ar sealladh, tha Telegram na theachdaire ùr-nodha agus goireasach, agus tha an dreach PC aige mòr-chòrdte agus stòr fosgailte, a tha ga dhèanamh comasach atharrachadh. Tha an neach-dèiligidh a’ tabhann comas-gnìomh gu math beairteach. A bharrachd air teachdaireachdan teacsa àbhaisteach, tha fiosan guth, teachdaireachdan bhidio agus teachdaireachdan guth ann. Agus is e an tè mu dheireadh a bhios uaireannan a 'toirt mì-ghoireasachd don neach a gheibh iad. Gu tric chan eil e comasach èisteachd ri teachdaireachd guth fhad ‘s a tha thu aig coimpiutair no laptop. Is dòcha gu bheil fuaim àrainneachd ann, dìth fònaichean-cluaise, no nach eil thu airson gun cluinn duine susbaint na teachdaireachd. Cha mhòr nach èirich duilgheadasan mar seo ma chleachdas tu Telegram air fòn cliste, oir faodaidh tu dìreach a thoirt nad chluais, eu-coltach ri laptop no PC. Dh'fheuch sinn ri fuasgladh fhaighinn air an duilgheadas seo.

B’ e amas a’ phròiseict againn aig DevDays comas a chuir air teachdaireachdan guth a fhuaireadh eadar-theangachadh gu teacsa gu teachdaiche deasg Telegram (ris an canar an-seo Telegram Desktop).

Tha a h-uile analogues an-dràsta nam botaichean far an urrainn dhut teachdaireachd claisneachd a chuir agus teacsa fhaighinn mar fhreagairt. Chan eil sinn glè thoilichte le seo: chan eil e glè ghoireasach teachdaireachd a chuir air adhart gu bot; bu mhath leinn gnìomhachd dùthchasach a bhith againn. A bharrachd air an sin, tha bot sam bith na threas phàrtaidh a bhios ag obair mar eadar-mheadhanair eadar an API aithneachadh cainnt agus an neach-cleachdaidh, agus tha seo, aig a’ char as lugha, cunnartach.

Mar a chaidh a ràdh na bu tràithe, tha dà bhuannachd chudromach aig teileagram-desktop: furasta agus luaths obrachaidh. Agus chan e co-thuiteamas a tha seo, oir tha e sgrìobhte gu tur ann an C ++. Agus bhon a chuir sinn romhainn comas-gnìomh ùr a chuir gu dìreach ris an neach-dèiligidh, bha againn ri a leasachadh ann an C ++.

Hackathon DevDays'19 (pàirt 2): parser teachdaireachd claisneachd airson Telegram agus sgrùdadh gràmair ann an IntelliJ IDEABha 4 daoine anns an sgioba againn. An toiseach, bha dithis a 'coimhead airson leabharlann iomchaidh airson aithne cainnte, bha aon neach a' sgrùdadh còd stòr Telegram-desktop, bha fear eile a 'cleachdadh a' phròiseict togail Telegram Desktop. Nas fhaide air adhart, bha a h-uile duine trang a’ càradh an UI agus a’ dì-bhugachadh.

Bha e coltach nach biodh e duilich an gnìomh a bha san amharc a chuir an gnìomh, ach, mar a thachras an-còmhnaidh, dh ’èirich duilgheadasan.

Bha fuasgladh na trioblaid air a dhèanamh suas de dhà fho-ghnìomh neo-eisimeileach: a’ taghadh inneal aithneachaidh cainnt iomchaidh agus a’ cur an gnìomh UI airson comas-gnìomh ùr.

Nuair a thagh sinn leabharlann airson aithne guth, bha againn ri gach API far-loidhne a thrèigsinn sa bhad, leis gu bheil modalan cànain a’ gabhail tòrr àite. Ach chan eil sinn a’ bruidhinn ach air aon chànan. Dh'fhàs e soilleir gum feumadh sinn an API air-loidhne a chleachdadh. Nas fhaide air adhart thionndaidh e a-mach nach eil seirbheisean aithne cainnt leithid fuamhairean mar Google, Yandex agus Microsoft an-asgaidh idir, agus feumaidh sinn a bhith riaraichte le ùine deuchainn. Mar thoradh air an sin, chaidh Google Speech-To-Text a thaghadh leis gu bheil e a’ toirt cothrom dhut comharra fhaighinn airson an t-seirbheis a chleachdadh, a mhaireas fad bliadhna.

Tha an dàrna duilgheadas ris an do choinnich sinn co-cheangailte ri cuid de na h-uireasbhaidhean a th’ aig C ++ - sù de dhiofar leabharlannan às aonais ionad-tasgaidh meadhanaichte. Tha e a’ tachairt gu bheil Telegram Desktop an urra ri mòran leabharlannan eile a tha sònraichte do dhreach. Tha an stòr oifigeil làimhe airson am pròiseact a chruinneachadh. Agus cuideachd àireamh mhòr de chùisean fosgailte mu dhuilgheadasan togail, mar eisimpleir amannan и два. Bha na duilgheadasan uile co-cheangailte ris an fhìrinn gun deach an sgriobt togail a sgrìobhadh airson Ubuntu 14.04, agus gus teileagram a thogail gu soirbheachail fo Ubuntu 18.04, dh'fheumadh atharrachaidhean a dhèanamh.

Bheir Telegram Desktop fhèin ùine mhòr airson cruinneachadh: air laptop le Intel Core i5-7200U, bheir co-chruinneachadh iomlan (bratach -j 4) leis a h-uile eisimeileachd timcheall air trì uairean a thìde. Dhiubh sin, thèid timcheall air 30 mionaid a thoirt le bhith a’ ceangal an neach-dèiligidh fhèin (nas fhaide air adhart thionndaidh e a-mach gu bheil ceangal a’ toirt timcheall air 10 mionaidean ann an rèiteachadh Debug), agus a dh’ aindeoin sin feumar an ìre ceangail a dhèanamh a-rithist gach turas às deidh atharrachaidhean a dhèanamh.

A dh 'aindeoin na duilgheadasan, chaidh againn air a' bheachd a chaidh a chruthachadh, a bharrachd air ùrachadh sgriobt togail airson Ubuntu 18.04. Chithear taisbeanadh den obair aig cheangal. Bidh sinn cuideachd a’ toirt a-steach grunn beòthachaidhean. Tha putan air nochdadh ri taobh a h-uile teachdaireachd guth, a leigeas leat an teachdaireachd eadar-theangachadh gu teacsa. Le briogadh deas, faodaidh tu cuideachd an cànan a thèid a chleachdadh airson craoladh a shònrachadh. Le bhith cheangal neach-dèiligidh ri fhaighinn airson luchdachadh sìos.

Tasgaidh.

Nar beachd-sa, thionndaidh e a-mach gu bhith na dhearbhadh math air Bun-bheachd air comas-gnìomh a bhiodh goireasach dha mòran luchd-cleachdaidh. Tha sinn an dòchas fhaicinn ann am fiosan san àm ri teachd de Telegram Desktop.

Taic Cànain Nàdarra Leasaichte ann an IntelliJ IDEA

Hackathon DevDays'19 (pàirt 2): parser teachdaireachd claisneachd airson Telegram agus sgrùdadh gràmair ann an IntelliJ IDEA

Ùghdar a 'bheachd

Vladislav Tankov saor an asgaidh

Dèanamh Sgioba

Tankov Vladislav (stiùiriche sgioba, ag obair le LanguageTool agus IntelliJ IDEA)
Nikita Sokolov (ag obair le LanguageTool agus a’ cruthachadh UI)
Khvorov Alexander (ag obair le LanguageTool agus coileanadh as fheàrr)
Sadovnikov Alexander (taic airson parsadh chànanan comharrachaidh agus còd)

Tha sinn air plugan a leasachadh airson IntelliJ IDEA a bhios a’ sgrùdadh diofar theacsaichean (beachdan agus sgrìobhainnean, loidhnichean litireil ann an còd, cruth teacsa ann an Markdown no XML markup) airson mionaideachd gràmair, litreachaidh agus stoidhle (ann am Beurla canar leughadh dearbhaidh ris an seo).

B’ e beachd a’ phròiseict an dearbhair litreachaidh àbhaisteach IntelliJ IDEA a leudachadh gu sgèile Grammarly, gus seòrsa de ghràmar taobh a-staigh IDE a dhèanamh.

Chì thu dè thachair Ceangal.

Uill, gu h-ìosal bruidhnidh sinn nas mionaidiche mu chomasan a ’phlug, a bharrachd air na duilgheadasan a dh’ èirich nuair a chaidh a chruthachadh.

Мотивация

Tha mòran thoraidhean air an dealbhadh airson teacsa a sgrìobhadh ann an cànanan nàdarra, ach mar as trice bidh sgrìobhainnean agus beachdan còd air an sgrìobhadh ann an àrainneachdan leasachaidh. Aig an aon àm, bidh IDEan a’ dèanamh obair ionmholta a’ lorg mhearachdan ann an còd, ach chan eil iad gu math freagarrach airson teacsaichean ann an cànanan nàdarra. Tha seo ga dhèanamh glè fhurasta mearachdan a dhèanamh ann an gràmar, puingeachadh no stoidhle às aonais an àrainneachd leasachaidh gan comharrachadh. Tha e nas cudromaiche mearachd a dhèanamh ann a bhith a 'sgrìobhadh an eadar-aghaidh cleachdaiche, oir bheir seo buaidh chan ann a-mhàin air tuigse a' chòd, ach cuideachd air luchd-cleachdaidh an aplacaid leasaichte fhèin.

Is e aon de na h-àrainneachdan leasachaidh as mòr-chòrdte agus leasaichte IntelliJ IDEA, a bharrachd air IDEs stèidhichte air Àrd-ùrlar IntelliJ. Tha dearbhair-litreachaidh stèidhichte aig IntelliJ Platform mu thràth, ach chan eil e a’ faighinn cuidhteas eadhon na mearachdan gràmair as sìmplidhe. Cho-dhùin sinn aon de na siostaman anailis cànain nàdarra mòr-chòrdte fhilleadh a-steach do IntelliJ IDEA.

Реализация

Hackathon DevDays'19 (pàirt 2): parser teachdaireachd claisneachd airson Telegram agus sgrùdadh gràmair ann an IntelliJ IDEACha do chuir sinn romhainn an siostam dearbhaidh teacsa againn fhèin a chruthachadh, agus mar sin chleachd sinn fuasgladh a bha ann mu thràth. B 'e an roghainn as freagarraiche a bh' ann CànanTool. Thug an cead cead dhuinn a chleachdadh gu saor airson ar n-adhbharan: tha e an-asgaidh, sgrìobhte ann an Java agus stòr fosgailte. A bharrachd air an sin, tha e a’ toirt taic do 25 cànan agus tha e air a bhith ga leasachadh airson còrr air còig bliadhna deug. A dh’ aindeoin cho fosgailte ‘s a tha e, tha LanguageTool na phrìomh cho-fharpaiseach airson fuasglaidhean dearbhaidh teacsa pàighte, agus is e an fhìrinn gun urrainn dha obrachadh gu h-ionadail am feart marbhadh aige.

Tha an còd plugan a-steach stòran air GitHub. Chaidh am pròiseact gu lèir a sgrìobhadh ann an Kotlin le beagan a bharrachd de Java airson an UI. Rè an hackathon, chaidh againn air taic a chuir an gnìomh airson Markdown, JavaDoc, HTML agus Plain Text. Às deidh an hackathon, chuir ùrachadh mòr taic ri XML, litrichean sreang ann an Java, Kotlin agus Python, agus sgrùdadh litreachaidh.

Duilgheadasan

Gu math luath thuig sinn ma bheir sinn an teacsa gu lèir gu LanguageTool airson sgrùdadh a h-uile uair, gun reothadh an eadar-aghaidh IDEA air teacsa sam bith nas miosa no nas miosa, leis gu bheil an sgrùdadh fhèin a’ cur bacadh air sruthadh an UI. Chaidh an duilgheadas fhuasgladh tro sheic `ProgressManager.checkCancelled` - tha an gnìomh seo a’ tilgeil eisgeachd ma tha IDEA den bheachd gu bheil an t-àm ann stad a chuir air an sgrùdadh.

Chuir seo às do reothadh gu tur, ach tha e do-dhèanta a chleachdadh: bheir an teacsa ùine mhòr airson a phròiseasadh. A bharrachd air an sin, anns a’ chùis againn, mar as trice bidh pàirt glè bheag den teacsa ag atharrachadh agus tha sinn airson na toraidhean a thasgadh ann an dòigh air choreigin. Sin dìreach a rinn sinn. Gus nach dèan sinn sgrùdadh air a h-uile càil a h-uile turas, bidh sinn gu cinnteach a’ roinn an teacsa gu pìosan agus a’ sgrùdadh dìreach an fheadhainn a bha air atharrachadh. Leis gum faod na teacsaichean a bhith mòr agus nach robh sinn airson an tasgadan a luchdachadh, cha do ghlèidh sinn na teacsaichean fhèin, ach na hashes aca. Leig seo leis a’ plugan obrachadh gu rèidh eadhon air faidhlichean mòra.

Tha LanguageTool a’ toirt taic do bharrachd air 25 cànan, ach chan eil e coltach gu bheil feum aig neach-cleachdaidh sam bith orra uile. Bha mi airson cothrom a thoirt seachad leabharlannan a luchdachadh sìos airson cànan sònraichte ma thèid iarraidh (ma chuireas tu diog ann san UI). Chuir sinn eadhon seo an gnìomh, ach thionndaidh e a-mach gu robh e ro iom-fhillte agus neo-earbsach. Gu sònraichte, bha againn ri LanguageTool a luchdachadh le seata ùr de chànanan a’ cleachdadh luchdan clas air leth, agus an uairsin a thòiseachadh gu faiceallach. Aig an aon àm, bha na leabharlannan gu lèir ann an stòr .m2 neach-cleachdaidh, agus aig gach toiseach bha againn ri sgrùdadh a dhèanamh air an ionracas. Aig a’ cheann thall, cho-dhùin sinn nam biodh duilgheadas aig luchd-cleachdaidh le meud a’ plugan, gun toireadh sinn plugan air leth airson grunn de na cànanan as mòr-chòrdte.

As dèidh an hackathon

Thàinig an hackathon gu crìch, ach lean obair air a ’phlug le sgioba nas cumhainge. Bha mi airson taic a thoirt do shreathan, beachdan, agus eadhon togail cànain leithid ainmean caochlaideach agus clas. An-dràsta chan eil seo a’ faighinn taic ach airson Java, Kotlin agus Python, ach tha sinn an dòchas gum fàs an liosta seo. Tha sinn air tòrr bhiteagan beaga a chàradh agus air fàs nas co-chòrdail le dearbhair-litreachaidh Idea. A bharrachd air an sin, tha taic XML agus dearbhadh litreachaidh air nochdadh. Gheibhear seo uile anns an dàrna dreach, a dh’ fhoillsich sinn o chionn ghoirid.

Dè a-nis?

Faodaidh plugan mar seo a bhith feumail chan ann a-mhàin do luchd-leasachaidh, ach cuideachd airson sgrìobhadairean teignigeach (gu tric ag obair, mar eisimpleir, le XML ann an IDE). Gach latha feumaidh iad a bhith ag obair le cànan nàdarrach, gun neach-cuideachaidh a bhith aca ann an cruth molaidhean neach-deasachaidh mu mhearachdan a dh’ fhaodadh a bhith ann. Bidh am plugan againn a’ toirt seachad na molaidhean sin agus ga dhèanamh le ìre àrd de mhearachd.
Tha sinn an dùil am plugan a leasachadh, an dà chuid le bhith a’ cur chànanan ùra ris agus le bhith a’ sgrùdadh dòigh-obrach choitcheann airson sgrùdadh teacsa a chuir air dòigh. Tha ar planaichean sa bhad a’ toirt a-steach buileachadh phròifilean stoidhle (seata de riaghailtean a tha a’ mìneachadh stiùireadh stoidhle airson teacsa, mar eisimpleir, “na sgrìobh me, ach sgrìobh am foirm slàn”), leudachadh am faclair agus leasachadh an eadar-aghaidh cleachdaiche (gu sònraichte, tha sinn airson cothrom a thoirt don neach-cleachdaidh chan e a-mhàin facal a leigeil seachad, ach a chur ris an fhaclair, a’ comharrachadh a’ phàirt de chainnt).

Tobar: www.habr.com

Cuir beachd ann