这就是问题,比如我们有这样一句话:
一次或多次
句子在空格的基础上分开。
这个想法是创建一个字典或数组或列出任何合适的,从上面包含所有单词的唯一和增加顺序,可以是关键字或关键短语。 所以我应该得到这样的东西:
one
or
more
time
one or
one or more
one or more time
more time
...etc so on
但这些不是:
time more
or time
one time
more or
etc
这是我试过的:
private void AddWordsInDictionary(string phrase, ref Dictionary<string, string> dctKeywords)
{
var keyWords = phrase.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).Where(x => x.Trim() != string.Empty).ToList();
foreach (var keyword in keyWords)
{
if(!dctKeywords.ContainsKey(keyword))
{
foreach (var key in dctKeywords)
{
dctKeywords.Add(key + " " + keyword, key + " " + keyword);
}
}
else
AddWordsInDictionary(keyword, ref dctKeywords);
}
}
但它不断返回一个空白字典,我也不知道算法是否是最优的,请帮忙。
答案 0 :(得分:2)
找到了解决方案。
private static void AddWordsInDictionary(string phrase, ref Dictionary<string, string> dctKeywords)
{
var keyWords = phrase.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).Where(x => x.Trim() != string.Empty).ToList();
Dictionary<string, string> dct = new Dictionary<string ,string>();
int id = 0;
string newPhrase = "";
foreach (var keyword in keyWords)
{
dct[id.ToString()] = keyword;
newPhrase = newPhrase + id.ToString();
id++;
}
int xx = 0;
while (xx < newPhrase.Length)
{
for (int idx = 0; idx <= newPhrase.Length; idx++)
{
if ( idx - xx > 0)
{
var item = newPhrase.Substring(xx, idx - xx).ToString();
StringBuilder sb = new StringBuilder();
foreach (var itm in item)
{
sb.Append(dct[itm.ToString()] + " ");
}
var key = sb.ToString().Trim();
dctKeywords[key] = key;
}
}
xx++;
}
}