2009-03-31 2 views
0

На моем сайте много динамической статистики с именами людей, мест и тем, у которых есть свои собственные связанные страницы. Я хочу автоматически связать каждую из них со своей страницей на основе данных, которые я установил в базе данных MySQL «слова» и «ссылки».Автоматически связывать ключевые слова в текстах страниц из списка слов

Что было бы эффективным способом автоматического связывания 20-50 случаев потенциально 15-20 000 ключевых слов и ссылок? Я использую MySQL и PHP.

Here's a similar query for C++

ответ

1

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

С помощью wiki вы хотите только выполнять поиск ссылок, когда страница изменена (или представлена ​​в первую очередь). Обратите внимание, что есть два разных способа обработки ссылок. Во-первых, когда страница создается или редактируется, вам нужно искать текст этой страницы, чтобы определить, какие ссылки должны быть в ней. Во-вторых, всякий раз, когда любая страница создается, переименовывается или удаляется, вам необходимо (в дополнение к поиску этой страницы в случае создания) искать все остальные страницы для добавления/обновления/удаления ссылок по мере необходимости. Существует несколько вариантов сохранения этих ссылок.

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

Например, если ваша разметка wiki для полужирного шрифта **, то «версия разметки» имеет **bold text**, а «версия дисплея» имеет <strong>bold text</strong>. Это делает так, что вам не нужно обрабатывать разметку на каждом просмотре страницы.

Этот подход применяется к ссылкам на страницы, проводя поиск по представленному тексту, чтобы найти слова, которые должны быть связаны, и поместить эти ссылки в «отображаемую версию». Например, когда страница будет отправлена, вы пройдете каждое слово в тексте страницы и сравните ее со списком слов «link» (убедитесь, что этот список кэширован, вы не хотите выполнять запрос базы данных для каждого слова). Это можно сделать достаточно эффективным, сохранив потенциальные ссылки в виде ключей в хэш. Если тестируемое слово находится в списке «link word», вы помещаете ссылку на соответствующую страницу вокруг слова при копировании в текст «версия дисплея». Если это не так, вы просто введете слово, точно так же, как в «разметной версии».

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

+0

Звучит как хороший вариант, я заинтересован в других, которые у вас могут быть. Если у меня есть csv ключевых слов/ссылок, как это можно сделать в «хэш»? Моя главная проблема заключалась не в изменении исходных данных, а в создании альтернативных версий. –

0

PHP wrapper для Snowball возможно?

+0

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