2011-07-21 13 views
3

英語の辞書と照合する必要がある文字列のリストがあります。 しかし、私はリストのすべての不器用な部分をチェックし始めたくない。まず、文字列が英語の単語かどうか確認したい。単語が英語かどうかを判断するアルゴリズム?

これを行うアルゴリズム、または少なくとも単語を検証するために適用する必要があるルールを知っている人はいますか?例えば

ませ話し言葉が3つの以上の子音で始まることはできません、と3つの初期子音が単語であるされている場合は、最初のものは、「S」でなければなりません。

+5

「スルー」はどうですか?それは両方のあなたの例に違反します。おそらくカテゴリには一般的なルールを見つけることができるほど英語のバリエーションが多すぎます。 – sshannin

+1

Psst、誰にも言わないでください。そのルールは常に真実ではありません。 :) – biziclop

+1

この例は少しCRYPTicです。あなたが見ることができるように、CRYPTは、最初の「s」がなくても、5つの子音で始まります:-) –

答えて

4

データ構造内の単語を見つけることは高速です(たとえば、Bloom filter(偽陽性を覚えておいてください))、またはセットを使用すると、効率の理由からこれを行う価値はありません。

提案を提供する場合は、Peter Norvigのspell checking実装をご覧ください。

本当にやりたいのであれば、Aの頻度を既存のテキストからBにして、任意のシーケンスが英語の単語に含まれているかどうかを確認します。

+0

定数時間構造を使用するのではなく、リストをバイナリ検索するのはなぜですか? – Marcin

+0

私はちょうどその点を説明しようとしていた(恐らくひどく)。言葉を編集します。また、Bloomフィルタで偽陽性を得ることになります(これはトレードオフです)。 –

+0

ブルームフィルタは、ディクショナリがメモリに収まらない場合にも役立ちます。そのため、ディクショナリへのアクセスはフィルタへのアクセスよりもはるかに遅くなります。フィルターには誤検出がありますが、すべての陽性は遅く正確な辞書と照合できます。(1)辞書がハッシュテーブル内のメモリに収まらない。ハッシュテーブルがBloomフィルタよりもまっすぐである、(2)十分に良いと思われるテキストの英語は英語以外の言語で保存する価値がある –

0

このようなタスクは、コンピュータのためのものです。すべての単語を辞書に保存するために、ある種の構造体(おそらくブルームフィルタ)を使用し、その単語を確認してください。それは一定の時間操作です。

関連する問題