是否有任何算法执行任何Stemmers算法的反转。也就是说,如果有一个词干“ require ”,如何查找词干“require”的所有单词?
我们始终会找到相同字词的变体,例如要求,要求,要求,要求。所有人都有“共同要求”。如果我们能够使用一个特征来识别所有带有词干“需要”的单词,那就太棒了。
我们尝试过Stemmers的算法,它给出了这样的结果:
我们尝试了以下代码:
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));
}
}
}
答案 0 :(得分:0)
我建议使用词典。想象一下,你有一系列英文单词:
// 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);
然后你可以建立一个字典:
stem
拥有 string stem = "require";
string[] words;
if (reversed.TryGetValue(stem, out words)) {
//TODO: put relevant code here
}
您可以轻松找到原始字词:
@Component.InvokeAsync("WFActivities")