Kami terus bercakap tentang projek hackathon musim bunga DevDays, di mana pelajar program sarjana mengambil bahagian
Dengan cara ini, kami ingin menjemput pembaca untuk menyertai
Penghurai Mesej Suara Desktop Telegram
Pengarang idea itu
Khoroshev Artyom
Berbaris
Khoroshev Artem β pengurus projek/pemaju/QA
Eliseev Anton β penganalisis perniagaan/pakar pemasaran
Maria Kuklina β pereka/pembangun UI
Bakhvalov Pavel β pereka/pembangun UI/QA
Dari sudut pandangan kami, Telegram ialah utusan moden dan mudah, dan versi PCnya adalah popular dan sumber terbuka, yang memungkinkan untuk mengubah suainya. Pelanggan menawarkan fungsi yang agak kaya. Selain mesej teks standard, ia mengandungi panggilan suara, mesej video dan mesej suara. Dan yang terakhir yang kadangkala membawa kesulitan kepada penerima mereka. Selalunya tidak mungkin untuk mendengar mesej suara semasa berada di komputer atau komputer riba. Mungkin terdapat bunyi ambien, kekurangan fon kepala atau anda tidak mahu sesiapa mendengar kandungan mesej itu. Masalah sedemikian hampir tidak pernah timbul jika anda menggunakan Telegram pada telefon pintar, kerana anda boleh membawanya ke telinga anda, tidak seperti komputer riba atau PC. Kami cuba menyelesaikan masalah ini.
Matlamat projek kami di DevDays adalah untuk menambah keupayaan untuk menterjemah mesej suara yang diterima ke dalam teks kepada pelanggan desktop Telegram (selepas ini dirujuk sebagai Desktop Telegram).
Semua analog pada masa ini adalah bot yang anda boleh menghantar mesej audio dan menerima teks sebagai balasan. Kami tidak begitu berpuas hati dengan ini: memajukan mesej ke bot tidak begitu mudah; kami ingin mempunyai fungsi asli. Selain itu, mana-mana bot ialah pihak ketiga yang bertindak sebagai perantara antara API pengecaman pertuturan dan pengguna, dan ini, sekurang-kurangnya, tidak selamat.
Seperti yang dinyatakan sebelum ini, telegram-desktop mempunyai dua kelebihan penting: kemudahan dan kelajuan operasi. Dan ini bukan kebetulan, kerana ia ditulis sepenuhnya dalam C++. Dan kerana kami memutuskan untuk menambah fungsi baharu terus kepada pelanggan, kami terpaksa membangunkannya dalam C++.
Terdapat 4 orang dalam pasukan kami. Pada mulanya, dua orang sedang mencari perpustakaan yang sesuai untuk pengecaman pertuturan, seorang sedang mengkaji kod sumber Telegram-desktop, seorang lagi sedang menggunakan projek binaan
Nampaknya melaksanakan fungsi yang dimaksudkan tidak sukar, tetapi, seperti biasa, kesukaran timbul.
Penyelesaian kepada masalah tersebut terdiri daripada dua subtugas bebas: memilih alat pengecaman pertuturan yang sesuai dan melaksanakan UI untuk fungsi baharu.
Apabila memilih perpustakaan untuk pengecaman suara, kami terpaksa meninggalkan semua API luar talian dengan serta-merta, kerana model bahasa mengambil banyak ruang. Tetapi kita bercakap tentang satu bahasa sahaja. Ia menjadi jelas bahawa kami perlu menggunakan API dalam talian. Kemudian ternyata perkhidmatan pengecaman pertuturan gergasi seperti Google, Yandex dan Microsoft tidak sama sekali percuma, dan kami perlu berpuas hati dengan tempoh percubaan. Hasilnya, Google Speech-To-Text telah dipilih kerana ia membolehkan anda mendapatkan token untuk menggunakan perkhidmatan tersebut, yang akan bertahan selama setahun penuh.
Masalah kedua yang kami temui adalah berkaitan dengan beberapa kelemahan C++ - zoo pelbagai perpustakaan tanpa adanya repositori berpusat. Kebetulan Desktop Telegram bergantung pada banyak perpustakaan khusus versi lain. Repositori rasmi mempunyai
Telegram Desktop sendiri mengambil masa yang agak lama untuk dipasang: pada komputer riba dengan Intel Core i5-7200U, pemasangan lengkap (bendera -j 4) dengan semua kebergantungan mengambil masa kira-kira tiga jam. Daripada jumlah ini, kira-kira 30 minit diambil dengan memautkan klien itu sendiri (kemudian ternyata dalam konfigurasi Nyahpepijat, pemautan mengambil masa kira-kira 10 minit), namun peringkat pemautan perlu diulang setiap kali selepas membuat perubahan.
Walaupun menghadapi masalah, kami berjaya melaksanakan idea yang difikirkan, serta mengemas kini
Pada pendapat kami, ia ternyata menjadi Bukti Konsep yang baik untuk fungsi yang akan memudahkan ramai pengguna. Kami berharap dapat melihatnya dalam keluaran Desktop Telegram yang akan datang.
Sokongan Bahasa Semulajadi yang Dipertingkatkan dalam IntelliJ IDEA
Pengarang idea itu
Tankov Vladislav
Berbaris
Tankov Vladislav (ketua pasukan, bekerja dengan LanguageTool dan IntelliJ IDEA)
Nikita Sokolov (bekerja dengan LanguageTool dan mencipta UI)
Khvorov Alexander (bekerja dengan LanguageTool dan mengoptimumkan prestasi)
Sadovnikov Alexander (sokongan untuk menghurai bahasa markup dan kod)
Kami telah membangunkan pemalam untuk IntelliJ IDEA yang menyemak pelbagai teks (komen dan dokumentasi, baris literal dalam kod, teks yang diformatkan dalam Markdown atau markup XML) untuk ketepatan tatabahasa, ejaan dan gaya (dalam bahasa Inggeris ini dipanggil proofreading).
Idea projek ini adalah untuk mengembangkan semakan ejaan standard IntelliJ IDEA kepada skala Grammarly, untuk membuat sejenis Grammarly di dalam IDE.
Anda boleh melihat apa yang berlaku
Nah, di bawah ini kita akan bercakap dengan lebih terperinci tentang keupayaan pemalam, serta kesukaran yang timbul semasa penciptaannya.
Motivasi
Terdapat banyak produk yang direka untuk menulis teks dalam bahasa semula jadi, tetapi dokumentasi dan komen kod paling kerap ditulis dalam persekitaran pembangunan. Pada masa yang sama, IDE melakukan kerja yang sangat baik untuk mencari ralat dalam kod, tetapi kurang sesuai untuk teks dalam bahasa semula jadi. Ini menjadikannya sangat mudah untuk membuat kesilapan dalam tatabahasa, tanda baca atau gaya tanpa persekitaran pembangunan menunjukkannya. Adalah paling kritikal untuk membuat kesilapan dalam menulis antara muka pengguna, kerana ini akan menjejaskan bukan sahaja kefahaman kod, tetapi juga pengguna aplikasi yang dibangunkan itu sendiri.
Salah satu persekitaran pembangunan yang paling popular dan dibangunkan ialah IntelliJ IDEA, serta IDE berdasarkan Platform IntelliJ. Platform IntelliJ sudah mempunyai penyemak ejaan terbina dalam, tetapi ia tidak menyingkirkan ralat tatabahasa yang paling mudah sekalipun. Kami memutuskan untuk menyepadukan salah satu sistem analisis bahasa semula jadi yang popular ke dalam IntelliJ IDEA.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
Kami tidak menetapkan sendiri tugas untuk mencipta sistem pengesahan teks kami sendiri, jadi kami menggunakan penyelesaian sedia ada. Pilihan yang paling sesuai ternyata
Kod pemalam ada dalam
Kesukaran
Dengan cepat kami menyedari bahawa jika kami menyuapkan semua teks ke LanguageTool untuk pemeriksaan setiap kali, maka antara muka IDEA akan membeku pada mana-mana teks yang lebih atau kurang serius, kerana pemeriksaan itu sendiri menyekat aliran UI. Masalah telah diselesaikan melalui semakan `ProgressManager.checkCancelled` - fungsi ini memberikan pengecualian jika IDEA percaya bahawa sudah tiba masanya untuk membatalkan pemeriksaan.
Ini menghapuskan pembekuan sepenuhnya, tetapi adalah mustahil untuk digunakan: teks mengambil masa yang sangat lama untuk diproses. Lebih-lebih lagi, dalam kes kami, selalunya sebahagian kecil daripada teks berubah dan kami mahu cache hasilnya entah bagaimana. Itulah yang kami lakukan. Untuk tidak menyemak segala-galanya setiap kali, kami secara deterministik membelah teks menjadi beberapa bahagian dan menyemak hanya teks yang telah berubah. Memandangkan teks boleh menjadi besar dan kami tidak mahu memuatkan cache, kami tidak menyimpan teks itu sendiri, tetapi cincangnya. Ini membolehkan pemalam beroperasi dengan lancar walaupun pada fail besar.
LanguageTool menyokong lebih daripada 25 bahasa, tetapi tidak mungkin mana-mana pengguna memerlukan kesemuanya. Saya ingin memberi peluang untuk memuat turun perpustakaan untuk bahasa tertentu atas permintaan (jika anda menandakannya dalam UI). Kami juga melaksanakan ini, tetapi ia ternyata terlalu rumit dan tidak boleh dipercayai. Khususnya, kami terpaksa memuatkan LanguageTool dengan set bahasa baharu menggunakan pemuat kelas yang berasingan, dan kemudian memulakannya dengan berhati-hati. Pada masa yang sama, semua perpustakaan berada dalam repositori .m2 pengguna, dan pada setiap permulaan kami perlu menyemak integritinya. Pada akhirnya, kami memutuskan bahawa jika pengguna menghadapi masalah dengan saiz pemalam, maka kami akan menyediakan pemalam yang berasingan untuk beberapa bahasa yang paling popular.
Selepas hackathon
Hackathon telah berakhir, tetapi kerja pada pemalam diteruskan dengan pasukan yang lebih sempit. Saya mahu menyokong rentetan, komen, dan juga binaan bahasa seperti pembolehubah dan nama kelas. Pada masa ini ini hanya disokong untuk Java, Kotlin dan Python, tetapi kami berharap senarai ini akan berkembang. Kami telah membetulkan banyak pepijat kecil dan menjadi lebih serasi dengan penyemak ejaan terbina dalam Idea. Selain itu, sokongan XML dan semakan ejaan telah muncul. Semua ini boleh didapati dalam versi kedua, yang kami terbitkan baru-baru ini.
Apa seterusnya?
Plugin sedemikian boleh berguna bukan sahaja untuk pembangun, tetapi juga untuk penulis teknikal (selalunya berfungsi, sebagai contoh, dengan XML dalam IDE). Setiap hari mereka perlu bekerja dengan bahasa semula jadi, tanpa mempunyai pembantu dalam bentuk petua editor tentang kemungkinan kesilapan. Pemalam kami menyediakan petunjuk sedemikian dan melakukannya dengan tahap ketepatan yang tinggi.
Kami merancang untuk membangunkan pemalam, kedua-duanya dengan menambah bahasa baharu dan dengan meneroka pendekatan umum untuk mengatur pemeriksaan teks. Rancangan segera kami termasuk pelaksanaan profil gaya (set peraturan yang mentakrifkan panduan gaya untuk teks, contohnya, "jangan tulis cth, tetapi tulis dalam bentuk penuh"), mengembangkan kamus dan menambah baik antara muka pengguna (khususnya, kami ingin memberi pengguna peluang bukan sahaja untuk mengabaikan perkataan, tetapi menambahnya ke dalam kamus, menunjukkan bahagian ucapan).
Sumber: www.habr.com