4

私は Web ベースの WYSIWYG エディターのスペル チェック機能の実装に取り​​組んでいます。現在、Damerau-Levenshtein 距離アルゴリズムを使用して、スペル候補のリストを作成しています。これはすべてうまく機能していますが、機能をどのように改善できるかについて興味があります。

具体的には、私の実装は現在、結合された単語を処理しません。たとえば、「areyou」を検出して、代わりに「are you」を提案できるようにしたいと考えています。これは、潜在的に結合されている可能性のある単語を見た目のセグメントで分割し、両方の半分をテストすることで実現できると思います。すべての英語の単語には少なくとも 1 つの母音がなければならないので、単語をどこで分割するかを決めるのに役立つ母音を探すことができると思います。

Damerau-Levenshtein 距離アルゴリズムはとても役に立ちました。他の人が私よりも多くのことを考えていることは明らかです。結合された単語を検出するために考慮すべき同様に賢いアルゴリズムはありますか、それともすでに正しい方向に進んでいますか?

4

3 に答える 3

3

結合された単語の候補は、40 文字ほどの長さになることはないと思います。ほとんどの場合、10 未満になります。

サイズが小さいことを考えると、この疑似コードはどうでしょうか。

if (is_spelled_wrong(word)):
    N = len(ワード)
    list_suggestions = []
    i = 1 から N-1 の場合:
        wordA = word[0:i] // Python の「スライス」表記
        wordB = 単語[i+1:N]
        if (!is_spelled_wrong(wordA) && !is_spelled_wrong(wordB))
            list_suggestions.appened((wordA, wordB))

つまり、すべての可能性について文字列をスキャンするだけです。それらの数は少ないです。「areyou」の場合は、5 回ループします。

于 2009-11-18T19:16:43.553 に答える
1

スペル チェックの作成に関するこの優れた記事をご覧ください。この手法を使用すると、次の 2 つのオプションがあります。すべての単語のペア、または可能性のあるすべての単語のペアを辞書に含めるか (分離された単語を解決策として)、すべての可能な分割点を試して、標準的な辞書検索を実行して、どちらの言葉も有効です。

于 2009-11-18T21:58:33.773 に答える
1

すべての単語について既に辞書全体を読んでいるので、共通の単語のペアを辞書に追加することはそれほど効率的ではありません。または、入力 (場合によっては結合された単語) をあらゆる方法で 2 つの単語に分割し、辞書でそれぞれの近くにある単語を探すことができます。思ったほど遅くはありません。単語の DL 中間結果を使用して、そのプレフィックスの結果を取得できます。

于 2009-11-18T20:30:03.547 に答える