似たコマンドの候補提示はどうやっているのか?
(xo.dev)ターミナルで複数のプログラムを使っていると、コマンドを誤って入力してプログラムがエラーを表示することがよくある。ところが、Git や npm のような一部のプログラムは、入力を間違えたコマンドに似たコマンドを提案してくれたり、むしろタイプミスをその場で補正して適切に処理を続けてくれることもある。こうした機能は一体どのように動いているのだろうか? 似たコマンドを提案する機能を同じように実装しながら、その仕組みを見ていく。
- 問題を定義する
→ 似たコマンドを探すという問題は、「2つの文字列の類似度を調べる問題」に置き換えられる。
- 編集距離 (Edit distance)
→ レーベンシュタイン距離 (Levenshtein distance)
- 問題を解決する
5件のコメント
このリポジトリに触れないわけにはいきませんね。
https://github.com/nvbn/thefuck#how-it-works
一番上の例を見て、しばらく笑ってしまいました ww
間違えるのは自分だけじゃなかったんだ…
興味深い話でした。レーベンシュタイン距離……新しいことを学びましたね。
興味深く読みました。
ただ、gitが本当にこの方式で実装されているのか気になります。
統計的にユーザーの経験を収集して処理する方式も可能な気がします
git はレーベンシュタイン距離を使っています。下のリンクの git の項目を見ると、git の該当部分のソースコードが載っています。:)
https://vishnubharathi.codes/blog/levenshtein-distance/
統計的にユーザーの利用経験を活用する方式も興味深そうですが、a) git コマンドは長さが短く、b) 数が限られているので、レーベンシュタインで十分に目的のことを実現できるようです。