Englishingは、ローカルで動かしているPythonサーバー(spaCyなど)に英文を送り、
返ってきた構文情報をもとに、that節・関係代名詞・分詞構文などの「構文ブロック」を色分け表示する
英語解析クライアントアプリです。
文法用語の暗記ではなく、「今読んでいる文のどこがどう繋がっているか」を視覚的に掴むことを目標にしています。
参考書の「解説ページ」はわかりやすいのに、本番の英文になると急に読めなくなる。 そのギャップを埋めるために、実際に読みたい英文(論文や記事)をその場で解析して、 構文ブロックごとに色分けしてくれるクライアントを作りました。
Androidアプリ側では、ユーザーが入力した英文をローカルネットワークのPythonサーバーに送信します。 サーバー側ではspaCyなどのNLPライブラリで構文解析を行い、 「トークン」「依存関係」「句・節のスパン情報」をJSONで返却。 クライアントはそのJSONをもとに、Jetpack ComposeのText/Canvasでブロックごとにハイライトを行います。
左側がAndroidクライアント、右側がローカルPC上のPythonサーバー。 同一LAN内でHTTP(REST)またはWebSocketで接続し、英文テキストと構文解析結果をやり取りします。
クライアントとサーバーの間では、POST /analyze というシンプルなJSON APIを設計しました。
リクエストは入力英文とオプション(例:返してほしい構文の種類)だけ。
レスポンスでは、トークン列とともに、複数の「span」を返すようにしています。
spaCyは単語ごとの依存関係(nsubj, dobj, relcl, advcl など)を出してくれるので、
それをもとに「どこからどこまでがthat節か」「どこまでが分詞構文か」をスパンとして抽出します。
例えば、RELCL(関係節)を根に持つ部分木をたどって、その最小・最大インデックスをブロックとして扱う、という方針です。
Android側では、構文ブロックの種類に応じてSpanStyleを重ねています。
that節なら淡い青、関係代名詞節なら緑、分詞構文ならオレンジ、といった具合です。
ブロックをタップすると、その構文の日本語解説や自分で書いたメモをポップアップで表示できます。
Englishingは、クラウドの巨大モデルではなく、あえてローカルのPythonサーバーを前提にしています。 これによって、機密性の高い英文(論文草稿や企業資料など)も安心して解析できるほか、 自分でルールベースの構文ブロック追加やカスタム辞書を入れたりと、研究環境としての拡張性も確保しています。
大学の英語教科書やニュース記事の一部を入力し、 どの程度「一目で構造がわかるか」を自分で試しました。 that節や関係代名詞節が複数ネストしている文では、色の重なり方が重要になることがわかりました。
現在は「構文色分け」自体は動作しているものの、 spaCyの解析結果が必ずしも学習参考書の解説と一致するとは限らない、という課題があります。 また、複数文をまとめて解析する際のUI(段落単位での折りたたみなど)もまだ整っていません。
英文を入力して解析ボタンを押すと、構文ブロックが色付きで浮かび上がるまでの操作を収録したデモ動画です。
Englishingは今のところ「読む」支援が中心ですが、 将来的には、構文ブロックと単語帳・音声練習をリンクさせて、 一つのアプリの中で「読む→覚える→話す」まで回せる環境にしたいと考えています。
NLP精度・UI・学習導線の3つの軸で改善していきます。
数式やプログラムの世界に比べると、言語はどうしても「あいまい」な部分が多くて、 解析結果も「絶対にこれが正しい」とは言い切れません。 それでも、構文を一度可視化してしまうと、 自分がどこで詰まっているのかがはっきり見えるようになりました。