В поисках фразы - PullRequest
       15

В поисках фразы

0 голосов
/ 17 марта 2012

У меня есть массив слов, которые взяты из предложения (каждое слово в предложении помещается в массив).

Пользователь может искать фразу, чтобы увидеть, найдена ли она в этом предложении. Это должно быть определено через значения смещения символов. Это означает, что каждое слово проверяется, чтобы увидеть, существует ли оно во фразе отдельно, затем выполняется проверка, чтобы увидеть, идут ли слова после друг друга или нет (разделенные пробелом в предложении).

Слова хранятся в дереве, и, таким образом, значения смещения (позиция символа) - это единственное, что определяет, какое слово следует за каким (и разделяется пробелом).

Моя проблема в том, что слова, которые являются одинаковыми (и уже сохранены в дереве), имеют одинаковые значения смещения, и, таким образом, каждое слово хранит структуру данных всех значений смещения, присвоенных конкретному слову. Это код, который я получил до сих пор, который отлично работает, за исключением того, что он не работает в следующем случае:

Например, у меня есть это предложение: this is a test to see if this is working.

Если я ищу «это 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 (для учета пробела), и это будет быть равным смещению первой буквы следующего слова, если оно следует.

1 Ответ

0 голосов
/ 17 марта 2012
        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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...