C#でWPF向けのSpellCheckerを自作した話
デモ版を徹夜して追加(25/7/02)
いいね、いいね解除、チャンネル登録、ダサいUI呼ばわりが励みになります。
実は有料化を検討中のため、ソースコードは載せられませんが概要だけ説明します。
※同じ内容のモノをZenに載せる予定
開発動機
どうしてもffmpegのスペルチェッカーが欲しかった。ただそれだけ。
(※あまりにもそっけないので追記。)
Visual Studioのスペルチェック機能を模したSpellCheckerを作りたくて色々調べました。
古いものか、かなり高額なコンポーネントとして販売されているだけのものが現状であり、WPFのC1SpellChecker
などはもはや古い環境では動きませんでした。
このため、ニッチな需要が見込めるのではないかと考えました。
あと自作の動画変換アプリにスペルチェック機能を搭載させて自慢したかった。
外観と動作
エラー箇所に赤い波線を引きます。
DLLをLoadさせることにより、TextBox、ComboBoxの2種類のコントロールでSpellCheck機能を動作させる事ができます。
↓自作の動画変換アプリに読み込ませた例(ComboBox)
↓TextBoxでの動作実演
↓執筆時撮影
表示領域のみに赤い波線を引きます。
スペースは全角、半角区切り問わず、どんな文字(2バイト文字)を入れても動作する(はず)です。
デモ版を徹夜して作成(眠い)
起動してから5分間だけ試用可能なデモ版を用意しました。お試しください。
(HintPath指定が誤っていたのを修正 25/7/02)
DLLロード・実装例のサンプル。
どちらも常にSinWave描画を行わせることも可能です(どうやるか考えてみよう)。
gsudo //管理者権限 インストール推奨
git clone https://github.com/Sheephuman/MakizunoUI.SpellCheckerDemo.git
よろしければリポジトリにもスターをお願いします!
後でバイナリを単体で上げます。
辞書
DLLと同じディレクトリにrules.Json
を置きます。これがチェックしたい正規のコマンド(辞書)となります。
開発中のSinpleSample.dllとrules.json。
{
"profile1": {
"input": "inputfile.mp4",
"output": "output.mp4",
"options": [
"-codec:v",
"libx265",
"-vf",
"yadif=0:-1:1",
"-pix_fmt",
"yuv420p",
"-acodec",
"aac",
"-threads",
"2",
"-r 60"
]
},
"profile2": {
"input": "inputfile.mp4",
"output": "output.gif",
"options": [
"-filter_complex",
"[0:v] fps=10,scale=320:-1:flags=lanczos,palettegen=stats_mode=diff [p];[0:v][p] paletteuse"
]
}
}
まだ数値入力に対応できないため、ffmpeg用のParserを自作予定です(既存のCommandLineParserだと比較的単純なモノしか解析出来ない ※1)
Mono.Options
を拡張しようかなとも思ってるけど悩み中。
このような形式にすることにより、User(開発者)が手軽に自作の辞書を定義出来ます※2。
$\color{Gray}{\tiny \textsf{
※2文章のエラーチェックには向いていません。コマンドだけ}}$
仕組み
有料化を検討しているため、Note辺りに載せます。
現状ではコントロールにForcusがある場合にCheckerが作動するようになっています。
本当にザックリ解説
rules.jsonを読み込んで正規のコマンドとして登録されたものをParse(文字化)します。
→ 値を取り出す作業。
Error候補となる文字列をTextBox(ComboBox内含む)から取得し、正規の文字列と比較
値クラスを作って、正規・エラー候補ともに読み込ませてインデックスする。正規コマンドとエラーコマンドの値の総数は違うので、その分だけダミーデータ追加しとく。
あとは本当に流出しかねないんで勘弁してください。はは。
まあAI時代だから無理なのかもしれない。
開発について
実のところ、設計部分はAIが吐き出したのですが、大部分の調整や改行への対応などは自分でやりました。本当は基礎部分も自分で組むべきだったなと。何かに負けた気がしている。
実際、そこまで難しいアルゴリズムではないのですよね。分かってしまえばなんということはないというか。
今後の課題(Issue)
・あまりに長いテキストだと重くなる(改善予定)
・DLLの読み込み制限、メール認証等、やることが山ほどあるのに全然進まない
・今は数値入力の変化に対応するためParserの開発を検討中
あとがき
本当はC#でWPF向けのSpellCheckerを自作して収益化までこぎつけた話
にしたかった件。時間がなくて終わらねえ。
ちなみにこの巻き角SpellChecker(仮称) は1000Yen前後の販売を検討しています※3。無料で公開すればこのような手間は要らないのだが。
Discussion