Hackathon DevDays'19 (bagian 2): pengurai pesan audio untuk Telegram dan pemeriksaan tata bahasa di IntelliJ IDEA

Kami terus berbicara tentang proyek hackathon musim semi DevDays, di mana siswa program master berpartisipasi "Pengembangan Perangkat Lunak / Rekayasa Perangkat Lunak".

Hackathon DevDays'19 (bagian 2): pengurai pesan audio untuk Telegram dan pemeriksaan tata bahasa di IntelliJ IDEA

Omong-omong, kami ingin mengundang pembaca untuk bergabung Kelompok siswa master VK. Di dalamnya kami akan mempublikasikan berita terbaru tentang rekrutmen dan studi. Video dari hari terbuka juga dapat ditemukan di grup. Kami ingatkan: acaranya akan berlangsung pada 29 April, detailnya secara online.

Pengurai Pesan Suara Desktop Telegram

Hackathon DevDays'19 (bagian 2): pengurai pesan audio untuk Telegram dan pemeriksaan tata bahasa di IntelliJ IDEA

Penulis ide
Khoroshev Artyom

Struktur komando

Khoroshev Artem – manajer proyek/pengembang/QA
Eliseev Anton – analis bisnis/spesialis pemasaran
Maria Kuklina – desainer/pengembang UI
Bakhvalov Pavel – desainer/pengembang/QA UI

Dari sudut pandang kami, Telegram adalah messenger yang modern dan nyaman, dan versi PC-nya populer dan open source, sehingga memungkinkan untuk memodifikasinya. Klien menawarkan fungsionalitas yang cukup kaya. Selain pesan teks standar, ini berisi panggilan suara, pesan video, dan pesan suara. Dan yang terakhir inilah yang terkadang menimbulkan ketidaknyamanan bagi penerimanya. Seringkali tidak mungkin mendengarkan pesan suara saat berada di depan komputer atau laptop. Mungkin ada kebisingan sekitar, kurangnya headphone, atau Anda tidak ingin ada orang yang mendengar isi pesan. Masalah seperti itu hampir tidak pernah muncul jika Anda menggunakan Telegram di smartphone, karena Anda cukup mendekatkannya ke telinga, tidak seperti di laptop atau PC. Kami mencoba menyelesaikan masalah ini.

Tujuan proyek kami di DevDays adalah untuk menambahkan kemampuan menerjemahkan pesan suara yang diterima menjadi teks ke klien desktop Telegram (selanjutnya disebut Telegram Desktop).

Semua analog saat ini adalah bot tempat Anda dapat mengirim pesan audio dan menerima teks sebagai tanggapan. Kami tidak terlalu senang dengan hal ini: meneruskan pesan ke bot sangat tidak nyaman; kami ingin memiliki fungsi asli. Selain itu, bot apa pun adalah pihak ketiga yang bertindak sebagai perantara antara API pengenalan suara dan pengguna, dan ini setidaknya tidak aman.

Seperti disebutkan sebelumnya, telegram-desktop memiliki dua keunggulan signifikan: kemudahan dan kecepatan pengoperasian. Dan ini bukan suatu kebetulan, karena seluruhnya ditulis dalam C++. Dan karena kami memutuskan untuk menambahkan fungsionalitas baru langsung ke klien, kami harus mengembangkannya di C++.

Hackathon DevDays'19 (bagian 2): pengurai pesan audio untuk Telegram dan pemeriksaan tata bahasa di IntelliJ IDEAAda 4 orang di tim kami. Awalnya, dua orang sedang mencari perpustakaan yang cocok untuk pengenalan suara, satu orang sedang mempelajari kode sumber desktop Telegram, yang lain sedang menerapkan proyek pembangunan. Desktop Telegram. Belakangan, semua orang sibuk memperbaiki UI dan debugging.

Tampaknya mengimplementasikan fungsi yang dimaksudkan tidak akan sulit, namun, seperti yang selalu terjadi, kesulitan pun muncul.

Solusi untuk masalah ini terdiri dari dua subtugas independen: memilih alat pengenalan suara yang sesuai dan menerapkan UI untuk fungsionalitas baru.

Saat memilih perpustakaan untuk pengenalan suara, kami harus segera meninggalkan semua API offline, karena model bahasa memakan banyak ruang. Tapi kita hanya berbicara tentang satu bahasa. Menjadi jelas bahwa kami harus menggunakan API online. Belakangan ternyata layanan pengenalan suara dari raksasa seperti Google, Yandex, dan Microsoft sama sekali tidak gratis, dan kita harus puas dengan masa percobaan. Hasilnya, Google Speech-To-Text dipilih karena memungkinkan Anda mendapatkan token untuk menggunakan layanan tersebut, yang akan bertahan selama satu tahun penuh.

