Hunspellはファイル名の静的チェックに不向きだったメモ

2024/06/27に公開

概要

  • UnityのC#プロジェクトにてファイル名のスペルチェックを試してみた
  • https://github.com/hunspell/hunspell を利用した
  • 実際のプロジェクトで適用してみて不向きだったところをメモ書きしておく

検証の内容

https://github.com/hunspell/hunspell はフリーの構文解析、スペルチェックツール。

以前導入メモを書いているので詳しくはそちらを参照ください。https://zenn.dev/masaki_mori72/articles/3b9f55b9c6b5ec

今回は公式の英語辞書に加えてユーザ辞書を整備していく形で全ファイルのスペルチェックを走らせてみた。

ファイル内にはC#ファイルだけでなく、ディレクトリやアセット(画像、音声、UnityAsset含む)すべてを対象に入れた。

検証時の工夫

パスカルケース・キャメルケースのファイル名はスネークケースに変換

プロジェクトのファイル名はパスカルケース固定になっていたため、スネークケースに変換した。これはHunspellの制限である。Hunspellはもともと英文解析にために作られているものなので区切り文字が必要であるため今回はスネークケースに変換するようにした。

パスカルケースをスネークケースに変換する処理(以後「ファイル名パース処理」と呼ぶ)は自前で実装が必要だった。コードは省略するが正規表現を使って大文字や特殊文字を検証して、アンダースコアを挿入していくような処理を書いた。

また外部ツールには空白や記号が含まれているファイル名もあり、そういったものは削除した。

SettingProvider -> Setting_Provider
FastAESConverter -> Fast_AES_Converter
Google Play (Core) -> Google_Play_Core

大文字小文字は区別しない

パース後に大文字小文字を区別しないようにするため -i オプションを付与して実行する。そうしないと固有名詞を辞書登録する際に大文字小文字バリエーションで追加する必要があるようである。辞書登録ケースを減らすために区別なしで解析するようにした。

hunspell -i UTF-8 -l YourFileToCheck.txt

不向きだった理由: 多すぎるイレギュラーケース

固有名詞

もともとの英語の辞書にはエンジニア系の固有名詞が乏しく、また固有名詞が多すぎるため辞書作成が難航することが判明した。

例. iOS -> これがファイル名に入っているとパース時点でルール違反になるため、特殊処理が必要。
例. SRDebugger → こうした固有名詞が含まれているライブラリが大量にあるため逐一適用してあげる必要がある。

それ以外のイレギュラーケース

テクスチャ系のアセットファイルで発生した

例. 128x128_Thumbnail.png -> パース、解析ともに独自ルールを入れてあげないとうまくいかない。

まとめ

  • Hunspellを使ってファイル名を解析してみた
  • 固有名詞やイレギュラーケース登録がとにかく多く、整備するのに時間がかかる
  • ファイル名のスペルミスにそこまでメリットがあるか?という部分で断念した

Discussion