Hackathon DevDays'19 (bagean 2): parser pesen audio kanggo mriksa Telegram lan grammar ing IntelliJ IDEA

Kita terus ngomong babagan proyek hackathon musim semi DevDays, ing ngendi siswa program master melu "Pengembangan Perangkat Lunak / Rekayasa Perangkat Lunak".

Hackathon DevDays'19 (bagean 2): parser pesen audio kanggo mriksa Telegram lan grammar ing IntelliJ IDEA

Miturut cara, kita pengin ngajak para pamaca kanggo gabung Klompok VK siswa master. Ing kono kita bakal nerbitake kabar paling anyar babagan rekrutmen lan sinau. Video saka dina mbukak uga bisa ditemokake ing grup. We ngelingake sampeyan: acara bakal njupuk Panggonan ing April 29, rincian online.

Parser Pesen Swara Desktop Telegram

Hackathon DevDays'19 (bagean 2): parser pesen audio kanggo mriksa Telegram lan grammar ing IntelliJ IDEA

Pengarang gagasan
Khoroshev Artyom

Line-up

Khoroshev Artem – project manager/developer/QA
Eliseev Anton - analis bisnis / spesialis marketing
Maria Kuklina - desainer / pangembang UI
Bakhvalov Pavel - desainer / pangembang UI / QA

Saka sudut pandang kita, Telegram minangka utusan modern lan trep, lan versi PC kasebut populer lan sumber terbuka, sing ndadekake bisa ngowahi. Klien nawakake fungsi sing cukup sugih. Saliyane pesen teks standar, ngemot telpon swara, pesen video, lan pesen swara. Lan sing terakhir sing kadhangkala nggawa ora nyaman kanggo panampa. Asring ora bisa ngrungokake pesen swara nalika ana ing komputer utawa laptop. Bisa uga ana swara sekitar, kurang headphone, utawa sampeyan ora pengin sapa wae krungu isi pesen kasebut. Masalah kasebut meh ora bakal muncul yen sampeyan nggunakake Telegram ing smartphone, amarga sampeyan mung bisa nggawa menyang kuping, ora kaya laptop utawa PC. Kita nyoba kanggo ngatasi masalah iki.

Tujuan proyek kita ing DevDays yaiku nambah kemampuan kanggo nerjemahake pesen swara sing ditampa menyang teks menyang klien desktop Telegram (sabanjuré diarani Telegram Desktop).

Kabeh analog saiki minangka bot sing sampeyan bisa ngirim pesen audio lan nampa teks kanggo nanggepi. Kita ora seneng banget karo iki: terusake pesen menyang bot ora trep; kita pengin duwe fungsi asli. Kajaba iku, bot apa wae minangka pihak katelu sing dadi perantara antarane API pangenalan wicara lan pangguna, lan iki, paling ora, ora aman.

Kaya kasebut sadurunge, telegram-desktop duwe rong kaluwihan sing signifikan: gampang lan kacepetan operasi. Lan iki ora ketepakan, amarga wis ditulis tanggung ing C ++. Lan wiwit kita mutusaké kanggo nambah fungsi anyar langsung menyang klien, kita kudu berkembang ing C ++.

Hackathon DevDays'19 (bagean 2): parser pesen audio kanggo mriksa Telegram lan grammar ing IntelliJ IDEAAna 4 wong ing tim kita. Kaping pisanan, wong loro nggoleki perpustakaan sing cocog kanggo pangenalan wicara, siji wong sinau kode sumber Telegram-desktop, liyane lagi nyebarake proyek mbangun. Desktop Telegram. Mengko, kabeh wong sibuk ndandani UI lan debugging.

Iku ketoke sing ngleksanakake fungsi dimaksudaké ora angel, nanging, minangka tansah, kangelan muncul.

Solusi kanggo masalah kasebut kalebu rong subtugas mandiri: milih alat pangenalan wicara sing cocog lan ngetrapake UI kanggo fungsi anyar.

Nalika milih perpustakaan kanggo pangenalan swara, kita langsung kudu ninggalake kabeh API offline, amarga model basa njupuk akeh papan. Nanging kita ngomong babagan mung siji basa. Dadi cetha yen kita kudu nggunakake API online. Mengko ternyata layanan pangenalan ucapan saka raksasa kaya Google, Yandex lan Microsoft ora gratis, lan kita kudu puas karo wektu uji coba. Akibaté, Google Speech-To-Text dipilih amarga ngidini sampeyan entuk token kanggo nggunakake layanan kasebut, sing bakal tahan setaun.

