Hackathon DevDays'19 (bagean 2): parser pesen audio pikeun Telegram sareng pamariksaan grammar dina IntelliJ IDEA

Urang terus ngobrol ngeunaan proyék spring hackathon DevDays, dimana mahasiswa program master milu. "Pamekaran Parangkat Lunak / Téknik Perangkat Lunak".

Hackathon DevDays'19 (bagean 2): parser pesen audio pikeun Telegram sareng pamariksaan grammar dina IntelliJ IDEA

Ku jalan kitu, urang hoyong ngondang pamiarsa pikeun gabung Grup VK murid master. Dina éta kami bakal nyebarkeun beja panganyarna ngeunaan rekrutmen sareng diajar. Video ti dinten kabuka ogé tiasa dipendakan dina grup. Urang ngingetan: acara bakal lumangsung dina April 29, rinci online.

Parser Pesen Sora Desktop Telegram

Hackathon DevDays'19 (bagean 2): parser pesen audio pikeun Telegram sareng pamariksaan grammar dina IntelliJ IDEA

Pangarang gagasan
Khoroshev Artyom

Baris

Khoroshev Artem - manajer proyék / pamekar / QA
Eliseev Anton - analis bisnis / spesialis pamasaran
Maria Kuklina - desainer / pamekar UI
Bakhvalov Pavel - desainer UI / pamekar / QA

Tina sudut pandang urang, Telegram mangrupikeun utusan modéren sareng merenah, sareng versi PC na populér sareng open source, anu ngamungkinkeun pikeun ngarobihana. Klién nawiskeun fungsionalitas anu lumayan. Salian pesen téks standar, éta ngandung sauran sora, pesen video, sareng pesen sora. Jeung kasebut nyaéta dimungkinkeun nu kadang mawa kasulitan pikeun panarima maranéhanana. Seringna henteu mungkin ngadangukeun pesen sora nalika dina komputer atanapi laptop. Bisa jadi aya sora ambient, kurang headphone, atawa anjeun teu hayang saha ngadangu eusi pesen. Masalah sapertos kitu ampir henteu kantos timbul upami anjeun nganggo Telegram dina smartphone, sabab anjeun ngan saukur tiasa nyangking kana ceuli anjeun, teu sapertos laptop atanapi PC. Urang diusahakeun ngajawab masalah ieu.

Tujuan proyék kami di DevDays nyaéta pikeun nambihan kamampuan narjamahkeun pesen sora anu ditampi kana téks ka klien desktop Telegram (saterusna disebut Telegram Desktop).

Sadayana analog ayeuna mangrupikeun bot anu anjeun tiasa ngirim pesen audio sareng nampi téks pikeun ngaréspon. Kami henteu bagja pisan ku ieu: neraskeun pesen ka bot henteu saé pisan; kami hoyong gaduh fungsionalitas asli. Salaku tambahan, bot naon waé mangrupikeun pihak katilu anu bertindak salaku perantara antara API pangakuan ucapan sareng pangguna, sareng ieu, sahenteuna, henteu aman.

Salaku nyatet saméméhna, telegram-desktop boga dua kaunggulan signifikan: betah tur speed operasi. Sarta ieu teu kabeneran, sabab geus ditulis sagemblengna dina C ++. Sarta saprak urang mutuskeun pikeun nambahkeun fungsionalitas anyar langsung ka klien nu, urang kudu ngamekarkeun dina C ++.

Hackathon DevDays'19 (bagean 2): parser pesen audio pikeun Telegram sareng pamariksaan grammar dina IntelliJ IDEAAya 4 urang dina tim kami. Mimitina, dua jalma milarian perpustakaan anu cocog pikeun pangakuan ucapan, hiji jalma diajar kode sumber Telegram-desktop, anu sanésna nyebarkeun proyék ngawangun. Desktop Telegram. Engké, dulur sibuk ngalereskeun UI jeung debugging.

Ieu seemed yén palaksanaan pungsionalitas dimaksudkeun moal hese, tapi, sakumaha salawasna kajadian, kasusah timbul.

Solusi pikeun masalah ieu diwangun ku dua subtugas mandiri: milih alat pangakuan ucapan anu cocog sareng nerapkeun UI pikeun fungsionalitas anyar.

Nalika milih perpustakaan pikeun pangakuan sora, urang langsung kedah ngantunkeun sadaya API offline, sabab modél basa nyandak seueur rohangan. Tapi urang ngobrol ngeunaan ngan hiji basa. Janten jelas yén urang kedah nganggo API online. Engké tétéla yén jasa pangakuan ucapan raksasa sapertos Google, Yandex sareng Microsoft henteu gratis, sareng urang kedah sugema ku jaman percobaan. Hasilna, Google Speech-To-Text dipilih sabab ngamungkinkeun anjeun kéngingkeun token pikeun ngagunakeun jasa éta, anu bakal salami sataun.