Masalah kedua yang kami temui terkait dengan beberapa kekurangan C++ - kebun binatang dari berbagai perpustakaan karena tidak adanya repositori terpusat. Kebetulan Telegram Desktop bergantung pada banyak perpustakaan khusus versi lainnya. Repositori resmi memiliki pengajaran untuk perakitan proyek. Dan juga sejumlah besar isu terbuka tentang masalah build, misalnya waktu ΠΈ Π΄Π²Π°. Semua masalah ternyata terkait dengan fakta bahwa skrip build ditulis untuk Ubuntu 14.04, dan agar berhasil membangun telegram di Ubuntu 18.04, perubahan harus dilakukan.

Telegram Desktop sendiri membutuhkan waktu perakitan yang cukup lama: pada laptop dengan Intel Core i5-7200U, perakitan lengkap (flag -j 4) dengan semua dependensi membutuhkan waktu sekitar tiga jam. Dari jumlah tersebut, waktu yang diperlukan untuk menautkan klien itu sendiri adalah sekitar 30 menit (kemudian ternyata dalam konfigurasi Debug, penautan membutuhkan waktu sekitar 10 menit), tetapi tahap penautan harus diulang setiap kali setelah melakukan perubahan.

Meskipun terdapat kendala, kami berhasil mengimplementasikan ide yang dikandung, serta memperbaruinya membangun skrip untuk Ubuntu 18.04. Demonstrasi karyanya dapat dilihat di link. Kami juga menyertakan beberapa animasi. Sebuah tombol telah muncul di sebelah semua pesan suara, memungkinkan Anda menerjemahkan pesan ke dalam teks. Dengan mengklik kanan, Anda juga dapat menentukan bahasa yang akan digunakan untuk penyiaran. Oleh link klien tersedia untuk diunduh.

Gudang.

Menurut pendapat kami, ini ternyata merupakan Bukti Konsep fungsionalitas yang bagus dan nyaman bagi banyak pengguna. Kami berharap dapat melihatnya di rilis Telegram Desktop mendatang.

Dukungan Bahasa Alami yang Ditingkatkan di IntelliJ IDEA

Hackathon DevDays'19 (bagian 2): pengurai pesan audio untuk Telegram dan pemeriksaan tata bahasa di IntelliJ IDEA

Penulis ide

Tankov Vladislav

Struktur komando

Tankov Vladislav (pemimpin tim, bekerja dengan LanguageTool dan IntelliJ IDEA)
Nikita Sokolov (bekerja dengan LanguageTool dan membuat UI)
Khvorov Alexander (bekerja dengan LanguageTool dan mengoptimalkan kinerja)
Sadovnikov Alexander (dukungan untuk parsing bahasa markup dan kode)

Kami telah mengembangkan plugin untuk IntelliJ IDEA yang memeriksa berbagai teks (komentar dan dokumentasi, baris literal dalam kode, teks yang diformat dalam Markdown atau markup XML) untuk keakuratan tata bahasa, ejaan, dan gaya (dalam bahasa Inggris ini disebut proofreading).

Ide dari proyek ini adalah untuk memperluas pemeriksa ejaan standar IntelliJ IDEA ke skala Grammarly, untuk membuat semacam Grammarly di dalam IDE.

Anda dapat melihat apa yang terjadi ΠΏΠΎ ссылкС.

Nah, di bawah ini kita akan membahas lebih detail tentang kemampuan plugin tersebut, serta kesulitan-kesulitan yang muncul pada saat pembuatannya.

Motivasi

Ada banyak produk yang dirancang untuk menulis teks dalam bahasa alami, namun dokumentasi dan komentar kode paling sering ditulis di lingkungan pengembangan. Pada saat yang sama, IDE melakukan tugasnya dengan baik dalam menemukan kesalahan dalam kode, tetapi kurang cocok untuk teks dalam bahasa alami. Hal ini membuatnya sangat mudah untuk membuat kesalahan dalam tata bahasa, tanda baca, atau gaya tanpa diketahui oleh lingkungan pengembangan. Sangat penting untuk membuat kesalahan dalam penulisan antarmuka pengguna, karena hal ini tidak hanya akan mempengaruhi pemahaman kode, tetapi juga pengguna aplikasi yang dikembangkan itu sendiri.

Salah satu lingkungan pengembangan yang paling populer dan berkembang adalah IntelliJ IDEA, serta IDE berdasarkan Platform IntelliJ. Platform IntelliJ sudah memiliki pemeriksa ejaan bawaan, tetapi tidak menghilangkan kesalahan tata bahasa yang paling sederhana sekalipun. Kami memutuskan untuk mengintegrasikan salah satu sistem analisis bahasa alami yang populer ke dalam IntelliJ IDEA.

Implementasi

