Ruby

スペルチェッカーを作ってみた

作ったもの

コメント部分の英単語のスペルチェッカー

背景

OSSなどに貢献したいなという思いから、kaminariやRubyのソースコードを読んでいたんですが、過去のcommitを見ているとスペルミスなどが多々ありました。ちょうどRubyの勉強中でもあったので、試しにスペルチェッカーを作ってみようと思い立ったわけです。

チェックルール

スペルチェックのルールを独自で考え実装しました。

チェック対象の単語はアルファベットのみ

もし下記の様な文字列があっても記号でsplitします。

#  B2B is Business-to-business
  • B2B => "B" , "B"
  • is => "is"
  • Business-to-business => "Business", "to" , "business"

チェック対象の単語は2文字以上

一文字のスペルミスはそうそう無いだろうという考えで、2文字以上を対象にしました。

# I'm a V.
  • "I", "m", "a" , "V"はすべて対象にはならない

大文字を2つ以上含む単語は対象としない

コメント中にはメソッド名や固有名詞などがあります。
これらは大文字を複数含んでいる事が多く、逆に英単語で複数の大文字を含むケースが思いつかなかったので、対象外としました。

# HTTPSocket is Socket.
  • "HTTPSocket" => 対象外
  • "is" => 対象
  • "Socket" => 対象

使用した辞書

スペルチェックのために利用する英単語一覧は下記を利用しました。
現在進行系や過去形なども収録されています。
dwyl/english-words

所感

スペルチェックに掛け、引っかかった単語とその数を昇順の並べると、結構スペルミスを見つけやすくなります。ユーザー名などの辞書に含まれない言葉も検出されますが、それらはある程度頻出だったりするし、同じ単語のスペルミスは少ないだろうとの想定です。

作成したスペルチェッカーでRubyのソースをチェックし、スペルミスを発見できました。修正もすぐに反映頂き感謝です!!!

構想

現状では#から始まる行のみをコメントと見なしてますが、拡張子がcなら//や/*で始まっている行を拡張子とするといった様な感じにできたらなと思っています。
また、辞書には英単語のみなので、IT用語など、もっと拡張していきたいです。
辞書情報を読み込んで配列に突っ込んでいるだけですが、トライ法で管理すればメモリ消費も減るだろうし、もっと工夫を凝らしたいです。