Masalah kadua anu urang tepang aya hubunganana sareng sababaraha kakurangan C ++ - kebon binatang tina rupa-rupa perpustakaan dina henteuna gudang terpusat. Éta kajadian yén Telegram Desktop gumantung kana seueur perpustakaan khusus versi anu sanés. Repository resmi boga parentah pikeun assembling proyék. Sareng ogé sajumlah ageung masalah kabuka ngeunaan masalah ngawangun, contona waktu и два. Sadaya masalah tétéla aya hubunganana sareng kanyataan yén naskah ngawangun ditulis pikeun Ubuntu 14.04, sareng pikeun suksés ngawangun telegram dina Ubuntu 18.04, parobihan kedah dilakukeun.

Telegram Desktop sorangan nyokot rada lila pikeun ngumpul: dina laptop kalawan Intel Core i5-7200U, assembly lengkep (bandéra -j 4) kalawan sagala gumantungna nyokot ngeunaan tilu jam. Tina ieu, kira-kira 30 menit dicandak ku ngaitkeun klien sorangan (engké tétéla yén dina konfigurasi Debug, linking butuh kira-kira 10 menit), tapi tahap linking kudu diulang unggal waktu sanggeus nyieun parobahan.

Sanajan masalah, urang junun nerapkeun gagasan katimu, kitu ogé update ngawangun naskah pikeun Ubuntu 18.04. A démo karya bisa ditempo dina link. Urang ogé ngawengku sababaraha animasi. Tombol parantos nembongan di gigireun sadaya pesen sora, anu ngamungkinkeun anjeun narjamahkeun pesen kana téks. Ku ngaklik katuhu, anjeun ogé tiasa netepkeun basa anu bakal dianggo pikeun siaran. Ku link klien sadia pikeun diundeur.

Repository.

Dina pamadegan urang, tétéla éta bukti alus tina Konsep fungsionalitas nu bakal merenah pikeun loba pamaké. Kami ngarepkeun ningali éta dina sékrési Telegram Desktop anu bakal datang.

Ngaronjatkeun Pangrojong Basa Alam di IntelliJ IDEA

Hackathon DevDays'19 (bagean 2): parser pesen audio pikeun Telegram sareng pamariksaan grammar dina IntelliJ IDEA

Pangarang gagasan

Tankov Vladislav

Baris

Tankov Vladislav (pamimpin tim, damel sareng LanguageTool sareng IntelliJ IDEA)
Nikita Sokolov (garap sareng LanguageTool sareng nyiptakeun UI)
Khvorov Alexander (garap sareng LanguageTool sareng ngaoptimalkeun kinerja)
Sadovnikov Alexander (rojongan pikeun parsing basa markup sareng kode)

Kami parantos ngembangkeun plugin pikeun IntelliJ IDEA anu mariksa rupa-rupa téks (koméntar sareng dokuméntasi, garis literal dina kode, téks anu diformat dina Markdown atanapi markup XML) pikeun akurasi gramatikal, éjahan sareng gaya (dina basa Inggris ieu disebut proofreading).

Gagasan proyék éta pikeun ngalegaan cek ejaan standar IntelliJ IDEA kana skala Grammarly, pikeun ngadamel jinis Grammarly di jero IDE.

Anjeun tiasa ningali naon anu lumangsung link.

Nya, di handap ieu kami bakal ngobrol langkung rinci ngeunaan kamampuan plugin, ogé kasusah anu timbul nalika nyiptakeunana.

alesan

Aya seueur produk anu dirancang pikeun nyerat téks dina basa alami, tapi dokuméntasi sareng koméntar kode paling sering ditulis dina lingkungan pangembangan. Dina waktos anu sami, IDE ngalakukeun padamelan anu saé pikeun milarian kasalahan dina kode, tapi henteu cocog pikeun téks dina basa alami. Hal ieu ngajadikeun eta pisan gampang nyieun kasalahan dina grammar, tanda baca, atawa gaya tanpa lingkungan ngembangkeun nunjuk aranjeunna kaluar. Hal anu paling penting pikeun kasalahan dina nulis antarbeungeut pangguna, sabab ieu bakal mangaruhan henteu ngan ukur kaharti kodeu, tapi ogé pangguna aplikasi anu dikembangkeun sorangan.

Salah sahiji lingkungan pamekaran anu pang populerna sareng maju nyaéta IntelliJ IDEA, ogé IDE dumasar kana Platform IntelliJ. IntelliJ Platform parantos ngagaduhan panyemak ejaan anu diwangun, tapi éta henteu ngaleungitkeun kasalahan gramatikal anu paling sederhana. Urang mutuskeun pikeun ngahijikeun salah sahiji sistem analisis basa alam populér kana IntelliJ IDEA.

Реализация

