C#学习教程:排除字符串列表中的相似性以提取差异我如何遍历列表并排除相似之处以找到书名?(这是一个例子,可以是任何有相似之处的短句。)蝇王这本书是经典之作。《杀死一只知更鸟》这本书是经典之作。《麦田里的守望者》这本书是经典之作。我遇到的问题是我不能简单地使用正则表达式或Contains()来查找句子中的标题,因为我不知道下一句话或书名是什么。我从外部资源中搜索了很多,所以我想我可以提取相似词之间的内容。名为《麦田里的守望者》的书这本书名为经典。列出句子=newList(){};列表标题=newList(){};sentences.Add("蝇王这本书是经典之作。");sentences.Add("《杀死一只知更鸟》这本书是经典之作。");句子。Add("麦田里的守望者这本书是经典之作。");foreach(Stringtitleinsentences){//在这里做什么?//addtitletotitleslist}我的想法是将列表中的所有字符串相互比较,排除字符串的相似部分,然后保留标题。但我不知道该怎么做。这是一个有趣的问题,所以我玩了一下,想出了以下(乏味的)解决方案:找到任何具有不同字符的句子的第一个索引,然后在反向句子中做同样的事情,然后只使用Substring提取句子的不同部分:ListExtractDifferences(Listsentences){varfirstDiffIndex=GetFirstDifferenceIndex(sentences);varlastDiffIndex=GetFirstDifferenceIndex(sentences.Select(s=>newstring(s.Reverse().ToArray())).ToList());returnsentences.Select(s=>s.Substring(firstDiffIndex,s.Length-lastDiffIndex-firstDiffIndex)).ToList();}intGetFirstDifferenceIndex(IListstrings){intfirstDiffIndex=int.MaxValue;for(inti=0;inew{CurrentChar=c,Index=j}).FirstOrDefault(ci=>ci.CurrentChar!=prev[ci.Index]).Index;if(firstDiffIndex我想GetFirstDifferenceIndex方法可以写成不同的方式,也许使用linq更好,但我没有足够的时间使用它。你可以在rextester上看到一个现场演示。使用LINQ的工作解决方案:Listsentences=newList(){};列表标题=newList(){};sentences.Add("蝇王这本书是经典之作。");sentences.Add("《杀死一只知更鸟》这本书是经典之作。");sentences.Add("麦田里的守望者这本书是经典之作。");sentences.Add("你好");sentences.Add("本书名为");titles=sentences.Where(sentence=>sentence.Length>"Thebooknamed".Length+"isaclassic".Length).GroupBy(sentence=>sentence.Substring(0,15),sentence=>sentence.Remove(sentence.Length-"isaclassic".Length).Substring("Thebooknamed".Length)).Where(g=>g.Key=="Thebooknamed").SelectMany(g=>g).ToList();foreach(vartitleintitles)WriteLine(title);首先,它过滤掉太短而不符合条件的句子,然后按前15个字母对结果进行分组,并使用String.Removetitle进行提取。以上就是C#学习教程:排除字符串列表中的相似性提取差异分享的全文。如果对大家有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表侵权,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