Masalah kapindho sing kita temokake ana gandhengane karo sawetara kekurangan C ++ - kebon binatang saka macem-macem perpustakaan tanpa ana repositori terpusat. Kedaden Telegram Desktop gumantung ing akeh perpustakaan khusus versi liyane. Repositori resmi wis manual kanggo assembling project. Lan uga akeh masalah mbukak babagan masalah mbangun, contone kaping и два. Kabeh masalah kasebut ana gandhengane karo kasunyatan manawa skrip mbangun ditulis kanggo Ubuntu 14.04, lan supaya bisa nggawe telegram kanthi sukses ing Ubuntu 18.04, owah-owahan kudu ditindakake.

Telegram Desktop dhewe mbutuhake wektu sing cukup suwe kanggo ngumpulake: ing laptop kanthi Intel Core i5-7200U, perakitan lengkap (gendera -j 4) kanthi kabeh dependensi mbutuhake telung jam. Saka jumlah kasebut, kira-kira 30 menit ditindakake kanthi ngubungake klien kasebut dhewe (mengko ternyata ing konfigurasi Debug, ngubungake butuh udakara 10 menit), nanging tahapan ngubungake kudu diulang saben wektu sawise nggawe owah-owahan.

Sanajan ana masalah, kita bisa ngetrapake ide sing disusun, uga nganyari mbangun script kanggo Ubuntu 18.04. A demo saka karya bisa katon ing link. Kita uga kalebu sawetara animasi. Tombol wis katon ing jejere kabeh pesen swara, ngidini sampeyan nerjemahake pesen menyang teks. Kanthi ngeklik tengen, sampeyan uga bisa nemtokake basa sing bakal digunakake kanggo siaran. Miturut link klien kasedhiya kanggo download.

Repositori.

Ing mratelakake panemume, iku dadi bukti apik saka Konsep saka fungsi sing bakal trep kanggo akeh kedhaftar. Muga-muga bisa ndeleng ing rilis Telegram Desktop ing mangsa ngarep.

Dhukungan Basa Alam sing Ditingkatake ing IntelliJ IDEA

Hackathon DevDays'19 (bagean 2): parser pesen audio kanggo mriksa Telegram lan grammar ing IntelliJ IDEA

Pengarang gagasan

Tankov Vladislav

Line-up

Tankov Vladislav (pemimpin tim, nggarap LanguageTool lan IntelliJ IDEA)
Nikita Sokolov (nganggo LanguageTool lan nggawe UI)
Khvorov Alexander (makarya nganggo LanguageTool lan ngoptimalake kinerja)
Sadovnikov Alexander (dhukungan kanggo parsing basa lan kode markup)

Kita wis ngembangake plugin kanggo IntelliJ IDEA sing mriksa macem-macem teks (komentar lan dokumentasi, baris literal ing kode, format teks ing Markdown utawa XML markup) kanggo akurasi gramatikal, ejaan lan stilistika (ing basa Inggris iki diarani proofreading).

Gagasan proyek kasebut yaiku nggedhekake spellcheck standar IntelliJ IDEA menyang skala Grammarly, kanggo nggawe jinis Grammarly ing IDE.

Sampeyan bisa ndeleng apa sing kedadeyan link.

Inggih, ing ngisor iki kita bakal ngomong kanthi luwih rinci babagan kemampuan plugin kasebut, uga kesulitan sing muncul nalika nggawe.

Motivasi

Ana akeh produk sing dirancang kanggo nulis teks ing basa alami, nanging dokumentasi lan komentar kode paling asring ditulis ing lingkungan pangembangan. Ing wektu sing padha, IDE nindakake tugas sing apik kanggo nemokake kesalahan ing kode, nanging ora cocog kanggo teks ing basa alami. Iki ndadekake gampang banget kanggo nggawe kesalahan ing grammar, tanda baca, utawa gaya tanpa lingkungan pangembangan ngarahake. Sing paling penting kanggo nggawe kesalahan nulis antarmuka pangguna, amarga iki ora mung mengaruhi pemahaman kode kasebut, nanging uga pangguna aplikasi sing dikembangake dhewe.

Salah sawijining lingkungan pangembangan sing paling populer lan dikembangake yaiku IntelliJ IDEA, uga IDE adhedhasar Platform IntelliJ. IntelliJ Platform wis duwe spellchecker sing dibangun, nanging ora bisa ngilangi kesalahan gramatikal sing paling gampang. Kita mutusake kanggo nggabungake salah sawijining sistem analisis basa alami sing populer menyang IntelliJ IDEA.

Реализация

