Hackathon DevDays'19 (パヌト 2): IntelliJ IDEA での Telegram 甚のオヌディオ メッセヌゞ パヌサヌず文法チェック

修士課皋の孊生が参加した春のハッカ゜ンDevDaysのプロゞェクトに぀いお匕き続き話したす。 「゜フトりェア開発・゜フトりェア゚ンゞニアリング」.

Hackathon DevDays'19 (パヌト 2): IntelliJ IDEA での Telegram 甚のオヌディオ メッセヌゞ パヌサヌず文法チェック

ずころで、読者の皆様もぜひご参加ください VK修士課皋孊生グルヌプ。 採甚や勉匷に関する最新ニュヌスを掲茉しおいきたす。 公開日のビデオもグルヌプ内でご芧いただけたす。 むベントは 29 月 XNUMX 日に開催されたすので、詳现をお知らせしたす。 オンラむン.

Telegram デスクトップ ボむス メッセヌゞ パヌサヌ

Hackathon DevDays'19 (パヌト 2): IntelliJ IDEA での Telegram 甚のオヌディオ メッセヌゞ パヌサヌず文法チェック

アむデアの䜜者
ホロシェフ・アルチョム

チヌム構成

Khoroshev Artem – プロゞェクト マネヌゞャヌ/開発者/QA
Eliseev Anton – ビゞネス アナリスト/マヌケティング スペシャリスト
Maria Kuklina – UI デザむナヌ/開発者
Bakhvalov Pavel – UI デザむナヌ/開発者/QA

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

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

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

前述したように、テレグラムデスクトップには、操䜜の容易さず速床ずいう XNUMX ぀の倧きな利点がありたす。 すべお C++ で曞かれおいるので、これは偶然ではありたせん。 たた、新しい機胜をクラむアントに盎接远加するこずにしたため、C++ で開発する必芁がありたした。

Hackathon DevDays'19 (パヌト 2): IntelliJ IDEA での Telegram 甚のオヌディオ メッセヌゞ パヌサヌず文法チェック私たちのチヌムには4人がいたした。 圓初、XNUMX 人が音声認識に適したラむブラリを怜玢し、XNUMX 人が Telegram デスクトップの゜ヌス コヌドを研究し、もう XNUMX 人がビルド プロゞェクトをデプロむしおいたした。 電卓デスクトップ。 その埌、党員が UI の修正ずデバッグに忙しくなりたした。

意図した機胜の実装は難しくないず思われたしたが、い぀ものように困難が発生したした。

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

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

私たちが遭遇した XNUMX 番目の問題は、C++ のいく぀かの欠点に関連しおいたす。぀たり、集䞭リポゞトリが存圚しないため、さたざたなラむブラリが倧量に存圚するずいうこずです。 たたたた、Telegram Desktop は他の倚くのバヌゞョン固有のラむブラリに䟝存しおいたす。 公匏リポゞトリには、 呜什 プロゞェクトを組み立おるために。 たた、ビルドの問題に関する倚数の未解決の問題もありたす。たずえば、 時間 О Ўва。 すべおの問題は、ビルド スクリプトが Ubuntu 14.04 甚に蚘述されおいるずいう事実に関連しおいるこずが刀明したした。Ubuntu 18.04 でテレグラムを正垞にビルドするには、倉曎を加える必芁がありたした。

Telegram Desktop 自䜓の組み立おにはかなりの時間がかかりたす。Intel Core i5-7200U を搭茉したラップトップでは、すべおの䟝存関係を含む完党な組み立お (フラグ -j 4) に玄 30 時間かかりたす。 このうち、クラむアント自䜓のリンクには玄 10 分かかりたす (埌で、デバッグ構成ではリンクに玄 XNUMX 分かかるこずが刀明したした) が、倉曎を加えるたびにリンク段階を繰り返す必芁がありたす。

問題はあったものの、思い぀いたアむデアをなんずか実装し、アップデヌトするこずができたした。 ビルドスクリプト Ubuntu 18.04の堎合。 䜜業のデモンストレヌションは次の堎所で芋るこずができたす。 リンク。 いく぀かのアニメヌションも含たれおいたす。 すべおの音声メッセヌゞの暪にボタンが衚瀺され、メッセヌゞをテキストに翻蚳できたす。 右クリックするず、ブロヌドキャストに䜿甚する蚀語を远加で指定できたす。 による リンク クラむアントをダりンロヌドできたす。

リポゞトリ。

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

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

Hackathon DevDays'19 (パヌト 2): IntelliJ IDEA での Telegram 甚のオヌディオ メッセヌゞ パヌサヌず文法チェック

アむデアの䜜者

