给出一个字符串列表:
strings[0] = "Mary Brown";
strings[1] = "Sally Green";
strings[2] = "Lucy Purple";
给定输入字符串:
x = "Mary Brown is a nice person";
如何确定第一个字符串是大多数匹配x
的字符串比其他字符串更好?
在我的情况下,我们不知道字符串会以答案开头。它也可能是中间词。它可以说"马克布朗是一个很好的人"而不是" Mary Brown是一个很好的人,而且#34; Mary Brown"仍然是最接近的比赛。
注意:答案不必使用正则表达式。我正在寻找一个C#答案。
答案 0 :(得分:1)
我会按空格分割搜索文本和输入,并找到匹配单词的计数。按计数降序排序,然后取文字。
var inputs = new[] { "Mary Brown", "Sally Green", "Lucy Purple" };
var searchText = "Mary Brown is a nice person";
var words = searchText.Split(' ');
var result = inputs.Select(text => new
{
MatchCount = text.Split(' ')
.Sum(input => words.Where(word => word == input).Count()),
Text = text
})
.OrderByDescending(a => a.MatchCount)
.Select(a => a.Text)
.DefaultIfEmpty()
.First();
输出:
Mary Brown
<强> PS 强>
为了获得更好的结果,可以使用this post中的字符串相似度算法替换word == input
部分。