gpt4 book ai didi

c# - 如何从元组字符串中选择最匹配的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:09 25 4
gpt4 key购买 nike

我的程序中有这些代码行。即

var scored = lines.Select(line => 
Tuple.Create(line, p.calculate_CS(line, summary), summary));
dd.AddRange(scored);
var top_value = dd.OrderByDescending(x => x.Item2).FirstOrDefault();

我还必须将最相似的匹配项写入数据库,所以想要最相似的计算值加上最相似的单词匹配字符串。

if (top_value.Item2 > 0 && top_value != null)
{
var abstrct = top_value.Item3.ToString();
var r_field = top_value.Item1.ToString();
write_To_Database(abstrct, r_field);
}

元组具有三个变量,即字符串行(即要匹配的字符串数量为373)双相似度值字符串摘要(即单个与所有 373 个匹配的字符串)。项目 line 与项目 summary 相匹配。变量 top_valuelinesummary 字符串之间最高的相似度值。现在的问题是 summarysimilarity value 对于 line 中的某些字符串变得相同。因此 line 中的字符串按字母顺序排序。因此,如果某些字符串的最高值相同,则 top_value 将按字母顺序具有最高值,而较低的字符串可能最相似。

所以我想在 top_value 中有最相似的值加上最相似的字符串匹配,无论按字母顺序排序。

例如,如果 summary 是“Software engineering in 2001 - A case”,则匹配值是(由这些代码行给出)。

Results of scoring lines and summary matches

从附图中可以看出,要匹配的字符串包含字符串Software Engineering......... 其中我得到了engineering design最高 top_value 而它应该是 软件工程。将待匹配字符串和匹配器字符串拆分后,根据term计算相似度值。但是由于 line 中的字符串按字母顺序排序,我得到了 engineering design 而不是 software engineering任何建议都非常感谢。谢谢

最佳答案

如果匹配算法给您带来不想要的匹配,您显然需要更改匹配算法。由于您没有在此处发布您的匹配算法,我将仅使用我自己的示例来说明如何完成此操作。我对您的 calculate_CS 算法进行了逆向工程,以匹配给定输入的结果,但我猜它与您的实现不同。这只是为了说明。此外,我用来更改比赛计分的算法选择是任意的,可能无法满足您的需求。这也只是为了说明。

void Main()
{
var lines = new[] {
"engineering design",
"requirement engineering",
"reverse engineering",
"software engineering",
"access control policies",
"active learning",
"ad hock network",
"agent based reasoning"
// etc...
};

var summary = "Software engineering in 2001 - A case";

var dd = new List<Tuple<String, Double, String>>();
dd.AddRange(lines.Select(line => Tuple.Create(line, calculate_CS(line, summary), summary)));
var top_value = dd.OrderByDescending(x => x.Item2).FirstOrDefault();

var ddNew = new List<Tuple<String, Double, String>>();
ddNew.AddRange(lines.Select(line => Tuple.Create(line, calculate_Lcs(line, summary), summary)));
var top_value_new = ddNew.OrderByDescending(x => x.Item2).FirstOrDefault();

top_value.Dump();
top_value_new.Dump();
}

private double calculate_CS(string line, string summary)
{
var lineWords = line?.ToLower().Split(' ');
var summaryWords = summary?.ToLower().Split(' ');

return lineWords?.Intersect(summaryWords).Any() ?? false
? 0.110795817239161
: 0;
}

private double calculate_Lcs(string line, string summary)
{
// using https://www.nuget.org/packages/DuoVia.FuzzyStrings/
return line.LongestCommonSubsequence(summary).Item2;
}

( Download LinqPad Query )

结果:

Comparison of the results of applying different matching algorithms to the lines and summary input

关于c# - 如何从元组字符串中选择最匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31131058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com