Hackathon DevDays'19 (bagean 2): parser pesen audio pikeun Telegram sareng pamariksaan grammar dina IntelliJ IDEAKami henteu netepkeun tugas pikeun nyiptakeun sistem verifikasi téks sorangan, janten kami nganggo solusi anu tos aya. Pilihan anu paling cocog tétéla BasaTool. Lisensi éta ngamungkinkeun urang ngagunakeun éta pikeun tujuan urang: éta gratis, ditulis dina Java sareng open-source. Salaku tambahan, éta ngadukung 25 basa sareng parantos dikembangkeun langkung ti lima belas taun. Sanaos kabuka, LanguageTool mangrupikeun pesaing serius pikeun solusi verifikasi téks anu mayar, sareng kanyataan yén éta tiasa dianggo sacara lokal sacara harfiah mangrupikeun fitur pembunuh na.

Kodeu plugin aya dina repositories on GitHub. Sakabéh proyék ieu ditulis dina Kotlin kalawan tambahan leutik Java pikeun UI. Salila hackathon, urang junun nerapkeun rojongan pikeun Markdown, JavaDoc, HTML jeung Plain Text. Saatos hackathon, pembaruan utama nambihan dukungan pikeun XML, string literal dina Java, Kotlin sareng Python, sareng mariksa ejaan.

Kasusah

Rada gancang urang sadar yen lamun urang eupan sakabeh téks ka LanguageTool pikeun inspeksi unggal waktu, mangka panganteur IDEA bakal freeze on sagala téks leuwih atawa kirang serius, saprak inspeksi sorangan blok aliran UI. Masalah ieu direngsekeun ngaliwatan `ProgressManager.checkCancelled` cék - fungsi ieu throws iwal lamun IDEA yakin yén éta téh waktu abort inspeksi.

Ieu sagemblengna ngaleungitkeun freezes, tapi teu mungkin migunakeun: téks butuh waktu anu pohara lila pikeun ngolah. Leuwih ti éta, dina kasus urang, paling sering bagian leutik pisan tina parobahan téks na urang hoyong cache hasilna kumaha bae. Éta kahayang urang ngalakukeun. Pikeun henteu mariksa sadayana unggal waktos, kami sacara deterministik ngabagi téks kana potongan-potongan sareng pariksa ngan ukur anu parantos robih. Kusabab téks tiasa ageung sareng kami henteu hoyong ngamuat cache, kami henteu nyimpen téksna nyalira, tapi hashes na. Ieu ngamungkinkeun plugin pikeun beroperasi lancar sanajan dina file ageung.

LanguageTool ngadukung langkung ti 25 basa, tapi sigana teu aya hiji pangguna anu peryogi sadayana. Kuring hayang masihan kasempetan pikeun ngundeur perpustakaan pikeun basa husus kana pamundut (lamun keletik eta dina UI). Kami malah ngalaksanakeun ieu, tapi tétéla teuing pajeulit sareng teu tiasa dipercaya. Khususna, urang kedah ngamuat LanguageTool sareng set basa énggal nganggo classloader anu misah, teras sacara saksama ngamimitianana. Dina waktos anu sami, sadaya perpustakaan aya dina gudang .m2 pangguna, sareng dina unggal ngamimitian urang kedah pariksa integritasna. Tungtungna, kami mutuskeun yén upami pangguna ngagaduhan masalah sareng ukuran plugin, maka kami bakal nyayogikeun plugin anu misah pikeun sababaraha basa anu pang populerna.

Sanggeus hackathon

Hackathon réngsé, tapi gawé dina plugin dituluykeun ku tim narrower. Kuring hayang ngarojong string, komentar, komo constructs basa kayaning variabel jeung ngaran kelas. Ayeuna ieu ngan ukur dirojong pikeun Java, Kotlin sareng Python, tapi kami ngarepkeun daptar ieu bakal ningkat. Kami parantos ngalereskeun seueur bug leutik sareng janten langkung cocog sareng pamariksaan ejaan anu diwangun ku Idea. Salaku tambahan, dukungan XML sareng pamariksaan ejaan parantos muncul. Sadaya ieu tiasa dipendakan dina versi kadua, anu kami nembé diterbitkeun.

Naon saterusna?

Plugin sapertos kitu tiasa mangpaat henteu ngan ukur pikeun pamekar, tapi ogé pikeun panulis téknis (sering dianggo, contona, XML dina IDE). Saban poé maranéhna kudu digawekeun ku basa alam, tanpa asisten dina bentuk tips redaktur ngeunaan kamungkinan kasalahan. Plugin kami nyayogikeun petunjuk sapertos kitu sareng ngalakukeunana kalayan tingkat akurasi anu luhur.
Kami ngarencanakeun pikeun ngembangkeun plugin, boh ku nambihan basa anyar sareng ku ngajalajah pendekatan umum pikeun ngatur pamariksaan téks. Rencana langsung kami kalebet palaksanaan profil stilistika (sét aturan anu netepkeun pituduh gaya pikeun téks, contona, "ulah nyerat sapertos, tapi nyerat bentuk lengkep"), ngalegaan kamus sareng ningkatkeun antarmuka pangguna (khususna, Kami hoyong masihan pangguna kasempetan henteu ngan ukur malire hiji kecap, tapi nambihan kana kamus, nunjukkeun bagian ucapan).

Sumber: www.habr.com

Tambahkeun komentar