Hackathon DevDays'19 (bagian 2): pengurai pesan audio untuk Telegram dan pemeriksaan tata bahasa di IntelliJ IDEAKami tidak menetapkan tugas untuk membuat sistem verifikasi teks kami sendiri, jadi kami menggunakan solusi yang sudah ada. Ternyata pilihan yang paling cocok LanguageTool. Lisensi ini memungkinkan kami untuk menggunakannya secara bebas untuk tujuan kami: gratis, ditulis dalam Java, dan bersumber terbuka. Selain itu, mendukung 25 bahasa dan telah dikembangkan selama lebih dari lima belas tahun. Meskipun bersifat terbuka, LanguageTool merupakan pesaing serius terhadap solusi verifikasi teks berbayar, dan fakta bahwa ia dapat bekerja secara lokal merupakan fitur mematikannya.

Kode plugin sudah masuk repositori di GitHub. Keseluruhan proyek ditulis di Kotlin dengan sedikit tambahan Java untuk UI. Selama hackathon, kami berhasil menerapkan dukungan untuk Markdown, JavaDoc, HTML, dan Teks Biasa. Setelah hackathon, pembaruan besar menambahkan dukungan untuk XML, string literal di Java, Kotlin dan Python, dan pemeriksaan ejaan.

Kesulitan

Kami segera menyadari bahwa jika kami memasukkan semua teks ke LanguageTool untuk diperiksa setiap saat, maka antarmuka IDEA akan membekukan teks yang kurang lebih serius, karena pemeriksaan itu sendiri memblokir aliran UI. Masalahnya diselesaikan melalui pemeriksaan `ProgressManager.checkCancelled` - fungsi ini memberikan pengecualian jika IDEA yakin bahwa sudah waktunya untuk membatalkan pemeriksaan.

Ini sepenuhnya menghilangkan pembekuan, tetapi tidak mungkin untuk digunakan: teks membutuhkan waktu yang sangat lama untuk diproses. Selain itu, dalam kasus kami, paling sering sebagian kecil dari teks berubah dan kami ingin menyimpan hasilnya dalam cache. Itulah tepatnya yang kami lakukan. Agar tidak memeriksa semuanya setiap saat, kami secara deterministik membagi teks menjadi beberapa bagian dan hanya memeriksa yang telah berubah. Karena teksnya bisa berukuran besar dan kami tidak ingin memuat cache, kami tidak menyimpan teks itu sendiri, tetapi hashnya. Hal ini memungkinkan plugin untuk beroperasi dengan lancar bahkan pada file besar.

LanguageTool mendukung lebih dari 25 bahasa, namun kecil kemungkinannya ada pengguna yang membutuhkan semuanya. Saya ingin memberikan kesempatan untuk mengunduh perpustakaan untuk bahasa tertentu berdasarkan permintaan (jika Anda mencentangnya di UI). Kami bahkan menerapkannya, namun ternyata terlalu rumit dan tidak dapat diandalkan. Secara khusus, kami harus memuat LanguageTool dengan kumpulan bahasa baru menggunakan classloader terpisah, lalu menginisialisasinya dengan hati-hati. Pada saat yang sama, semua perpustakaan berada dalam repositori pengguna .m2, dan pada setiap permulaan kami harus memeriksa integritasnya. Pada akhirnya, kami memutuskan bahwa jika pengguna memiliki masalah dengan ukuran plugin, maka kami akan menyediakan plugin terpisah untuk beberapa bahasa terpopuler.

Setelah hackathon

Hackathon telah berakhir, tetapi pengerjaan plugin dilanjutkan dengan tim yang lebih sempit. Saya ingin mendukung string, komentar, dan bahkan konstruksi bahasa seperti nama variabel dan kelas. Saat ini ini hanya didukung untuk Java, Kotlin dan Python, tapi kami berharap daftar ini akan bertambah. Kami telah memperbaiki banyak bug kecil dan menjadi lebih kompatibel dengan pemeriksa ejaan bawaan Idea. Selain itu, dukungan XML dan pemeriksaan ejaan telah muncul. Semua ini dapat ditemukan di versi kedua, yang kami terbitkan baru-baru ini.

Apa selanjutnya?

Plugin semacam itu dapat berguna tidak hanya bagi pengembang, tetapi juga bagi penulis teknis (seringkali bekerja, misalnya, dengan XML dalam IDE). Setiap hari mereka harus bekerja dengan bahasa alami, tanpa asisten berupa editor tips tentang kemungkinan kesalahan. Plugin kami memberikan petunjuk tersebut dan melakukannya dengan tingkat akurasi yang tinggi.
Kami berencana untuk mengembangkan plugin, baik dengan menambahkan bahasa baru maupun dengan mengeksplorasi pendekatan umum untuk mengatur pemeriksaan teks. Rencana jangka pendek kami mencakup penerapan profil gaya (seperangkat aturan yang menentukan panduan gaya untuk teks, misalnya, β€œjangan menulis misalnya, tetapi tulis dalam bentuk lengkap”), memperluas kamus dan meningkatkan antarmuka pengguna (khususnya, kami ingin memberi pengguna kesempatan tidak hanya untuk mengabaikan sebuah kata, tetapi untuk menambahkannya ke dalam kamus, menunjukkan bagian dari pidato).

Sumber: www.habr.com

Tambah komentar