スペルチェッカ

スペルチェッカ (英: spell checker) は、コンピュータ上で書かれた文書に対して、各単語が正しく綴られているかを検証するソフトウェアである。基本的には表音文字を用いる言語に対して使われる。多くのスペルチェッカは、綴りの間違いを検出するだけでなく、綴りの訂正候補をユーザに提示する機能も持っている。スペルチェッカは、ワードプロセッサ・電子メールクライアント・電子辞書・検索エンジンといった大きなアプリケーションにおいて機能の1つとして組込まれていることもあれば、単独のアプリケーションとして提供されているものもある。 スペルチェッカは、文書中に存在する各単語を、自身に内蔵された辞書（語彙とも）と比較することにより動作する。単語が辞書の内に見つからなければユーザに誤りの可能性を指摘する。 誤りの可能性を指摘するだけでなく、多くのスペルチェッカでは、正しい綴りの候補を検索・提示するためのアルゴリズムも動作する。単純なアルゴリズムでは、綴りが似ている単語（技術的に言えば編集距離が小さい単語）を辞書から探し出してユーザに提示する。 スペルチェッカは、ユーザからの要求に応じて文書や電子メールの全体を一括で検証することもできるし、ワードプロセッサやテキストエディタの中には、文章の入力に応じてスペルチェッカが自動で動作して誤りの可能性を知らせるものもある（後者の場合は、ユーザの作業を妨げないように、単語に波線を引くなどの方法で知らせるものが多い）。 多くのスペルチェッカは多言語環境で動作可能である。ユーザがスペルチェッカに内蔵された語彙に無い単語を入力することはよくある。例えば、固有名詞（特に人名・企業名など）や頭字語のようなものである。この問題を解決するために、多くのスペルチェッカではユーザが独自の単語を辞書に追加できるようにしている。 スペルチェッカは大きく分けて以下の処理で構成されている。 文書から単語を抽出する処理 文書から見つかった単語を、正しい綴りの辞書と照しあわせる処理 正しい綴りの候補を検索する処理 単語を抽出する処理は、形態論を扱うため、言語に依存したアルゴリズムを含んでいる。英語のように語形変化の小さい言語でさえ、単語の抽出処理は複数形や所有の表現のような現象を取り扱う必要がある。ドイツ語・ハンガリー語・フィンランド語のように単語が連結される言語（総合的言語）では、形態素解析が役に立つ。 辞書は、単純な単語のリストである場合もあれば、ハイフネーションの位置や語彙的・文法的属性などの付加的な情報を含んでいる場合もある。 これらの構成要素の付属物として、ユーザにプログラムの操作で置き換えや修正を指示するための、ユーザインタフェイスがある。 上記の方式に対する一つの例外は、全文検索にも用いられるアルゴリズムである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 のようなウェブブラウザに移った。数多くの Webメール、ブログ、ソーシャル・ネットワーキング・サービスで文書を書く時には、ユーザが書いたコンテンツに対するスペルチェックを行うことができる。ウェブブラウザの Konqueror と Opera、電子メールクライアントの KMail、インスタントメッセージクライアントの Pidgin もまた、GNU Aspell の機能を透過的に使用することによりスペルチェックの機能を持っている。 最初のスペルチェッカは、「修正」ではなく「検証」だけを行った。それは誤った綴りに対して、推奨語を提供しないものである。これは誤植に対しては役に立つが、論理的誤りや発音上の誤りにはあまり役に立たない。誤って綴られた単語に対して役に立つ推奨語を提案することの困難に対して、開発者は挑戦した。これは、単語を骨格の形式に変形し、パターンマッチングアルゴリズムを適用することを必要とする。 正しい単語が誤ってマークされる事がなくなるので、スペルチェックの辞書に関して「大きいことはよいこと」 は論理的に思われるかも知れない。しかし、実際には英語に関しての最適な辞書のサイズは 90,000 語程度と見られる。これより大きい辞書の場合、誤って綴られた単語が他の単語と誤って見逃されるかもしれない。例えば、言語学者はコーパス言語学に基づいて、単語 "baht" （バーツ）が、タイ王国の通貨単位への言及よりも、"bath" や "bat" の誤った綴りであることのほうが多いと断定するかもしれない。したがって、"bath" について議論する多くの人の綴りの誤りを見逃すよりも、タイ王国の通貨単位についての記述をするわずかな人に不便をかけるほうが、一般的には役に立つ。 最初の MS-DOS のスペルチェッカは、ワープロパッケージの検証モードで主に使用された。文書を準備が出来上がった後で、ユーザは文書をスキャンして誤った綴りを探した。しかし、後にパッチ処理は短命なオラクルの CoAuthor のようなパッケージの中で提供された。これにより、ユーザが文書を処理し、間違っていると知っている単語だけを修正した結果を見ることができた。記憶容量と処理能力が豊富になり、Sector Software が1987年に製作した Spellbound や Word 95 以降の Microsoft Word のように、スペルチェックはバックグラウンドで対話的に処理されるようになった。 近年、スペルチェッカはより洗練された。いくつかのスペルチェッカは簡単な文法の誤りを認識することができる。しかし、一番優れたものでも、（同音異義語の誤りのような）表現上の誤りをめったに捕らえることはなく、新語や外来語に誤った綴りの印をつける。 英語は、いくつかの専門用語と修飾語を除いて、公式な文書で使用される大部分の単語が通常の辞書に見つけることのできる点で、例外的な言語である。しかし多くの言語では、頻繁に単語を新しい方で組み合わせることが典型的である。ドイツ語では、しばしば複合名詞が既存の名詞から作り出される。いくつかの書法では、単語と別の単語を明確に区切らないので、単語を分割するアルゴリズムが必要となる。 単語は、それ自身が周囲の単語の文脈に基づいた語彙に関わっているにもかかわらず、近年の研究は、綴りの誤った単語を認識する能力があるアルゴリズムを開発することに注力していた。これは単語の誤りを捕らえるだけでなく、より多くの単語を認識させる辞書の拡大の有害な影響を軽減する。このようなシステムで捕らえられる最も一般的な誤りの例は、以下の分の太字の単語のような同音異字である。 Their coming too sea if its reel. 現在までに最も成功したアルゴリズムは、 Andrew Golding と Dan Roth が 1999年 に発表した "winnow-based spelling correction algorithm" であり、普通の単語でない誤りに加えて、文脈依存の綴りの誤りの 96% を認識することができる。 ^ Andrew R. Golding and Dan Roth and J. Mooney and Claire Cardie (1999年). “A winnow-based approach to context-sensitive spelling correction”. Machine Learning: 107-130. http://citeseer.ist.psu.edu/116990.html 2008年11月28日閲覧。.  k近傍法 en:Record linkage problem en:Spelling suggestion 文法チェッカ Computer Programs for Detecting and Correcting Spelling Errors