Hackathon DevDays'19 (bagean 2): parser pesen audio kanggo mriksa Telegram lan grammar ing IntelliJ IDEAKita ora nemtokake tugas nggawe sistem verifikasi teks dhewe, mula nggunakake solusi sing wis ana. Pilihan sing paling cocok ternyata Kursi Basa. Lisensi kasebut ngidini kita nggunakake kanthi bebas kanggo tujuan kita: iku gratis, ditulis ing Jawa lan open-source. Kajaba iku, ndhukung 25 basa lan wis dikembangake luwih saka limalas taun. Senadyan keterbukaan, LanguageTool minangka pesaing serius kanggo solusi verifikasi teks sing dibayar, lan kasunyatane bisa digunakake sacara lokal minangka fitur pembunuh.

Kode plugin ana ing repositori ing GitHub. Kabeh proyek ditulis ing Kotlin kanthi tambahan Jawa cilik kanggo UI. Sajrone hackathon, kita bisa ngetrapake dhukungan kanggo Markdown, JavaDoc, HTML lan Plain Text. Sawise hackathon, nganyari utama nambah dhukungan kanggo XML, string literals ing Jawa, Kotlin lan Python, lan mriksa ejaan.

Kesulitan

Cepet kita nyadari yen kita menehi kabeh teks menyang LanguageTool kanggo dipriksa saben-saben, antarmuka IDEA bakal beku ing teks sing luwih serius utawa kurang serius, amarga pamriksaan kasebut mblokir aliran UI. Masalah iki ditanggulangi liwat `ProgressManager.checkCancelled` mriksa - fungsi iki mbalang pangecualian yen IDEA pracaya iku wektu kanggo mbatalake pengawasan.

Iki rampung ngilangi pembekuan, nanging ora bisa digunakake: teks mbutuhake wektu sing suwe kanggo diproses. Menapa malih, ing kasus kita, paling asring bagean cilik saka owah-owahan teks lan kita pengin cache asil piye wae. Semono uga sing ditindakake. Supaya ora mriksa kabeh saben wektu, kita misahake teks kanthi deterministik lan mung mriksa sing wis diganti. Amarga teks bisa gedhe lan kita ora pengin mbukak cache, kita ora nyimpen teks kasebut dhewe, nanging hashe. Iki ngidini plugin bisa mlaku kanthi lancar sanajan ing file gedhe.

LanguageTool ndhukung luwih saka 25 basa, nanging ora ana pangguna sing mbutuhake kabeh. Aku wanted kanggo menehi kesempatan kanggo download perpustakaan kanggo basa tartamtu ing panyuwunan (yen sampeyan obah ing UI). Kita malah nindakake iki, nanging ternyata rumit banget lan ora bisa dipercaya. Utamane, kita kudu mbukak LanguageTool nganggo sakumpulan basa anyar nggunakake classloader sing kapisah, banjur miwiti kanthi ati-ati. Ing wektu sing padha, kabeh perpustakaan ana ing repositori .m2 pangguna, lan ing saben wiwitan kita kudu mriksa integritas. Pungkasane, kita mutusake yen pangguna duwe masalah karo ukuran plugin, mula kita bakal nyedhiyakake plugin sing kapisah kanggo sawetara basa sing paling populer.

Sawise hackathon

Hackathon rampung, nanging nggarap plugin terus karo tim sing luwih sempit. Aku pengin ndhukung strings, komentar, lan malah mbangun basa kayata jeneng variabel lan kelas. Saiki iki mung didhukung kanggo Jawa, Kotlin lan Python, nanging kita ngarep-arep dhaptar iki bakal tuwuh. Kita wis ndandani akeh kewan omo cilik lan dadi luwih kompatibel karo spellchecker dibangun ing Idea. Kajaba iku, dhukungan XML lan pamriksa ejaan wis katon. Kabeh iki bisa ditemokake ing versi kapindho, sing diterbitake bubar.

Apa sabanjuré?

Plugin kasebut bisa migunani ora mung kanggo pangembang, nanging uga kanggo panulis teknis (asring digunakake, contone, karo XML ing IDE). Saben dina dheweke kudu nggarap basa alami, tanpa asisten ing wangun tips editor babagan kemungkinan kesalahan. Plugin kita nyedhiyakake pitunjuk kasebut lan nindakake kanthi akurasi sing dhuwur.
Kita rencana ngembangake plugin kasebut, kanthi nambah basa anyar lan njelajah pendekatan umum kanggo ngatur pamriksa teks. Rencana langsung kita kalebu implementasi profil gaya (set aturan sing nemtokake pandhuan gaya kanggo teks, contone, "aja nulis contone, nanging nulis formulir lengkap"), ngembangake kamus lan nambah antarmuka panganggo (utamane, kita pengin menehi pangguna kesempatan ora mung kanggo nglirwakake tembung, nanging kanggo nambah menyang kamus, nuduhake bagean wicara).

Sumber: www.habr.com

Add a comment