Как поисковые системы находят релевантный контент?
как Google находит релевантный контент при его разборе в интернете?
допустим, например, Google использует библиотеку PHP native DOM для анализа контента. Какие методы были бы для него, чтобы найти наиболее релевантный контент на веб-странице?
Я думаю, что он будет искать все абзацы, упорядочивать по длине каждого абзаца, а затем из возможных строк поиска и параметров запроса вычислять процент релевантности каждого абзаца есть.
допустим, у нас был этот URL:
http://domain.tld/posts/stackoverflow-dominates-the-world-wide-web.html
теперь из этого URL-адреса я бы понял, что имя HTML-файла будет иметь высокую релевантность, поэтому я бы увидел, насколько близко эта строка сравнивается со всеми абзацами на странице!
действительно хорошим примером этого будет доля Facebook, когда Вы делитесь страницей. Facebook быстро боты по ссылке и возвращает изображения, контент и т. д., прием.
Я думал, что какой-то метод расчета будет лучше всего, чтобы выработать % релевантности в зависимости от окружающих элементов и метаданных.
есть ли какие-либо книги / информация о лучших практиках анализа контента, которые охватывают, как получить лучший контент с сайта, какие-либо алгоритмы, о которых можно говорить, или какой-либо подробный ответ?
некоторые идеи, которые я имею в виду, являются:
- найти все абзацы и порядок по длине обычного текста
- как-то найти ширину и высоту
div
контейнеры и порядок по (W+H) - @Benoit - Проверьте мета ключевые слова, название, описание и проверить релевантность в параграфах
- найти все теги изображений и порядок по величине и длине узлов вдали от основного пункта
- проверьте данные объекта, такие как видео и подсчитайте узлы из самого большого абзаца / содержимого div
- разработать сходства с предыдущих страниц разбираются
причина, почему мне нужно эта информация:
Я создаю веб-сайт, где веб-мастера отправляют нам ссылки, а затем мы перечисляем их страницы, но я хочу, чтобы веб-мастер отправил ссылку, затем я иду и просматриваю эту страницу, находя следующую информацию.
- изображение (если применимо)
- a
- ключевые слова, которые будут использоваться для нашей поисковой системы, (стиль переполнения стека)
- ключевые слова метаданных, описание, Все изображения, change-log (для целей модерации и администрирования)
надеюсь, вы можете понять, что это не для поиска, а способ, поисковые системы решать это в том же контексте, что мне нужно.
Я не спрашиваю о коммерческих секретах, я спрашиваю, каков ваш личный подход к этому.
13 ответов:
Это очень общий вопрос, но очень хорошая тема! Наверняка голосуют :) Однако я не удовлетворен ответами, предоставленными до сих пор, поэтому я решил написать довольно длинный ответ на этот вопрос.
причина, по которой я не удовлетворен, заключается в том, что ответы в основном все верны (мне особенно нравится ответ ковшенина (+1), который очень связан с теорией графов...), но все они либо слишком специфичны по определенным факторам, либо слишком общие.
это как спросить, как испечь торт и вы получите следующие ответы:
- Вы делаете торт и поставить его в духовку.
- вам определенно нужен сахар в нем!
- Что такое торт?
- торт-это ложь!
вы не будете удовлетворены, потому что вы не хотите знать, что делает хороший торт. И конечно, есть много рецептов.
Конечно, Google является самым важным игроком, но, в зависимости от варианта использования, поисковая система может включать очень разные факторы или весят их по-разному.
например, поисковая система для поиска новых независимых музыкальных исполнителей может поставить malus сайты художников с большим количеством внешних ссылок.
основная поисковая система, вероятно, сделает прямо противоположное, чтобы предоставить вам "соответствующие результаты".
есть (как уже было сказано) более 200 факторов, которые публикуются Google. Таким образом, веб-мастера знают, как оптимизировать свои веб-сайты. Есть очень вероятные еще много чего, о чем общественность не знает (в случае Google).
но в самом бораде и абстрактном термине SEO оптимизация вы можете вообще разбить важные из них на две группы:
какой ответ соответствует вопросу? Или: Насколько хорошо содержимое страниц соответствует условиям поиска?
насколько популярен / хорош ответ? Или: Что такое pagerank?
в обоих случаи важно то, что я не говорю о целых веб-сайтах или доменах, я говорю об отдельных страницах с уникальным URL.
также важно, что pagerank не представляет все факторы, только те, которые Google классифицирует как популярность. И под хорошим я подразумеваю другие факторы, которые просто не имеют ничего общего с популярностью.
в случае Google официальное заявление заключается в том, что они хотят дать соответствующие результаты пользователю. Это означает, что все алгоритмы будут оптимизирован для того, что хочет пользователь.
Итак, после этого долгого введения (рад, что вы все еще со мной...) Я дам вам список факторов, которые считаю очень важными (на данный момент):
категория 1 (Насколько хорошо ответ соответствует вопросу?
Вы заметите, что многое сводится к структуре документа!
- страница в первую очередь имеет дело с точным вопросом.
значение: вопросительные слова появляются в тексте заголовка страницы или в заголовках абзацев абзацев. То же самое касается и позиции этих ключевых слов. Чем раньше на странице, тем лучше. Повторяется часто, а также (если не слишком много, который идет под названием ключевых слов начинки).
весь сайт занимается этой темой (ключевые слова появляются в домене / поддомене)
слова являются важной темой на этой странице (внутренние ссылки якорные тексты переход к позициям ключевого слова или якорные тексты / тексты ссылок содержат ключевое слово).
то же самое происходит, если внешние ссылки используют ключевые слова в тексте ссылки для ссылки на эту страницу
категория 2 (Насколько важна/популярна страница?)
Вы заметите, что не все факторы указывают на точную цель. Некоторые из них включены (особенно Google), чтобы дать страницам импульс, что... что ж... что заслужил/заработал.
- контент-это король!
наличие уникального контента, который не может быть найден или очень мало в остальной части интернета дает толчок. Это в основном измеряется неупорядоченными комбинациями слов на веб-сайте, которые обычно используются очень мало (важные слова). Но есть и гораздо более сложные методы.
новизна-новее лучше
исторические изменение (как часто страница обновлялась в прошлом. Перемены-это хорошо.)
популярность внешних ссылок (сколько ссылок внутри?)
если страница ссылается на другую страницу, ссылка стоит больше, если сама страница имеет высокий pagerank.
- разнообразие внешних ссылок
в основном ссылки из разных корневых доменов, но другие факторы тоже играют роль. Такие факторы, как даже то, как разделены веб-серверы ссылок сайты географически (по их IP-адресу).
The New York Times стоит гораздо больше, чем какой-то странный новый сайт, даже если это PageRank выше!
- Доверие
- трастовый домен
весь ваш сайт дает толчок к вашему контенту, если ваш домен ему доверяют. Ну здесь учитываются разные факторы. Конечно, ссылки из надежных sties на ваш домен, но это даже будет хорошо, если вы находитесь в том же центре обработки данных, что и важные веб-сайты.
- тема конкретных ссылок В.
если веб-сайты, которые могут быть разрешены в теме, ссылаются на вас, и запрос также может быть разрешен в этой теме, это хорошо.
- распределение ссылок в течение долгого времени.
Если вы заработали много ссылок в в течение короткого периода времени, это будет делать вам хорошо в это время и в ближайшем будущем после этого. Но не так хорошо позже. Если вы медленно и стабильно зарабатываете ссылки, это пойдет вам на пользу для контента, который "вне времени".
- ссылки с доменов restrited
ссылки
.gov
домен стоит много.
- пользователь нажмите кнопку поведение
какова скорость клика вашего результата поиска?
- время, затраченное на сайт
отслеживание Google analytics и т. д. Он также отслеживается, если пользователь нажимает назад или нажимает другой результат после открытия вашего.
- собранные данные пользователя
голоса, рейтинг и др. ссылки в Gmail и т. д.
теперь я введу третью категорию, и один или два пункта сверху войдут в эту категорию, но я об этом не думал... Категория:
* * насколько важен / хорош ваш сайт в генерал**
все ваши страницы будут ранжироваться немного в зависимости от качества вашего сайта
факторы включают в себя:
хорошая архитектура сайта (легко навгите, структурированный. Файлы Sitemap и т. д...)
Как установили (давно существующие домены стоят больше).
информация о хостере (какие еще сайты размещаются рядом с вами?
частота поиска вашего точного имя.
и последнее, но не менее важное, я хочу сказать, что многие из этих факторов могут быть обогащены семантической технологией и могут быть введены новые.
например кто-то может искать Титаник и у вас на сайте про айсберги ... это может быть установлено в корреляцию, которая может быть отражена.
недавно введенные семантические идентификаторы. Например сова теги могут иметь огромное влияние в будущем.
для пример блог о фильме Титаник может поставить знак на этой странице, что это тот же контент, что и в статье Википедии о том же фильме.
этот вид связи в настоящее время находится в стадии интенсивного развития и создания, и никто не знает, как он будет использоваться.
может быть, дублированный контент фильтруется, и отображается только самое важное из того же контента? Или, может быть, наоборот? Что вы получаете представлено много страниц, которые соответствуют вашему запросу. Даже если они не содержат ваши ключевые слова?
Google даже применяет факторы разной релевантности в зависимости от темы вашего поискового запроса!
сложно, но я возьму удар:
изображение (если применимо)
- первое изображение на странице
- изображение с именем, которое включает буквы "логотип"
- изображение, которое отображается ближе всего к верхнему левому (или верхнему правому)
- изображение, которое чаще всего появляется на других страницах сайта
- изображение меньше, чем некоторые максимальными размерами
В
- содержимое тега заголовка
- содержимое тега описания мета-контента
- содержимое первого тега h1
- содержимое первого тега p
ключевые слова, которые будут использоваться для нашей поисковой системы, (стиль переполнения стека)
- подстрока доменного имени
- подстрока url
- подстрока заголовка тег
- близость между термином и самое распространенное слово на странице и в верхней части страницы
ключевые слова метаданных, описание, Все изображения, журнал изменений (для целей модерации и администрирования)
- Ак! кляп! синтаксическая ошибка.
Я не работаю в Google, но около года назад я прочитал, что у них было более 200 факторов для ранжирования результатов поиска. Конечно, самый высокий рейтинг будет релевантным, поэтому ваш вопрос довольно интересен в этом смысле.
Что такое релевантность и как ее вычислить? Есть несколько алгоритмов, и я уверен, что у Google есть свои собственные, но те, о которых я знаю,Корреляции Пирсона и Евклидово Расстояние.
хорошая книга, которую я бы предложил по этому поводу тема (не обязательно поисковые системы) составляет Программирование Коллективного Разума Тоби Сегаран (О'Рейли). Несколько примеров из книги показывают, как извлекать данные из сторонних веб-сайтов с помощью API или очистки экрана и находить похожие записи, что довольно приятно.
в любом случае, вернемся к Google. Другие методы релевантности, конечно, полнотекстовый поиск, и вы можете получить хорошую книгу по MySQL или Sphinx, если на то пошло. Предложенный @Chaoley был TSEP, который также довольно интересный.
но на самом деле, я знаю людей из русской поисковой системы под названием яндекс здесь, и все, что они делают, находится под NDA, поэтому я думаю, вы можете приблизиться, но вы не можете стать совершенным, если вы не работаете в Google ;)
Ура.
фактически отвечая на ваш вопрос (а не только в целом о поисковых системах):
Я считаю, что немного похожий на Instapaper будет лучшим вариантом.
логика instapaper (я не создавал его, поэтому я, конечно, не знаю внутренней работы, но довольно легко предсказать, как это работает):
найти самую большую кучу текста в текстовых элементах (опираясь на теги абзацев, в то время как очень элегантный, не будет работать с теми дерьмовыми сайтами, которые используют div вместо p). В принципе, вам нужно найти хороший баланс между элементами блока (divs, ps и т. д.) и объем текста. Придумайте некоторый порог: если X количество слов остается неразделенным разметкой, этот текст принадлежит основному тексту. Затем разверните на братьев и сестер, сохраняя порог текста / разметки какого-то рода.
Как только вы сделаете самую трудную часть - найдите, какой текст принадлежит фактической статье - это становится довольно легко. Вы можете найти первое изображение вокруг этого текста и используйте его как миниатюру. Таким образом, вы избежите рекламы, потому что они не будут так близки к разметке основного текста.
наконец, придумывание ключевых слов-это забавная часть. Вы можете делать тонны вещей: упорядочивать слова по частоте, удалять шум (ands, ors и т. д.), и у вас есть что-то хорошее. Смешайте это с "видным коротким текстовым элементом над обнаруженной текстовой областью тела" (т. е. заголовком вашей статьи), заголовком страницы, метой, и у вас есть что-то красивое вкусный.
все эти идеи, если они будут реализованы должным образом, будут очень пуленепробиваемыми, потому что они не полагаются на семантическую разметку-делая ваш код сложным, вы гарантируете, что даже очень небрежно закодированные веб - сайты будут обнаружены правильно.
конечно, это связано с недостатком низкой производительности, но я думаю, что это не должно быть так плохо.
совет: для крупномасштабных веб-сайтов, на которые люди ссылаются очень часто, вы можете установить HTML-элемент, содержащий тело текст (который я описывал в пункте № 1) вручную. Это обеспечит правильность и ускорит процесс.
надеюсь, это немного поможет.
есть много очень сложных алгоритмов для извлечения соответствующего контента из супа тегов. Если вы хотите построить что-то полезное для себя, вы можете взглянуть на исходный код для читабельности и перенесите его на php. Я сделал что-то подобное недавно (не могу поделиться кодом, к сожалению).
основная логика читаемости состоит в том, чтобы найти все теги уровня блока и подсчитать длину текста в них, не считая детей. Затем каждый родитель узлу присваивается фрагмент (половина) веса каждого из его потомков. Это используется для финансирования самого большого тега уровня блока, который имеет самый большой объем обычного текста. Отсюда содержимое дополнительно очищается.
это ни в коем случае не пуленепробиваемый, но он хорошо работает в большинстве случаев.
большинство поисковых систем ищут заголовок и мета-описание в заголовке документа, затем заголовок один и текстовое содержимое в теле. Также рассматриваются теги alt изображений и заголовки ссылок. В последний раз я читал, что Yahoo использует тег ключевого слова meta, но большинство из них этого не делают.
вы можете скачать файлы с открытым исходным кодом из проекта поисковой системы (TSEP) на Sourceforge https://sourceforge.net/projects/tsep/ и посмотрите, как они это делают.
Я бы просто схватил первый "абзац" текста. То, как большинство людей пишут истории/проблемы/то, что они сначала заявляют самое важное, а затем разрабатывают. Если вы посмотрите на любой случайный текст, и вы можете видеть это имеет смысл большую часть времени.
например, вы делаете это сами в своем первоначальном вопросе. Если взять первые три предложения из вашего первоначального вопроса, у вас есть довольно хорошее резюме того, что вы пытаетесь сделать.
и, я только что сделал это себя тоже: суть моего комментария кратко изложена в первом абзаце. Остальное-просто примеры и разработки. Если вы не уверены, взгляните на aнесколькопоследниестатьи Я полу-случайно выбрал из Google News. Хорошо, что последний не был полу-случайным, я признаю;)
в любом случае, я думаю, что это очень простой подход, который работает большую часть времени. Вы всегда можете посмотреть на мета-описания, заголовки и ключевые слова, но если их там нет, это может быть вариант.
надеюсь, что это помогает.
Я бы рассмотрел эти построения кода
- проверить синонимы и акронимов
- применение OCR на изображениях для поиска в виде текста(Abby Fine Reader и Recostar хороши,Тессеракт свободно и хорошо(не так хорошо как прекрасный читатель :) )
- вес шрифтов, а также(размер, смелость, подчеркивание, цвет)
- вес содержимого в зависимости от его места на странице(например, содержимое на верхней стороне страницы больше уместно)
также:
- дополнительный текст, запрошенный у веб-мастера, чтобы определить страницу
вы также можете проверить, если вы можете найти что-нибудь полезное в Google search API:http://code.google.com/intl/tr/apis/ajaxsearch/
Я столкнулся с той же проблемой прямо сейчас, и после некоторых попыток я нашел что-то, что работает для создания фрагмента веб-страницы (должно быть настроено):
- возьмите все html
- удалите теги скриптов и стилей внутри тела с их содержимым (важно)
- удалить лишние пробелы, табуляции, новые строки.
- Теперь перейдите через DOM, чтобы поймать div, p, article, td (другие?) и для каждого . взять HTML-код текущего элемента . взять текстовую версию элемента . присвойте этому элементу оценку: длина текста * длина текста / длина html
- Теперь отсортируйте все баллы, возьмите самый большой.
Это быстрый (и грязный) способ идентификации длинных текстов с относительно низким балансом разметки, как то, что происходит в обычном содержании. В моих тестах это кажется действительно хорошим. Просто добавьте воды ;)
в дополнение к этому вы можете искать" og: "мета-теги, название и описание, h1 и много других второстепенных приемов.
Google для "веб-искателей, роботов, пауков и интеллектуальных агентов" может попробовать их отдельно, а также получить индивидуальные результаты.
то, что я думаю, что вы ищете, это соскабливание экрана (с DOM), которое стек имеет тонну вопросов и ответов on.
Google также использует систему под названием Page Rank, где он проверяет, сколько ссылок на сайт есть. Предположим, что вы ищете учебник по C++, и вы ищете его в Google. Вы найдете один из лучших результатов, и это отличный учебник. Google знает это, потому что он искал в своем кэше в интернете и видел, что все ссылаются на этот учебник, разглагольствуя, насколько это хорошо. Google обманывает, что это хороший учебник, и ставит его в качестве верхнего результата.
Это на самом деле делает это, поскольку он кэширует все, давая каждой странице рейтинг страницы, как было сказано ранее, на основе ссылок на него.
надеюсь, что это помогает!
чтобы ответить на один из ваших вопросов, я сейчас читаю следующую книгу, и я рекомендую ее: PageRank Google и за его пределами, Эми Langville и Карл Майер.
мягко говоря математическим. Использует некоторую линейную алгебру в контексте теории графов, собственный анализ, марковские модели и т. д. Мне понравились части, которые говорят об итерационных методах решения линейных уравнений. Я понятия не имел, что Google использует эти итерационные методы.
небольшая книга, всего 200 страниц. Содержит "азиды", которые расходятся с основным потоком текста, плюс историческую перспективу. Также указывает на другие последние системы ранжирования.
здесь есть несколько хороших ответов, но похоже, что они не отвечают на ваш вопрос. Может быть, это и так.
то, что вы ищете, называется поиск информации
он обычно использует мешок слов model
скажем, у вас есть два документа:
DOCUMENT A Seize the time, Meribor. Live now; make now always the most precious time. Now will never come again
и этот
DOCUMENT B Worf, it was what it was glorious and wonderful and all that, but it doesn't mean anything
и у вас есть запрос, или то, что вы хотите, чтобы найти другие соответствующие документы
QUERY aka DOCUMENT C precious wonderful life
в любом случае, как вы рассчитать наиболее "релевантный" из двух документов? Вот как:
- маркировать каждый документ (разбить на слова, удалив все не буквы)
- в нижнем регистре все
- удалить стоп-слова (и т. д.)
- рассмотрим стемминг (удаление суффикса, см. Porter или Snowball stemming algorithms)
- рассмотрите возможность использования n-граммов
вы можете подсчитать частоту слов, чтобы получить "ключевые слова".
затем вы делаете один столбец для каждого слова и вычисляете важность слова для документа, относительно его важности во всех документах. Это называется метрикой TF-IDF.
теперь у вас есть это:
Doc precious worf life... A 0.5 0.0 0.2 B 0.0 0.9 0.0 C 0.7 0.0 0.9
затем вы вычисляете сходство между документами, используя меру косинусного сходства. Наиболее релевантным является документ с наибольшим сходством с документом С.
теперь, вы, кажется, хотите, чтобы найти наиболее подобные абзацы, поэтому просто назовите каждый абзац документом или рассмотрите возможность использования скользящих окон над документом.
вы можете посмотреть мое видео здесь. Он использует графический инструмент Java, но объясняет понятия:
http://vancouverdata.blogspot.com/2010/11/text-analytics-with-rapidminer-part-4.html
вот приличная ИК-книга: