スペルチェッカ(日: 綴り検査プログラム、英: spell checker)は、コンピュータ上で書かれた文書に対して、各単語が正しく綴られているかを検証するソフトウェアである。基本的には表音文字を用いる言語に対して使われる。多くのスペルチェッカは、綴りの間違いを検出するだけでなく、綴りの訂正候補を利用者に提示する機能も持っている。スペルチェッカは、ワードプロセッサ・電子メールクライアント・電子辞書・検索エンジンといった大きな応用プログラムにおいて機能の1つとして組込まれていることもあれば、単独の応用プログラムとして提供されているものもある。

## 動作

スペルチェッカは、文書中に存在する各単語を、自身に内蔵された辞書(語彙とも)と比較することにより動作する。単語が辞書の内に見つからなければ利用者に誤りの可能性を指摘する。

誤りの可能性を指摘するだけでなく、多くのスペルチェッカでは、正しい綴りの候補を検索・提示するためのアルゴリズムも動作する。単純なアルゴリズムでは、綴りが似ている単語(技術的に言えば編集距離が小さい単語)を辞書から探し出して利用者に提示する。

スペルチェッカは、利用者からの要求に応じて文書や電子メールの全体を一括で検証することもできるし、ワードプロセッサやテキストエディタの中には、文章の入力に応じてスペルチェッカが自動で動作して誤りの可能性を知らせるものもある(後者の場合は、利用者の作業を妨げないように、単語に下線を引くなどの方法で知らせるものが多い)。

多くのスペルチェッカは多言語環境で動作可能である。利用者がスペルチェッカに内蔵された語彙に無い単語を入力することはよくある。例えば、固有名詞(特に人名・企業名など)や頭字語のようなものである。この問題を解決するために、多くのスペルチェッカでは利用者が独自の単語を辞書に追加できるようにしている。

## 設計

スペルチェッカは大きく分けて以下の処理で構成されている。

1. 文書から単語を抽出する処理
2. 文書から見つかった単語を、正しい綴りの辞書と照しあわせる処理
3. 正しい綴りの候補を検索する処理

単語を抽出する処理は、形態論を扱うため、言語に依存したアルゴリズムを含んでいる。英語のように語形変化の小さい言語でさえ、単語の抽出処理は複数形や所有の表現のような現象を取り扱う必要がある。ドイツ語・ハンガリー語・フィンランド語のように単語が連結される言語(総合的言語)では、形態素解析が役に立つ。

辞書は、単純な単語の羅列である場合もあれば、ハイフネーションの位置や語彙的・文法的属性などの付加的な情報を含んでいる場合もある。

これらの構成要素の付属物として、利用者にプログラムの操作で置き換えや修正を指示するための、利用者インターフェースがある。

上記の方式に対する一つの例外は、全文検索にも用いられるアルゴリズムである N-gram のような統計情報だけを単に利用するスペルチェッカだが、一般には使われていない。スペルチェッカは、場合によって固定された誤綴りのリストと、誤りに対する修正語を使用する。この柔軟でない方式は、紙の訂正方法としてはしばしば使われる。

## 歴史

最初期のスペルチェッカは、1970年代の汎用コンピュータで広く利用できた。パソコン向けの最初のスペルチェッカは1980年に CP/M 向けで利用できるようになり、1981年に発表された IBM PC 向けのパッケージが続いた。Maria Mariani、Soft-Art、Microlytics、Proximity、Circle Noetics、Reference Software のような開発会社が、主要な PC だけでなく Macintosh、VAX、UNIX 向けに、OEM パッケージやエンドユーザ向け製品を発売し、ソフトウェア市場を拡大した。PC では、これらのスペルチェッカは独立のプログラムであるが、多くは十分な主記憶容量のある PC では、ワープロパッケージの中から常駐プログラムとして動作することができた。

しかし、1980年代の中頃に WordStar や WordPerfect のような人気のあるワープロパッケージがスペルチェッカを取り込んだため、独立のパッケージは短命であった。ほとんどは前記の会社から許諾書を受けたものであり、英語から他のヨーロッパ言語、アジアの言語へと急速にサポート範囲を広げた。しかし、ハンガリー語やフィンランド語のように、語形変化の激しい言語に関しては、ソフトウェアの形態学的処理をより洗練することが要求された。アイスランドのような国のワープロ市場の大きさは、スペルチェッカを実装するための投資に見合わないにもかかわらず、 WordPerfect のような会社は世界的マーケティング戦略の一部として、可能な限りの地域化に努めた。

近年では、スペルチェッカの機能はワープロから Firefox 2.0 のようなウェブブラウザに移った。Wikiテキストの編集時や、数多くの Webメール、ブログ、ソーシャル・ネットワーキング・サービスで文書を書く時には、ユーザが書いたコンテンツに対するスペルチェックを行うことができる。ウェブブラウザの Google Chrome、Konqueror、Opera、電子メールクライアントの KMail、インスタントメッセージクライアントの Pidgin もまた、現在は en:Hunspell(以前は GNU Aspell であったが)の機能を透過的に使用することによりスペルチェックの機能を持っている。Mac OS X では、システム全体でスペルチェックができるようになり、事実上バンドルされたアプリケーションやサードパーティ製アプリケーションすべてにサービスが拡張された。

## 機能

最初のスペルチェッカは、「修正」ではなく「検証」だけを行った――すなわち誤った綴りに対して推奨語を提供しなかった。これは誤植に対しては役に立つが、論理的誤りや発音上の誤りにはあまり役に立たない。誤って綴られた単語に対して役に立つ推奨語を提案することの困難に対して、開発者は挑戦した。これは、単語を骨格の形式に変形し、パターンマッチング算法を適用することを必要とする。

最初の MS-DOS のスペルチェッカは、ワープロパッケージの検証モードで主に使用された。文書を準備が出来上がった後で、利用者は文書を走査して誤った綴りを探した。しかし、後にパッチ処理は短命なオラクルの CoAuthor のようなパッケージの中で提供された。これにより、ユーザが文書を処理し、間違っていると知っている単語だけを修正した結果を見ることができた。記憶容量と処理能力が豊富になり、Sector Software が1987年に製作した Spellbound や Word 95 以降の Microsoft Word のように、スペルチェックはバックグラウンドで対話的に処理されるようになった。

近年、スペルチェッカはより洗練された。いくつかのスペルチェッカは簡単な文法の誤りを認識することができる。しかし、一番優れたものでも、(同音異義語の誤りのような)表現上の誤りをめったに捕らえることはなく、新語や外来語に誤綴印をつける。

## 他の言語でのスペルチェッカ

英語は、いくつかの専門用語と修飾語を除いて、公式な文書で使用される大部分の単語が通常の辞書に見つけることのできる点で、例外的な言語である。しかし多くの言語では、頻繁に単語を新しい方で組み合わせることが典型的である。ドイツ語では、しばしば複合名詞が既存の名詞から作り出される。いくつかの書法では、単語と別の単語を明確に区切らないので、単語を分割するアルゴリズムが必要となる。

## 文脈依存のスペルチェッカ

単語は、それ自身が周囲の単語の文脈に基づいた語彙に関わっているにもかかわらず、近年の研究は、綴りの誤った単語を認識する能力があるアルゴリズムを開発することに注力していた。これは単語の誤りを捕らえるだけでなく、より多くの単語を認識させる辞書の拡大の有害な影響を軽減する。このような機構で捕らえられる最も一般的な誤りの例は、以下の分の太字の単語のような同音異字である。

現在までに最も成功したアルゴリズムは、 Andrew Golding と Dan Roth が 1999年 に発表した "winnow-based  spelling correction algorithm" であり、普通の単語でない誤りに加えて、文脈依存の綴りの誤りの 96% を認識することができる。