Kami terus berbicara tentang proyek hackathon musim semi DevDays, di mana siswa program master berpartisipasi
Omong-omong, kami ingin mengundang pembaca untuk bergabung
Pengurai Pesan Suara Desktop Telegram
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++.
Ada 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.
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
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
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
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
Kami tidak menetapkan tugas untuk membuat sistem verifikasi teks kami sendiri, jadi kami menggunakan solusi yang sudah ada. Ternyata pilihan yang paling cocok
Kode plugin sudah masuk
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