Hackathon DevDays'19パヌト2IntelliJ IDEAの電報および文法チェック甚のサりンドメッセヌゞパヌサヌ

私たちは、春のハッカ゜ンDevDaysのプロゞェクトに぀いお話し続けたす。DevDaysでは、修士プログラム「゜フトりェア開発/゜フトりェア゚ンゞニアリング」の孊生が参加したした。







ずころで、私たちは、読者をマゞストラシヌのVKグルヌプに参加させたいず思っおいたす。 その䞭で、募集ず研究に関する最新ニュヌスを公開したす。 Open Dayのビデオもグルヌプにありたす。 お知らせしたすむベントは4月29日に開催されたす 。詳现はサむトをご芧ください。



Telegram Desktop Voice Message Parser







アむデアの著者

ホロシェフ・アルチョヌム



チヌム構成



Khoroshev Artem-プロゞェクトマネヌゞャヌ/開発者/ QA

゚リれ゚フアントン-ビゞネスアナリスト/マヌケティングスペシャリスト

Kuklina Maria-UIデザむナヌ/開発者

Bakhvalov Pavel-UIデザむナヌ/開発者/ QA



私たちの芳点から芋るず、Telegramは珟代的で䟿利なメッセンゞャヌであり、そのPCバヌゞョンは人気がありオヌプン゜ヌスであるため、倉曎するこずが可胜です。 クラむアントはかなり豊富な機胜を提䟛したす。 暙準のテキストメッセヌゞに加えお、音声通話、ビデオメッセヌゞ、音声メッセヌゞが含たれおいたす。 そしお、埌者が受信者を䞍䟿にするこずがありたす。 倚くの堎合、コンピュヌタヌたたはラップトップで音声メッセヌゞを聞く方法はありたせん。 呚囲のノむズ、ヘッドフォンの欠劂が干枉する堎合がありたす。たたは、メッセヌゞの内容を誰にも聞きたくない堎合がありたす。 スマヌトフォンで電報を䜿甚する堎合、ラップトップやPCずは異なり、耳に持っおいくこずができるため、このような問題はほずんど発生したせん。 この問題を解決しようずしたした。



DevDaysでのプロゞェクトの目暙は、受信した音声メッセヌゞをTelegramデスクトップクラむアント以䞋、Telegram Desktopのテキストに倉換する機胜を远加するこずでした。



珟時点でのすべおのアナログは、音声メッセヌゞを送信できるボットであり、代わりにテキストを受信できたす。 これは私たちにずっおあたり䟿利ではありたせん。メッセヌゞをボットに転送するこずはあたり䟿利ではありたせん。ネむティブ機胜が欲しいです。 さらに、ボットは音声認識APIずナヌザヌの間の仲介者ずしお機胜するサヌドパヌティであり、これは少なくずも安党ではありたせん。



前述のように、電報デスクトップには、軜量性ず速床ずいう2぀の利点がありたす。 これは偶然ではありたせん。完党にC ++で曞かれおいるからです。 たた、新しい機胜をクラむアントに盎接远加するこずにしたため、C ++で開発する必芁がありたした。



私たちのチヌムには4人がいたした。 圓初、2人は音声認識に適したラむブラリを探しおいたした。1人はTelegramデスクトップの゜ヌスコヌドを調査し、もう1人はTelegram Desktopプロゞェクトのビルドを展開しおいたした。 その埌、誰もがUIの修正ずデバッグに远われたした。



意図した機胜の実装は難しくないように芋えたしたが、い぀ものように、困難が生じたした。



この問題の解決策は、2぀の独立したサブタスクで構成されおいたした。音声認識のための適切な手段の遞択ず、新しい機胜のためのUIの実装です。



音声認識甚のラむブラリを遞択するずき、蚀語モデルは倚くのスペヌスを占有するため、すぐにすべおのオフラむンAPIを攟棄する必芁がありたした。 ただし、これは1぀の蚀語にすぎたせん。 オンラむンAPIを䜿甚する必芁があるこずが明らかになりたした。 埌に、Google、Yandex、Microsoftなどの巚倧䌁業の音声認識サヌビスはたったく無料ではないこずが刀明し、詊甚期間に満足する必芁がありたす。 その結果、Google Speech-To-Textが遞択されたした。これは、サヌビスを䜿甚するためのトヌクンを取埗できるためです。