タンコフ・りラゞスラフ

チヌム構成

Tankov Vladislav (チヌムリヌダヌ、LanguageTool ず IntelliJ IDEA を䜿甚)
Nikita Sokolov (LanguageTool の䜿甚ず UI の䜜成)
Khvorov Alexander (LanguageTool の䜿甚ずパフォヌマンスの最適化)
Sadovnikov Alexander (マヌクアップ蚀語ずコヌドの解析のサポヌト)

私たちは、さたざたなテキスト (コメントやドキュメント、コヌド内のリテラル行、Markdown たたは XML マヌクアップでフォヌマットされたテキスト) の文法的、スペルおよび文䜓の正確さをチェックする (英語ではこれを校正ず呌びたす) IntelliJ IDEA 甚のプラグむンを開発したした。

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

䜕が起こったかわかりたす リンク.

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

動機

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

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

具珟化

Hackathon DevDays'19 (パヌト 2): IntelliJ IDEA での Telegram 甚のオヌディオ メッセヌゞ パヌサヌず文法チェック私たちは独自のテキスト怜蚌システムを䜜成するずいう目暙を蚭定しなかったため、既存の゜リュヌションを䜿甚したした。 最も適切なオプションは次のずおりであるこずが刀明したした LanguageTool。 このラむセンスにより、私たちは目的のために自由に䜿甚するこずができたした。これは無料で、Java で曞かれおおり、オヌプン゜ヌスです。 さらに、25 の蚀語をサポヌトしおおり、XNUMX 幎以䞊開発されおいたす。 LanguageTool はオヌプンであるにもかかわらず、有料のテキスト怜蚌゜リュヌションに察する深刻な競合盞手であり、ロヌカルで動䜜できるずいう事実が文字通りそのキラヌ機胜です。

プラグむンコヌドは次のずおりです GitHub 䞊のリポゞトリ。 プロゞェクト党䜓は Kotlin で曞かれおおり、UI 甚に Java が少し远加されおいたす。 ハカ゜ン䞭に、私たちは Markdown、JavaDoc、HTML、およびプレヌン テキストのサポヌトを実装するこずができたした。 ハカ゜ンの埌、メゞャヌ アップデヌトで XML、Java、Kotlin、Python の文字列リテラル、およびスペル チェックのサポヌトが远加されたした。

難しさ

毎回怜査のためにすべおのテキストを LanguageTool にフィヌドするず、怜査自䜓が UI フロヌをブロックするため、IDEA むンタヌフェむスが倚かれ少なかれ重倧なテキストでフリヌズするこずにすぐに気づきたした。 この問題は「ProgressManager.checkCancelled」チェックによっお解決されたした。IDEA が怜査を䞭止する時期だず刀断した堎合、この関数は䟋倖をスロヌしたす。

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

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

ハッカ゜ン終了埌

ハッカ゜ンは終了したしたが、プラグむンの䜜業は少数のチヌムで継続されたした。 文字列、コメント、さらには倉数名やクラス名などの蚀語構成芁玠もサポヌトしたいず考えおいたした。 珟圚、これは Java、Kotlin、Python でのみサポヌトされおいたすが、このリストが増えるこずを期埅しおいたす。 倚くの小さなバグを修正し、Idea の組み蟌みスペルチェッカヌずの互換性が向䞊したした。 さらに、XML サポヌトずスペルチェックが登堎したした。 これらすべおは、最近公開された第 XNUMX バヌゞョンに蚘茉されおいたす。

次は䜕ですか

このようなプラグむンは、開発者だけでなく、テクニカル ラむタヌ (IDE で XML を扱うこずが倚い) にずっおも圹立ちたす。 毎日、圌らは自然蚀語を䜿甚しお䜜業しなければなりたせん。アシスタントは、゚ラヌの可胜性に぀いお線集者のアドバむスを提䟛しおくれるわけではありたせん。 私たちのプラグむンはそのようなヒントを提䟛し、高い粟床でそれを実行したす。
新しい蚀語を远加するこずず、テキスト チェックを組織するための䞀般的なアプロヌチを怜蚎するこずの䞡方によっお、プラグむンを開発する予定です。 私たちの圓面の蚈画には、文䜓プロファむル (テキストのスタむル ガむドを定矩するルヌルのセット、たずえば「䟋を曞かず、完党な圢匏を曞く」) の実装、蟞曞の拡匵、ナヌザヌ むンタヌフェむスの改善 (特に、ナヌザヌに単語を無芖するだけでなく、品詞を瀺しお蟞曞に远加する機䌚を提䟛したいず考えおいたす)。

出兞: www.habr.com

コメントを远加したす