10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デモ版を徹夜して追加(25/7/02) 

いいね、いいね解除、チャンネル登録、ダサいUI呼ばわりが励みになります。

実は有料化を検討中のため、ソースコードは載せられませんが概要だけ説明します。

※同じ内容のモノをZenに載せる予定

開発環境と動作要件

Visual Studio2022, .net 9.0, WPF
Windows10以降(Windows11)

Windows7等の古いOS向けに作ることも出来るかと思いますが、動作確認は取れません。よって非対応とします。

主な用途

よく使うコマンド(ffmpeg等)のスペルチェック(SpellCheck)。
日本語等の2バイト文字に対応できるのが強みなんですが、形態素解析などしていないのであまり意味はないです(笑) ひつじ かわいい ぐらいだったらチェックできるけど

ffmpeg等のコマンド引数の変化に対応出来るようにする予定ですが、トライアルバージョンには含めない予定です(今のところ)。

要望があったら https://x.com/sheephuman までお願いします。
メールでもいいけど

開発動機

どうしてもffmpegのスペルチェッカーが欲しかった。ただそれだけ。
(※あまりにもそっけないので追記。)
Visual Studioのスペルチェック機能を模したSpellCheckerを作りたくて色々調べました。
古いものか、かなり高額なコンポーネントとして販売されているだけのものが現状であり、WPFのC1SpellChecker(のデモ版)などはもはや最新の環境では動かなくなりました。
このため、ニッチな需要が見込めるのではないかと考えました。

あと自作の動画変換アプリにスペルチェック機能を搭載させて自慢したかった。
史上初!SpellCheck機能搭載のffmpegフロントエンドとして。

ちなみにNuget Package内で”SpellChecker”を検索すると通常のWeb検索以外で色々と出てきます。

外観と動作

エラー箇所に赤い波線を引きます。
DLLをLoadさせることにより、TextBox、ComboBoxの2種類のコントロールでSpellCheck機能を動作させる事ができます。

↓自作の動画変換アプリに読み込ませた例(ComboBox)
bandicam 2025-06-29 13-30-32-020_Harua.mp4.gif

↓TextBoxでの動作実演

↓執筆時撮影
表示領域のみに赤い波線を引きます。

スペースは全角、半角区切り問わず、どんな文字(2バイト文字)を入れても動作する(はず)です。

デモ版を徹夜して作成(眠い)

起動してから5分間だけ試用可能な デモ版を用意しました。お試しください。
→あまりにケチくさいので制限はナシにした。

(HintPath指定が誤っていたのを修正 25/7/02)
DLLロード・実装例のサンプル。
image.png

どちらも常にSinWave描画を行わせることも可能です(どうやるか考えてみよう)。

gitコマンド
gsudo //管理者権限 インストール推奨
git clone https://github.com/Sheephuman/MakizunoUI.SpellCheckerDemo.git

よろしければリポジトリにもスターをお願いします!

結局、無料で使ってもらうことにしました。
散々悩みましたが
ソースコードの閲覧権と仕組みについて詳細に解説したテキストを販売しようかと考えています。

Nuget版

というわけでNuget版を用意致しました。めんどかった
自由にご自分のProjectに組み込んで頂くことが可能です
使用にあたって、MakizunoUI.MakizunoSpellCheckerを使用しています等と表記してください。

powershell
dotnet add package MK1.MakizunoSpellChecker

辞書

DLLと同じディレクトリにrules.Jsonを置きます。これがチェックしたい正規のコマンド(辞書)となります。

開発中のSinpleSample.dllとrules.json。

image.png

こんな風に指定している
{
  "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を拡張しようかなとも思ってるけど悩み中。

$\color{Gray}{\tiny \textsf{※1 検証済み。特に":"が入っているffmpeg特有のcommandは解析出来ない -Codec:vなど}}$

このような形式にすることにより、User(開発者)が手軽に自作の辞書を定義出来ます※2。

$\color{Gray}{\tiny \textsf{
※2文章のエラーチェックには向いていません。コマンドだけ}}$

仕組み

有料化を検討しているため、Note辺りに載せます。
現状ではコントロールにForcusがある場合にCheckerが作動するようになっています。

本当にザックリ解説

 rules.jsonを読み込んで正規のコマンドとして登録されたものをParse(文字化)します。  → 値を取り出す作業。

値クラスを作って、正規・エラー候補ともに読み込ませてインデックスする。正規コマンドとエラーコマンドの値の総数は違うので、その分だけダミーデータ追加しとく。

Error候補となる文字列をTextBox(ComboBox内含む)から取得し、正規の文字列と比較 → foreachで単純に一致しているかどうかを比較しているだけなのでかなり遅いです。辞書内の単語はせいぜい100程度が限界だと思われる。

開発について

実のところ、設計部分はAIが吐き出したのですが、大部分の調整や改行への対応などは自分でやりました。本当は基礎部分も自分で組むべきだったなと。何かに負けた気がしている。

実際、そこまで難しいアルゴリズムではないのですよね。分かってしまえばなんということはないというか。

今後の課題(Issue)

・あまりに長いテキストだと重くなる(改善予定)
・DLLの読み込み制限、メール認証等、やることが山ほどあるのに全然進まない
今は数値入力の変化に対応するためParserの開発を検討中
 → 対応完了したので、そのうちアップデートします。それと金が欲しいんだが。

あとがき

本当はC#でWPF向けのSpellCheckerを自作して収益化までこぎつけた話にしたかった件。時間がなくて終わらねえ。

ちなみにこの巻き角SpellChecker(仮称) は1000Yen前後の販売を検討しています※3。無料で公開すればこのような手間は要らないのだが。

$\color{Gray}{\tiny \textsf{※3 このようなSpellCheckerは現状では無料のモノはなく、有料販売でもバチは当たらないはずである。}}$

10
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?