Compress - 自分のタイピングの1/2を自動化した
(github.com/eschluntz)- 自分の文章コーパスから自動でタイピング用ショートカットを作成し、メールやSlackで使う入力短縮を生成するツール
- テキストコーパスを解析し、タイピング時に最も多くの文字数を節約できるショートカットを提案し、Linuxのキーボード短縮プログラムであるAutokeyの設定ファイルを生成する
- コーパス内で頻出するn-gramを見つけて、より短い表現に置き換える候補を作成し、提案順位は
[節約した文字数] * [フレーズ頻度]で計算する - ショートカットの選定は覚えやすい省略を目標とし、単語として入力したい略語はブラックリストで除外し、より頻繁に使うフレーズにより覚えやすい省略を優先的に割り当てる
- Slackメッセージをコーパスとして使うためのSlack Data Export解析ツールも提供する
- Slackワークスペース管理者のみexport可能
- public channelのみexportされる
USERNAME_TO_EXPORTをSlackユーザー名に置き換えた後、parse_slack.pyを実行する必要がある- Slack exportは
srmで削除する手順を含む
- 基本的な使用フローは、
data/corpus/*.txtにコーパスを入れ、find_suggested_phrases.pyで上位200件の候補をoutput/suggested_shortcuts.yamlに作成した後、必要な項目をshortcuts.yamlへ移し、generate_autokeys.pyでAutokey設定ファイルを生成する方式 install.shで依存関係をインストールし、現在はPython3.10.12でテストされている- Autokeyは現在LinuxのX11のみをサポートしており、Waylandはサポートしていない
- 生成されるAutokey設定はChromeにフォーカスがある場合にのみ適用されるよう構成されており、terminalやvscodeでは短いLinuxコマンドや変数名と省略が衝突して問題が多かったという使用経験も含まれている
1件のコメント
Hacker Newsのコメント
プロジェクトについての動画を含むブログ記事も書いた: https://erikschluntz.com/software/2023/08/26/compressing-my-...
珍しく、投入した時間以上に実際の時間を節約してくれたサイドプロジェクトだった :)
アイデアはとても賢いが、時間とともに変わる方式なら使いたくない気がする
たとえば6か月ごとに実行して、去年は
dbがdebugだったのに今年はdatabaseになると、筋肉記憶や習慣を壊しかねないなので、さまざまな背景や文脈の何千人もの人が書いた本、メール、メッセージに対して実行したとき、誰にとっても安定して役立つ汎用版のほうに興味がある
tをtheに、stをsomethingに展開するのは当然に見えるが、200〜500個程度の最小セットを作り、誰もが習得できる「標準キーボード」にできるのか気になるhttps://archive.org/details/evansbasicenglis00evan
PDFを使うのがよく、TXTファイルはOCR品質が悪くほとんど使えない
これも有用: https://en.m.wikipedia.org/wiki/Most_common_words_in_English
suggested_shortcuts.yamlを出力し、そこからshortcuts.yamlにコピーする方式なので、実際に有効化するショートカットは手動で制御できる :)そしてやはり
the -> tがリストの一番上にある: https://jonaquino.blogspot.com/2007/06/yublin-shorthand-for-...化学者は
dropperをよく打つのでdpを望むかもしれないが、役人はdepartmentのほうを好むかもしれない中国語ネイティブでなければ知らないかもしれないが、中国語にはこうした機能が内蔵されている
公式には双拼(Shuangpin)と呼ばれ、単語ごとに英字2文字を入力して単語全体を入力する方式: https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC
Shuangpinを正式に使わなくても、ほとんどの中国語入力システムは人気のフレーズに対して似た简拼機能をサポートしており、各単語の最初の英字だけを入力して複数語のフレーズを入力できる
たとえば中国語で「thank you」を表す
xiexieを入力するには、通常xxと打つだけで、ほとんどの中国語入力システムが自動的に該当する漢字を提案するたとえば “what do you want to eat” にあたる「你想吃什麼」は
n x c s mで入力するXLBでXiao long baoと書くのもこの例なのか気になる。もっと広い体系だとは知らなかったが、いいねこういうプロジェクトを見るのは本当に楽しい
週末に似た問題に取り組んだが、自作辞書の略語ではなく単語全体を対象にし、一般的な場合には与えられたテキストコーパスに合わせて調整する方式だった
気になっていたのは「与えられたテキストコーパスに合わせて調整された自動修正器を作れるだろうか?」ということだった。たとえば文書内で
data augmentationのような長い表現をよく使う場合、それを自動化できるか見てみたかったアプローチは、一般データセットであるNYTコーパスで単一語と2-gramのサプライザルを計算し、調整対象のインデックスにある単語に重みを加えたうえで、サプライザルで重み付けしたトライデータ構造を作り、高度なオートコンプリートとして使うというものだった
動作する解法はこちら: https://github.com/capjamesg/autowrite/blob/main/autocomplet...
まだドキュメントはなく、数日以内に追加する予定で、話したければGitHub Issueを残せばよい
あるいは、同じ表現をもっと創造的に言う方法を探しているのかと、私が混同しているだけかもしれない
拡張アイデアとして、入力を監視するキーロガーを組み込むこともできる。もちろん、それ自体が欠点ではある
ユーザーがよく使うフレーズを学習し、ありふれたフレーズを見つけて短縮語を提案し、その後ユーザーがフレーズ全体を入力するたびに短縮語をさりげなく知らせる、という方式
そうすれば誰でもインストールでき、導入のハードルも低く、時間が経つにつれて徐々に生産性を上げられる
データはデバイス内の安全なストレージに保管し、セキュリティリスクにならないようにする構想だった
デスクトップでスマートフォンのような英語のオートコンプリートを提供したり、
fcitx5のような入力メソッドフレームワークで短縮語を提供したりする入力メソッドは、面白いコンセプトになりそう毎週 Slack の履歴を自動エクスポートして単語頻度を求め、見えた結果をもとに手動で展開語をいくつも設定する、という感じだろうか?
Bluetooth Keyboard -> ESP32をキーボードホストとして使い、キー入力を USB とファイルに送る構成だったお金があれば、データをディスクに保存する USB/PS2 キーボードロガーもある
そちらに収束させれば、複数のコンピュータ間での一貫性にも役立つし、複数台のコンピュータを使う場合にもよい
自分の場合、いくつかのチャット状況を除けば、タイピングがボトルネックになったことはほとんどない気がする
むしろ、映像や音声の追加帯域が役に立ったであろうやり取りがあるだけだ。こうした短縮語が実際の作業時間の節約につながるのか気になる
たとえば「スクリーンショットを上げてもらえますか?」のような会話や、Calendly リンクを送るような応答
長い文章を書くときも、思考のほうがタイピングより速い点に苛立つことが多いので、その部分にも役立つ
タイピングは思考を妨げる手作業なので、タイピングに入って戻ってくる時間を減らすほど、より早く思考に戻れる
自分で使うテキスト展開を作ろうとして、かなり多くの時間を費やした
思ったよりずっと難しく、あまり頻繁に誤作動せず、かつ十分な価値があるエイリアスを見つけるのは難しい
複数の言語で毎日やり取りしているのでさらに複雑になり、今はアプリケーションごとにエイリアスを分けている
それでも誤作動は残っていて、概ね区切り文字が必要だという結論に近づいている
kk、zz、qqのように、単語や変数名の最初の文字としては出にくい文字の組み合わせを付けているたとえば
qqmeは自分のメール署名元記事のツールが README で見たものより長いフレーズに対するエイリアスも提案してくれるとよい。macOS 用の TextExpander はそうしてくれると聞いたが、自分は Mac ユーザーではない
TODO の一つは、分析した実際のテキストコーパスを使って、避けるべきエイリアスのブロックリストも生成すること
個人的に告白すると、iPhone 以前の携帯電話で使っていたSMS式の略語が好きだったことはない
どうしても必要なとき以外、SMS やテキストメッセージをほとんど使わなかった理由の一つだった
iOS と macOS で動作する TextExpander の初期からテキスト展開を使ってきたし、iPhone のキーボードがどれだけ良くても、自宅住所、自宅/職場の地図、仕事・個人情報のような内容を繰り返し入力するのは不便だった。TextExpander は大いに役立った
その後 TextExpander がサブスクリプションモデルに移行し、代替を探し始めたが、個人的にはこうしたツールにサブスクリプションモデルは合わないと思った。Alfred の Powerpack に含まれる Snippets のほうがよい代替だった
macOS/iOS にも内蔵の「Text Replacements」があるが、Apple アプリ以外ではよく失敗する。ここにあるものは Apple の Text Replacement に似ており、自分はその機能は残しつつ、残りは Alfred で管理している。正直、Alfred から完全に離れられるようになれば、こちらへ移るかもしれない
ただし、通常のタイピングを邪魔しないよう、展開には区切り文字を使いたい。今は
,を区切り文字として使っている。英語ではカンマの後には常に空白が来るし、自分の展開は空白なしでカンマと短いテキストを打った後にだけ起こるからだ。タッチタイピング時のカンマキーの位置も使いやすいOS の Text Replacement に残るとしても、意図しない場面で単語が自動展開されるのを防ぐために区切り文字を導入すると思う
https://textexpander.com
https://www.alfredapp.com
最も細かい例外処理は
.py。通常.は区切り文字だが、pyの前では例外にして、Python ファイル名を入力するときに邪魔しないようにした長年のオートコンプリートのせいで、第二言語である英語力はすでに悪くなっている
単語は知っているのに綴りを思い出せず、発音を忘れることが増えたし、こういうツールは残っている力まで完全になくしてしまいそう
キーワードを覚える代わりに、頭文字を書けばいいのではと思う
数週間前にChatGPTで実験してみたが、こうした機能を持つ既存ソフトウェアはなさそうだった
プログラミングは得意ではないが、誰かが作ってくれるといいと思う: https://imgur.com/a/0o4zLwT
精度はかなり良いが、外したときは非常にイライラする
完璧に動作しても、実際に使ってみると普段どおりにタイピングするより認知負荷がずっと大きかった
かなり集中すれば、省略形を使いながら普段の楽なタイピング速度くらいには合わせられたが、それを超えることはできず、結局自然と通常のタイピングに戻ってしまった
ただし私はタイピングが速く、文章をたくさん書くほうなので、このプロトタイプは30年ほど強く最適化されてきた脳内プロセスに勝とうとしているようなものだ。もともと高速タイピストではない人には、もっと合うかもしれない