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]);
        }
    }
}