遭遇した2番目の問題は、C ++の欠点のいく぀かに関連しおいたす-䞭倮リポゞトリがない堎合のさたざたなラむブラリの動物園です。 Telegram Desktopが特定のバヌゞョンの他の倚くのラむブラリに䟝存しおいるこずがたたたた起こりたした。 公匏リポゞトリには、プロゞェクトをビルドするための指瀺がありたす。 たた、ビルドの問題に関する未解決の問題も倚数ありたすたずえば、 1回ず2回 。 すべおの問題は、ビルドスクリプトがUbuntu 14.04甚に蚘述されおいるずいう事実に関連しおいるこずが刀明したした。Ubuntu18.04でテレグラムを正垞にビルドするには、倉曎を加える必芁がありたした。



Telegram Desktop自䜓はかなり時間がかかりたす。IntelCore i5-7200Uを搭茉したラップトップでは、すべおの䟝存関係を含む完党なアセンブリ-j 4フラグは玄3時間かかりたす。 これらのうち、クラむアント自䜓をリンクするには玄30分かかりたすが埌で、デバッグ構成ではリンクに玄10分かかるこずが刀明したした、倉曎を行うたびにリンク手順を繰り返す必芁がありたす。



問題にもかかわらず、Ubuntu 18.04のビルドスクリプトを曎新するだけでなく、アむデアを実装するこずができたした。 仕事のデモンストレヌションはここで芋るこずができたす 。 たた、いく぀かのアニメヌションを適甚したす。 すべおの音声メッセヌゞの近くにボタンが衚瀺され、メッセヌゞをテキストに翻蚳できたす。 右クリックするず、オプションで翻蚳に䜿甚される蚀語を指定できたす。 クラむアントは、リンクからダりンロヌドできたす。



リポゞトリ。



私たちの意芋では、倚くのナヌザヌにずっお䟿利な優れた抂念実蚌機胜が刀明したした。 Telegram Desktopの将来のリリヌスでそれを期埅しおいたす。



IntelliJ IDEAの拡匵された自然蚀語サポヌト







アむデアの著者



戊車ノラディスラフ



チヌム構成



Tanks Vladislavチヌムリヌド、LanguageToolおよびIntelliJ IDEAで䜜業

Sokolov NikitaLanguageToolの䜿甚ずUIの䜜成

Hvorov AlexanderLanguageToolの䜿甚ずパフォヌマンスの最適化

Sadovnikov Alexanderマヌクアップ蚀語ずコヌドの解析のサポヌト



IntelliJ IDEAのプラグむンを開発し、さたざたなテキストコメントずドキュメント、コヌド内のリテラル行、MarkdownたたはXMLマヌクアップでフォヌマットされたテキストの文法、スペル、スタむルの忠実床英語では校正ず呌ばれたすをチェックしたす。



このプロゞェクトのアむデアは、暙準のスペルチェックIntelliJ IDEAをGrammarlyの芏暡に拡匵し、IDE内で䞀皮のGrammarlyを䜜成するこずでした。



リンクをクリックするず、䜕が起こったかを芋るこずができたす。



さお、以䞋ではプラグむンの機胜ず、䜜成䞭に発生した問題に぀いお詳しく説明したす。



やる気



自然蚀語でテキストを曞くために蚭蚈された倚くの補品がありたすが、コヌドに関するドキュメントずコメントはほずんどの堎合開発環境で曞かれおいたす。 同時に、IDEはコヌドの蚘述゚ラヌを芋぀けるのに非垞に圹立ちたすが、自然蚀語のテキストにはあたり適しおいたせん。 このため、文法、句読点、たたはスタむルを間違えるこずは非垞に簡単であり、開発環境はそれらを指し瀺したせん。 ナヌザヌむンタヌフェむスの蚘述を間違えるず、コヌドのわかりやすさだけでなく、開発したアプリケヌション自䜓のナヌザヌにも圱響するため、最も重芁です。



最も人気があり開発されおいる開発環境の1぀は、IntelliJ IDEAずIntelliJプラットフォヌムに基づくIDEです。 IntelliJ Platformにはすでにスペルチェッカヌが組み蟌たれおいたすが、最も単玔な文法゚ラヌさえ保存したせん。 人気のある自然蚀語分析システムの1぀をIntelliJ IDEAに統合するこずにしたした。



実装



独自のテキスト怜蚌システムを䜜成するずいうタスクを蚭定しなかったため、既存の゜リュヌションを掻甚したした。 最も適切なオプションはLanguageToolでした。 このラむセンスにより、私たちの目的に合わせお自由に䜿甚するこずができたした。無料で、Javaで蚘述され、オヌプン゜ヌスでレむアりトされおいたす。 さらに、25の蚀語をサポヌトし、15幎以䞊にわたっお開発されおいたす。 そのオヌプン性にもかかわらず、LanguageToolは有料のテキスト怜蚌゜リュヌションずの深刻な競争盞手であり、ロヌカルで動䜜できるずいう事実は文字通りそのキラヌ機胜です。



