正在搜索短语
本文关键字:短语 搜索 | 更新日期: 2023-09-27 18:28:18
我有一个单词数组,这些单词取自一个句子(句子中的每个单词都放在一个数组中)。
用户可以搜索一个短语,看看是否在这个句子中找到了它。这将通过字符的偏移值来确定。这意味着要分别检查每个单词是否存在于短语中,然后检查这些单词是否在后面(在句子中用空格分隔)。
单词存储在树中,因此偏移值(字符位置)是唯一决定哪个单词在后面的东西(并用空格分隔)。
我的问题是,相同的单词(并且已经存储在树中)具有相同的偏移值,因此每个单词存储与特定单词相关的所有偏移值的数据结构。这是我目前为止得到的代码,除了在以下情况下失败之外,它运行得很好:
例如,我有这样一句话:this is a test to see if this is working
。
如果我搜索"this is a",则返回第一个this is
和this is a
。
这是代码:
for (int i = 0; i < offsets.Count - 1; i++)
{
LinkedList<int> current = allOffsets[i];
LinkedList<int> next = allOffsets[i + 1];
for (int j = 0; j < current.Count; j++)
{
for (int k = 0; k < next.Count; k++)
{
if (current.ElementAt(j) + words[i].Length - 1 + 2 == next.ElementAt(k))
{
if (!finalResult.Contains(current.ElementAt(j)))
{
finalResult.Add(current.ElementAt(j));
}
if (!finalResult.Contains(next.ElementAt(k)))
{
finalResult.Add(next.ElementAt(k));
}
}
}
}
}
return finalResult;
请注意,finalResult
是一个存储所有"有效"偏移量的列表,offsets
存储树中的所有偏移量。words
是一个数组,它包含从句子中分离出来的所有单词。
编辑:另外请注意,我正在通过将单词的第一个字母的偏移量加2(以说明空格)来检查单词是否相互跟随,如果紧随其后,这将等于下一个单词的第一字母的偏移。
var source = new List<string>() { "this", "is", "a", "test", "to", "see", "if", "this", "is", "working" };
var userInput = "this is a";
var inputList = userInput.Split(' ');
var inputListCount = inputList.Count();
var exists = false;
for (int i = 0; i < source.Count; i++)
{
if (inputList[0] == source[i])
{
var found = true;
for (int j = 1; j < inputListCount; j++)
{
if (inputList[j] != source[j])
{
found = false;
break;
}
}
if (found)
{
exists = true;
break;
}
}
}
Console.WriteLine(exists);