сопоставление общих строк между двумя наборами данных - PullRequest
2 голосов
/ 19 августа 2011

Я работаю над конверсией сайта. У меня есть дамп базы данных в виде файла sql. У меня также есть царапина на сайте от wget.

То, что я хочу сделать, это сопоставить таблицы и столбцы базы данных с каталогами, страницами и разделами страниц в цикле. Я хотел бы автоматизировать это.

Есть ли какой-нибудь инструмент или скрипт, который мог бы извлекать строки из одного источника и искать их в другом? В идеале, он будет возвращать набор результатов, который будет выглядеть примерно так:

string "piece of website content here" on line 453 in table.sql matches string in website.com/subdirectory/certain_page.asp on line 56.

Я не хочу делать сравнения строк, потому что строки из дампа базы данных (INSERT INTO table VALUES (...)) не будут совпадать со строками на странице, где они фактически заполняются (<div id='left_column'><div id='left_content'>...</div></div>).

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

Я нашел похожие вопросы, но у меня недостаточно знаний по CS, чтобы узнать, идентичны ли они моей проблеме или нет. НАСТОЛЬКО любезно предложил этот вопрос , но, похоже, он имеет дело с известным набором игл для сравнения со стогом сена. В моем случае мне нужно сравнить стог сена с стогом сена и увидеть соответствующие соломинки сена.

Есть ли сценарий командной строки или команда, или это то, что мне нужно создать? Если я его построю, должен ли я использовать алгоритм Ахо-Корасика, как предложено в другом вопросе?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Итак, ваши два вопроса: 1) Есть ли уже решение, которое будет делать то, что вы хотите, и 2) Если вы используете алгоритм Aho-Corasick.

Первый ответ: я сомневаюсь, что вынайти готовый инструмент, который будет соответствовать вашим потребностям.Второй ответ заключается в том, что, поскольку вы не заботитесь о производительности и имеете ограниченный опыт работы с CS, вам следует использовать любой алгоритм, который вы считаете наиболее простым для реализации.

Я сделаю еще один шаг и предложу архитектуру.

Во-первых, у вас должна быть возможность анализировать файлы .sql осмысленным образом, проходя построчно и возвращая имя таблицы, имя столбца и значение.Для этого, вероятно, лучше всего подойдет StreamReader.

Во-вторых, вам нужен анализатор для ваших веб-страниц, который будет поэлементно переходить по элементам и возвращать каждый текстовый узел и имя каждого родительского элемента вплоть до HTML.элемент и его родительское имя файла.XmlTextReader или подобный анализатор потокового XML, такой как SAXON, вероятно, лучше всего подходит, если он будет работать с недопустимым XML.

Вам необходимо связать эти два синтаксических анализатора вместе с каким-то алгоритмом взаимного поиска,Вам придется настроить его в соответствии с вашими потребностями.Aho-Corasick, очевидно, даст вам лучшую производительность, если вы сможете справиться с этим.Наивный алгоритм прост в реализации, и вот как это делается:

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

0 голосов
/ 19 августа 2011

Это не может работать, по крайней мере, не надежно.Наилучший случай: вы бы поместили каждый фрагмент данных в его HTML-файлы, но у вас было бы много ложных срабатываний.Например, имена пользователей, которые являются реальными словами и т. Д.

Кроме того, текст часто манипулируется перед его отображением.Сайты часто используют заглавные буквы или сокращенные тексты для предварительного просмотра и т. Д.

AFAIK такого инструмента нет, и, по моему мнению, не может быть такого, который бы адекватно решал вашу проблему.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...