Как понять, изменилась ли статическая часть текста? (связанный алгоритм diff) - PullRequest
2 голосов
/ 03 апреля 2009

Прежде всего, это непростая задача, пока я не привел хороший пример, но я надеюсь, что кто-то здесь поймет это. Я надеюсь, что есть известный способ решения подобных проблем или неясный алгоритм.

Сценарий:

  • В своем приложении я делаю несколько запросов на одну и ту же веб-страницу
  • Веб-страница содержит динамический и случайный контент, такой как (datetime, цитата дня и т. Д. В теории может быть любым)
  • Ответ этого приложения имеет 2 случая, назовем их «ИСТИНА» и «ЛОЖЬ». Например, иногда ответ будет возвращать «True Text», иногда это будет «False Text».
  • Моему приложению известны 3 примера случая "ИСТИНА" и 3 примера случая "ЛОЖЬ", но они также включают случайный контент, такой как "время".

Вызов

  • Теперь, когда мое приложение получит новый ответ, как я могу понять, является ли этот ответ примером "ИСТИНА" или "ЛОЖЬ"?

Что я пробовал

  • Строка за строкой обрабатывает первую выборку регистра ИСТИНА и генерирует целочисленный массив из значения символов
  • Сделайте то же самое для второго ИСТИННОГО образца
  • Сделайте то же самое для третьего ИСТИННОГО образца
  • Анализировать различия между этими сохраненными ИСТИННЫМИ случаями и создать новый массив с
  • Теперь я знаю, какие строки являются динамическими (например, datetime), теперь я создаю новый окончательный массив значений ИСТИНА, в котором хранятся только статические строки в конечном массиве значений ИСТИНА.
  • Теперь, когда я получил новый случай, я создаю аналогичный массив, затем сравниваю его с ранее сохраненным окончательным значением ИСТИНА, и если он совпадает (кроме отфильтрованных строк), это случай ИСТИНА, если другие строки массово изменены ( значение допуска ), тогда это ЛОЖЬ.

Ограничения и недостатки этого алгоритма довольно очевидны. Хотя в некоторых случаях у меня были хорошие результаты, но они не всегда работают так, как ожидалось.

Мой текущий класс работает так:

Dim Analyser AS NEW ContentAnalyzer()
Analyser.AddTrueCase(True1Html)
Analyser.AddTrueCase(True2Html)
Analyser.AddTrueCase(True3Html)

'This will return True if the UnknownHtml is similar to TRUE case, otherwise False
Analyser.IsThisTrue(UnknownHtml) 

Извините, название не имеет особого смысла, я не смог найти хороший способ описать его.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2009

Похоже, вы делаете довольно простую классификацию документов . Это область исследований, особенно в последнее время из-за спам-фильтров. Загляните в библиотеку для классификации документов на вашем языке.

Classifier4j выглядит как популярная библиотека, которая работает на Java VM и была портирована на .NET.

1 голос
/ 03 апреля 2009

Либо это действительно неверно, либо я просто ничего не понимаю:

Приложение запрашивает веб-страницу, получает ее и должно выяснить, является ли она другой "Верной" или "Ложной", верно? Это значит, что часть веб-запроса не должна возвращать истину или ложь в самом начале, где и возникает моя первая путаница.

Во-вторых, почему вы не проводите аналогичное сравнение ложных случаев и видите, достаточно ли сходств для создания 3 сегментов результатов для некоторой запрошенной случайной страницы:

1) Страница больше похожа на true и, таким образом, рассматривается как true.

2) Страница больше похожа на ложь и, таким образом, рассматривается как ложная.

3) Страница не похожа ни на одну из них, и поэтому результатом является что-то вроде нулевой ситуации или ситуации исключения, поскольку невозможно определить, какой результат имеет смысл.

Пример того, где может произойти этот третий случай: Предположим, что страница содержит целое число, и если оно положительное, результат равен true, а если отрицательный, результат равен false. Что если результат равен 0? 0 считается положительным, так как оно равно абсолютному значению или отрицательно по какой-то причине?

Или я далеко в том, что вы пытаетесь сделать здесь?

0 голосов
/ 03 апреля 2009

Возможно, вы имеете в виду что-то вроде байесовской фильтрации? Вы можете посмотреть, что Пол Грэм сделал со спамом: http://www.paulgraham.com/better.html

...