2017-06-14 16 views
0

Stemmersアルゴリズムの逆を実行するアルゴリズムはありますか?つまり、ステム「が必要です」を指定すると、ステム「require」ですべての単語を見つける方法はありますか?ステミングアルゴリズムを使用してC#でリバースステミングを実行するにはどうすればよいですか?

常に同じ単語のバリエーションが見つかりました。要件、要件、必要、必要。すべてが共通して「必要」を持っています。ステム "require"ですべての単語を識別する機能を組み込むことができれば素晴らしいと思います。

私たちは、このような結果与える、ステマのアルゴリズムを試してみました:

  • 例外 -
  • 除いて何も - NOTH
  • を防ぐ - 臨床
  • を防ぐ - クリニック
  • 、開示、 - 開示を
  • 収集、回収、

そして、私たちは以下のようなコードを試してみました:私は辞書を使用することをお勧め

class Program 
{ 
    static void Main(string[] args) 
    { 
     string strStemPhrase = @"generate generates generated generating generously"; 

     string result = Regex.Replace(strStemPhrase, @"[\W_]+", " "); 

     string[] strStemmedWords = result.Split(new[] { " " }, StringSplitOptions.None); 

     TestStemmer(new EnglishStemmer(), strStemmedWords); 

     Console.ReadKey(); 
     return;   
    } 

    private static void TestStemmer(IStemmer stemmer, params string[] words) 
    { 
     Console.WriteLine("Stemmer: " + stemmer); 

     foreach (string word in words) 
     { 
      Console.WriteLine(word + " --> " + stemmer.Stem(word)); 
     } 
    } 
    } 
+2

「そして、我々以下のようにコードを試してみました: "...でも?あなたの質問は何ですか?コードは機能しますか? – HimBromBeere

+0

はい、このコードは仕事です...しかし、私のクイズは "どのように茎ですべての単語を見つけるか"ですか? –

答えて

0

。あなたは簡単にオリジナルの単語を見つけることができ

stemを持つ
// key: stem 
    // value: array of the original words 
    Dictionary<string, string[]> reversed = EnglishWords 
    .GroupBy(word => Stem(word)) //TODO: put stemming here 
    .ToDictionary(chunk => chunk.Key, 
        chunk => chunk.ToArray(), 
        StringComparer.OrdinalIgnoreCase); 

:あなたは辞書を構築することができます

string[] EnglishWords = new string[] { 
    "a", 
    "abacus", 
    ... 
    "generate", 
    "generated", 
    "generates", 
    "generating", 
    "generously", 
    ... 
    "zymotic", 
    }; 

:あなたは英語の単語のコレクションを持っていることを想像し

string stem = "require"; 

    string[] words; 

    if (reversed.TryGetValue(stem, out words)) { 
    //TODO: put relevant code here 
    } 
+0

ありがとう@Dmitry Bychenkoそれは私のために働いた... :) –

関連する問題