-2

ASP.NET でスペル サジェスターを作成する必要があります... 以下は私の要件です。

ケース 1: 私の単語リストは英語リストの単語だけではなく、AACD、ESSA、BIMER などのコードも含まれます。データベースからそのような (新しい) 単語を提供する場合があります。

ケース 2: 英語以外の言語にも同様のスペリング サジェスターが必要です。ここでも、データベースから単語のリストを提供できます。

さて、同じことをどのように実装するかについての提案は大歓迎です。

さらに、ウェブサイトから次のPythonコードを見つけました。これは、最も可能性の高い提案を返すと述べています(もちろん英語で)。誰かがそれをC#に翻訳できるなら、それは本当に役に立ちます.

コレクションのインポート
    def words(text): re.findall('[az]+', text.lower()) を返す
    デフトレイン(機能):  
        モデル = collections.defaultdict(ラムダ: 1)
         機能の f の場合:  
            モデル[f] += 1
        モデルを返す
    NWORDS = train(words(file('big.txt').read()))
    アルファベット = 'abcdefghijklmnopqrstuvwxyz'
    def edits1(単語):
        s = [(word[:i], word[i:]) for i in range(len(word) + 1)]   
        deletes = [a の場合は a + b[1:]、b の場合は s の b]
        transposes = [a + b[1] + b[0] + b[2:] for a, b in s if len(b)>1]
        = [a + c + b[1:] a の場合、s の b はアルファベットの c の場合は b] に置き換えます。   
        inserts = [a の場合は a + c + b、アルファベットの c の場合は s の b]   
    return set(削除 + 転置 + 置換 + 挿入)
    def known_edits2(単語):    
        set(e2 for edits1(word) for e2 in edits1(e1) if e2 in NWORDS) を返す

    def known(words): set(NWORDS 内の w の場合、単語内の w の場合は w) を返します。
    デフ・コレクト(ワード):    
        候補 = 既知 ([単語]) または既知 (edits1(単語)) または既知の編集 2 (単語) または [単語]
        リターンマックス(候補者、キー= NWORDS.get)

ありがとう - ラジャ

4

3 に答える 3

4

別の代替手段はNHunspelです

NHunspell は、.NET Framework 用の無料のオープン ソース スペル チェッカーです。C# および Visual Basic のサンプル コードは、シソーラスを介したスペル チェック、ハイフネーション、およびシノニム ルックアップに使用できます。

using (Hunspell hunspell = new Hunspell("en_us.aff", "en_us.dic"))
{
    bool correct = hunspell.Spell("Recommendation");
    var suggestions = hunspell.Suggest("Recommendatio");
    foreach (string suggestion in suggestions)
    {
        Console.WriteLine("Suggestion is: " + suggestion );
    }
}
于 2009-11-10T14:02:08.667 に答える
2

私が取り組んでいる商用製品はNETSpell Spell Checkerを使用しています。これには、カスタム辞書と単語を追加できる辞書ツールがあります。

于 2009-11-10T13:44:18.100 に答える