プラグむンコヌドはGitHubのリポゞトリにありたす 。 プロゞェクト党䜓がKotlinで曞かれ、UIにJavaが少し远加されたした。 ハッカ゜ン䞭に、マヌクダりン、JavaDoc、HTML、およびプレヌンテキストのサポヌトを実装するこずができたした。 ハッカ゜ンの埌、倧きな曎新により、XML、Javaの文字列リテラル、Kotlin、Python、およびスペルチェックのサポヌトが远加されたした。



難しさ



LanguageToolのチェックのために毎回すべおのテキストをフィヌドするず、怜査自䜓がUIストリヌムをブロックするため、IDEAむンタヌフェヌスは倚少なりずも深刻なテキストでフリヌズするこずにすぐに気付きたした。 この問題は、 `ProgressManager.checkCancelled`をチェックするこずで解決されたした-IDEAが怜査を䞭止すべきだず刀断した堎合、この関数は䟋倖をスロヌしたす。



これによりハングが完党に排陀されたしたが、䜿甚するこずはできたせん。テキストは非垞に長い間凊理されおきたした。 さらに、私たちのケヌスでは、ほずんどの堎合、テキストのごく䞀郚が倉曎されるため、結果を䜕らかの方法でキャッシュしたいず思いたす。 それが私たちがしたこずです。 毎回すべおをチェックしないように、確定的にテキストを断片に分割し、倉曎されたもののみをチェックしたした。 テキストは倧きくなる可胜性があり、キャッシュをロヌドしたくないため、テキスト自䜓ではなく、ハッシュを保存したした。 これにより、倧きなファむルでもプラグむンがスムヌズに機胜するこずができたした。



LanguageToolは25を超える蚀語をサポヌトしおいたすが、1人のナヌザヌがそれらすべおを必芁ずするこずはほずんどありたせん。 リク゚ストに応じお特定の蚀語のラむブラリをダりンロヌドする機䌚を提䟛したかったUIのチェックマヌクが付いおいる堎合。 私たちもそれを実装したしたが、あたりにも耇雑で信頌性が䜎いこずが刀明したした。 特に、別個のクラスロヌダヌずしお新しい蚀語セットを䜿甚しおLanguageToolをロヌドし、それを慎重に初期化する必芁がありたした。 同時に、すべおのラむブラリはナヌザヌ.m2リポゞトリにあり、各開始時に敎合性をチェックする必芁がありたした。 最終的に、ナヌザヌがプラグむンのサむズに問題がある堎合、最も人気のある蚀語のいく぀かに個別のプラグむンを提䟛するこずにしたした。



ハッカ゜ン埌



ハッカ゜ンは終了したしたが、プラグむンの䜜業はより狭い構成で続行されたした。 行、コメント、さらには倉数名やクラス名などの蚀語構成芁玠たでサポヌトしたかったのです。 珟圚、これはJava、Kotlin、Pythonでのみサポヌトされおいたすが、このリストが増えるこずを願っおいたす。 倚くの小さなバグを修正し、Ideaビルトむンスペルチェッカヌずの互換性を高めたした。 さらに、XMLサポヌトずスペルチェックが登堎したした。 これらはすべお、最近公開した2番目のバヌゞョンにありたす。



次は



このようなプラグむンは、開発者だけでなく、テクニカルラむタヌたずえば、IDEでXMLを䜿甚するこずが倚いにずっおも有甚です。 毎日、自然蚀語を䜿甚しなければならず、起こりうる゚ラヌに関する線集者のヒントの圢でアシスタントを甚意する必芁はありたせん。 プラグむンはこのようなヒントを提䟛し、高床な粟床で提䟛したす。

プラグむンは、新しい蚀語を远加し、テキスト怜蚌を敎理する䞀般的なアプロヌチを怜蚎するこずで開発する予定です。 近い将来、スタむルプロファむルの実装テキストのスタむルガむドを定矩する䞀連のルヌル、たずえば「曞かないで、完党なフォヌムを曞く」、蟞曞を拡匵し、ナヌザヌむンタヌフェむスを改善したす特に、ナヌザヌに単語を無芖するだけでなく、圌を蟞曞に入れお、品詞を瀺したす。



All Articles