C# 查找包含在其他句子中的句子
给定两个句子列表,如何找到一个句子中的所有单词都包含在另一个句子中的句子对 例如:C# 查找包含在其他句子中的句子,c#,C#,给定两个句子列表,如何找到一个句子中的所有单词都包含在另一个句子中的句子对 例如: List1: {"free bar", "hello world", "foo"} List2: {"hello there world", "foobar", "bar"} 输出应该告诉我List1的“hello world”包含在List2的“hello there world”中,List2的“bar”包含在List1的“free bar”中。另一方面,“foo”和“foobar”并不匹配 我尝试过使用c
List1: {"free bar", "hello world", "foo"}
List2: {"hello there world", "foobar", "bar"}
输出应该告诉我List1的“hello world”包含在List2的“hello there world”中,List2的“bar”包含在List1的“free bar”中。另一方面,“foo”和“foobar”并不匹配
我尝试过使用c#和LINQ遍历所有内容并与正则表达式匹配,但这太慢了。列表通常由至少2500个1-6个单词长的句子组成
请注意,它不必是列表。可能是散列图或其他任何东西。希望有人能给我指出正确的方向。这里有一种使用哈希集字典进行预处理的方法
list2
-总体上是O(n*m),n=列表1中的单词数,m=列表2中的句子数(不包括预处理):
var list1=newlist(){“免费酒吧”、“你好世界”、“foo”};
var list2=new List(){“hello there world”,“foobar”,“bar”};
var wordMap=newdictionary();
for(int i=0;i!wordMap.ContainsKey(word)?false:wordMap[word].Contains(i));
if(foundMatch)
{
WriteLine(“在列表2中找到匹配的句子:“+list2[i]);
}
}
}
实际上,这应该比任何字符串比较都快得多。哇,这正是我所需要的。非常感谢你,伙计!
var list1 = new List<string>() { "free bar", "hello world", "foo" };
var list2 = new List<string>() { "hello there world", "foobar", "bar" };
var wordMap = new Dictionary<string, HashSet<int>>();
for(int i = 0; i< list2.Count; i++)
{
var words = list2[i].Split(' ');
foreach(var word in words)
{
if(!wordMap.ContainsKey(word))
{
wordMap[word] = new HashSet<int>();
}
wordMap[word].Add(i);
}
}
foreach(var item in list1)
{
bool foundMatch = false;
var words = item.Split(' ');
for (int i = 0; i < list2.Count;i++ )
{
foundMatch = words.All(word => !wordMap.ContainsKey(word) ? false : wordMap[word].Contains(i));
if(foundMatch)
{
Console.WriteLine("Found matching sentence in list 2: " + list2[i]);
}
}
}