この記事は、Qiita株式会社のカレンダー | Advent Calendar 2023 - Qiitaの8日目の記事です。
textlintでtypo検出を賢くできないかを試しているので、それについて紹介します。
解決したい課題
textlintでtypoを検出できるルールの代表として以下があります。
いずれも、
abandonned->abandoned
aberation->aberration
abilityes->abilities
abilties->abilities
abilty->ability
のように正誤の辞書があり、それにマッチしなければtypoを検出することができません。
(もしかしたら、僕が見つけれていないだけで既にあるかもしれません)
また、新しいtypoが出てきた際に辞書に追加していく手間もあります。
そのため、未知のtypoがあったとしても正しい単語の辞書だけで検出したいと思いました。
やったこと
fuzzy finderのように正しい単語にある程度近い場合は、typoの恐れがあるとして検出するようにしてみました。
正しい単語と似ているかにはレーベンシュタイン距離を使い、一定の距離よりも近い場合はtypoとするようにしました。
そして、試しにつくったtextlint ruleは以下です。
現時点では、以下のように.textlintrc.json
を設定することで使えます。
{
"rules": {
"typo-detection": {
"dictionary": ["world", "word"]
}
}
}
ですが、日本語の単語より英単語のほうが1単語あたりの文字数が多いことがあるため、typoかどうかを決めるほどよい距離のしきい値を決めるのが難しいなと感じています。
また、文章を単語に区切るのにword boundaryを使っているため、複数単語をあわせたもの(例: Google Cloud
など)での検出ができないのが現状です。
最後に
もう少し改良ができそうとは思っているので、気長に改良していければと思います。
また、Pull Requestやコメント等いただけると嬉しいです!
記事を読んでいただきありがとうございます!
ぜひ、Qiita株式会社のカレンダー | Advent Calendar 2023 - Qiitaを購読設定して、明日の記事もご覧いただけると嬉しいです。