검색 엔진은 관련 콘텐츠를 어떻게 찾습니까?
Google은 웹을 파싱 할 때 관련 콘텐츠를 어떻게 찾나요?
예를 들어 Google이 PHP 네이티브 DOM 라이브러리를 사용하여 콘텐츠를 구문 분석한다고 가정 해 보겠습니다. 웹 페이지에서 가장 관련성이 높은 콘텐츠를 찾는 방법은 무엇입니까?
내 생각은 모든 단락을 검색하고 각 단락의 길이에 따라 정렬 한 다음 가능한 검색 문자열과 쿼리 매개 변수에서 각 단락의 관련성 비율을 계산하는 것입니다.
다음 URL이 있다고 가정 해 보겠습니다.
http://domain.tld/posts/stackoverflow-dominates-the-world-wide-web.html
이제 해당 URL에서 HTML 파일 이름이 관련성이 높은지 알아 내면 해당 문자열이 페이지의 모든 단락과 얼마나 가까운 지 확인할 수 있습니다!
이것의 정말 좋은 예는 페이지를 공유 할 때 Facebook 공유입니다. Facebook은 링크를 빠르게 봇하고 이미지, 콘텐츠 등을 다시 가져옵니다.
주변 요소와 메타 데이터에 따라 관련성 비율을 계산하는 데 일종의 계산 방법이 가장 좋을 것이라고 생각했습니다.
사이트에서 최상의 콘텐츠를 얻는 방법, 논의 할 수있는 알고리즘 또는 심층적 인 답변을 다루는 콘텐츠 구문 분석의 모범 사례에 대한 책 / 정보가 있습니까?
제가 염두에두고있는 몇 가지 아이디어는 다음과 같습니다.
- 일반 텍스트 길이로 모든 단락 및 순서 찾기
- 어떻게 든
div
컨테이너 의 너비와 높이를 찾고 (W + H)-@Benoit - 메타 키워드, 제목, 설명을 확인하고 단락 내 관련성을 확인합니다.
- 모든 이미지 태그와 순서를 기본 단락에서 떨어진 노드의 최대 및 길이로 찾습니다.
- 동영상과 같은 개체 데이터를 확인하고 가장 큰 단락 / 콘텐츠 div에서 노드를 계산합니다.
- 파싱 된 이전 페이지와 유사점을 찾아냅니다.
이 정보가 필요한 이유 :
웹 마스터가 링크를 전송 한 다음 페이지를 나열하는 웹 사이트를 만들고 있지만 웹 마스터가 링크를 제출하기를 원합니다. 그런 다음 해당 페이지를 크롤링하여 다음 정보를 찾습니다.
- 이미지 (해당하는 경우)
- 최고의 텍스트 조각에서 255 미만 단락
- 검색 엔진에 사용될 키워드, (Stack Overflow 스타일)
- 메타 데이터 키워드, 설명, 모든 이미지, 변경 로그 (조정 및 관리 목적)
이것이 검색 엔진을위한 것이 아니라 검색 엔진이 콘텐츠 검색을 처리하는 방식이 내가 필요로하는 것과 동일한 맥락에 있다는 것을 여러분이 이해할 수 있기를 바랍니다.
나는 영업 비밀을 요구하는 것이 아니라 이에 대한 개인적인 접근 방식이 무엇인지 묻는 것입니다.
이것은 매우 일반적인 질문이지만 매우 좋은 주제입니다! 확실히 upvoted :) 그러나 지금까지 제공된 답변에 만족하지 않아서 이에 대해 다소 긴 답변을 작성하기로 결정했습니다.
내가 만족하지 못하는 이유는 대답이 기본적으로 모두 사실이기 때문입니다 (특히 그래프 이론과 매우 관련된 kovshenin (+1)의 대답이 마음에 듭니다 ...). 그러나 모든 요소가 특정 요인에 대해 너무 구체적이거나 너무 일반.
케이크를 굽는 방법을 묻는 것과 같으며 다음과 같은 답변을 얻습니다.
- 케이크를 만들어 오븐에 넣습니다.
- 당연히 설탕이 필요합니다!
- 케이크는 무엇입니까?
- 케이크는 거짓말입니다!
무엇이 좋은 케이크를 만드는지 알고 싶지 않기 때문에 만족하지 못할 것입니다. 그리고 물론 많은 또는 레시피가 있습니다.
물론 Google이 가장 중요한 역할을하지만 사용 사례에 따라 검색 엔진에는 매우 다른 요소를 포함하거나 가중치를 다르게 지정할 수 있습니다.
예를 들어, 새로운 인디 음악 아티스트를 찾기위한 검색 엔진은 많은 외부 링크가있는 아티스트 웹 사이트에 악의를 일으킬 수 있습니다.
주류 검색 엔진은 "관련성있는 결과"를 제공하기 위해 정반대의 작업을 수행 할 것입니다.
(이미 말했듯이) Google에서 발표 한 200 개 이상의 요소가 있습니다. 따라서 웹 마스터는 웹 사이트를 최적화하는 방법을 알고 있습니다. 대중이 알지 못하는 것이 더 많이있을 가능성이 높습니다 (Google의 경우).
그러나 매우 지루하고 추상적 인 용어 인 SEO 최적화 에서는 일반적으로 중요한 것을 두 그룹으로 나눌 수 있습니다.
답변이 질문과 얼마나 잘 일치합니까? 또는 : 페이지 콘텐츠가 검색어와 얼마나 잘 일치합니까?
답변이 얼마나 인기 / 좋은가요? 또는 : 페이지 순위는 무엇입니까?
두 경우 모두 중요한 것은 전체 웹 사이트 나 도메인에 대해 말하는 것이 아니라 고유 한 URL을 가진 단일 페이지에 대해 말하는 것입니다.
페이지 순위가 모든 요소를 나타내는 것이 아니라 Google이 인기로 분류 한 요소 만 나타내는 것도 중요합니다. 그리고 좋은 의미는 인기와 관련이없는 다른 요소를 의미합니다.
Google의 경우 공식적인 진술은 사용자에게 관련 결과를 제공하고 싶다는 것입니다. 모든 알고리즘이 사용자가 원하는 것에 최적화된다는 것을 의미합니다.
그래서이 긴 소개 후에 (아직도 나와 함께있어 기쁩니다 ...) 제가 매우 중요하다고 생각하는 요소 목록을 제공하겠습니다 (현재).
카테고리 1 (답이 질문과 얼마나 일치합니까?
문서 구조에 많은 부분이 있음을 알 수 있습니다!
- 이 페이지는 주로 정확한 질문을 다룹니다.
의미 : 질문 단어는 페이지 제목 텍스트 또는 제목 단락 단락에 나타납니다. 이러한 키워드의 위치도 마찬가지입니다. 페이지가 빠를수록 좋습니다. 자주 반복됩니다 (너무 많지 않은 경우 키워드 stuffing의 이름 아래에 있음).
전체 웹 사이트가 주제를 다룹니다 (키워드는 도메인 / 하위 도메인에 표시됨).
단어는이 페이지에서 중요한 주제입니다 (내부 링크 앵커 텍스트가 키워드 위치로 이동하거나 앵커 텍스트 / 링크 텍스트에 키워드가 포함됨).
외부 링크가 링크 텍스트의 키워드를 사용하여이 페이지로 연결하는 경우에도 마찬가지입니다.
카테고리 2 (페이지가 얼마나 중요하거나 인기가 있습니까?)
모든 요소가이 정확한 목표를 가리키는 것은 아닙니다. 일부는 (특히 Google에 의해) 페이지를 향상시키기 위해 포함되어 있습니다.
- 콘텐츠가 왕입니다!
웹의 나머지 부분에서 찾을 수 없거나 아주 적은 고유 한 콘텐츠의 존재는 힘을줍니다. 이것은 일반적으로 거의 사용되지 않는 (중요한 단어) 웹 사이트에서 정렬되지 않은 단어 조합으로 측정됩니다. 그러나 훨씬 더 정교한 방법도 있습니다.
최근 성-최신 일수록 좋음
역사적 변경 (과거에 페이지가 업데이트 된 빈도. 변경하는 것이 좋습니다.)
외부 링크 인기도 (링크가 몇 개입니까?)
페이지가 다른 페이지를 링크하는 경우 페이지 자체의 페이지 순위가 높으면 링크가 더 가치가 있습니다.
- 외부 링크 다양성
기본적으로 다른 루트 도메인의 링크이지만 다른 요소도 역할을합니다. (IP 주소에 따라) 지리적으로 사이트를 연결하는 웹 서버가 얼마나 분리되어 있는지와 같은 요인.
- 신뢰 순위
예를 들어, 편집 콘텐츠가있는 크고 신뢰할 수 있고 확립 된 사이트가 귀하에게 링크되면 신뢰 순위를 얻습니다. 이것이 PageRank가 더 높더라도 New York Times 의 링크가 이상한 새 웹 사이트보다 훨씬 더 가치 있는 이유 입니다!
- 도메인 신뢰
도메인이 신뢰할 수 있다면 전체 웹 사이트가 콘텐츠를 향상시킵니다. 여기에는 다른 요소가 중요합니다. 물론 신뢰할 수있는 사이트에서 도메인으로 연결되지만 중요한 웹 사이트와 동일한 데이터 센터에있는 경우에도 유용합니다.
- 주제별 링크.
주제로 해석 될 수있는 웹 사이트가 사용자에게 링크되고 쿼리도이 주제로 해석 될 수 있다면 좋습니다.
- 시간 경과에 따른 링크 분포.
단기간에 많은 링크를 획득했다면이 시점과 가까운 장래에 도움이 될 것입니다. 그러나 나중에 그렇게 좋지는 않습니다. 느리고 꾸준한 링크를 얻으면 "영원한"콘텐츠에 도움이 될 것입니다.
- 제한된 도메인의 링크
.gov
도메인 의 링크 는 많은 가치가 있습니다.
- 사용자 클릭 동작
검색 결과의 클릭률은 얼마입니까?
- 사이트에 머문 시간
Google 애널리틱스 추적 등 사용자가 귀하의 결과를 연 후 다시 클릭하거나 다른 결과를 클릭하는 경우에도 추적됩니다.
- 수집 된 사용자 데이터
투표, 평가 등, Gmail 참조 등
이제 세 번째 카테고리를 소개하겠습니다. 위에서 언급 한 1 ~ 2 개의 포인트가이 카테고리에 포함되지만 그에 대해 생각해 본 적이 없습니다 ... 카테고리는 다음과 같습니다.
** 귀하의 웹 사이트가 전반적으로 얼마나 중요하고 / 좋은가 **
모든 페이지는 웹 사이트의 품질에 따라 약간의 순위가 매겨집니다.
요인은 다음과 같습니다.
좋은 사이트 아키텍처 (쉬운 탐색, 구조화. Sitemap 등)
설정 방법 (기존 도메인이 길수록 더 가치가 있음).
호스팅 업체 정보 (주변에서 호스팅되는 다른 웹 사이트는 무엇입니까?
정확한 이름의 검색 빈도.
마지막으로, 이러한 이론적 요소 중 많은 부분이 의미 론적 기술에 의해 강화 될 수 있고 새로운 요소가 도입 될 수 있다고 말하고 싶습니다.
예를 들어, 누군가가 타이타닉을 검색하고 빙산에 관한 웹 사이트를 가지고있을 수 있습니다. 이것은 반영 될 수있는 상관 관계로 설정 될 수 있습니다.
새로 도입 된 의미 식별자. 예를 들어 OWL 태그는 미래에 큰 영향을 미칠 수 있습니다.
예를 들어 영화 타이타닉에 관한 블로그는이 페이지에 같은 영화에 대한 위키피디아 기사와 같은 내용이라는 표시를 할 수 있습니다.
이러한 종류의 연결은 현재 많은 개발 및 확립 중에 있으며 아무도 그것이 어떻게 사용 될지 모릅니다.
중복 콘텐츠가 필터링되고 동일한 콘텐츠 중 가장 중요한 콘텐츠 만 표시 될 수 있습니다. 아니면 그 반대일까요? 검색어와 일치하는 많은 페이지가 표시됩니다. 키워드가 포함되어 있지 않더라도?
Google은 검색어 주제에 따라 다른 관련성 요소를 적용합니다!
까다 롭지 만 찌르겠습니다.
이미지 (해당하는 경우)
- 페이지의 첫 번째 이미지
- 이름에 "로고"라는 문자가 포함 된 이미지
- 왼쪽 상단 (또는 오른쪽 상단)에 가장 가깝게 렌더링되는 이미지
- 사이트의 다른 페이지에 가장 자주 나타나는 이미지
- 일부 최대 크기보다 작은 이미지
최고의 텍스트 조각에서 255 미만 단락
- 제목 태그의 내용
- 메타 콘텐츠 설명 태그의 콘텐츠
- 첫 번째 h1 태그의 내용
- 첫 번째 p 태그의 내용
검색 엔진에 사용되는 키워드 (스택 오버플로 스타일)
- 도메인 이름의 하위 문자열
- URL의 하위 문자열
- 제목 태그의 하위 문자열
- 용어와 페이지의 가장 일반적인 단어와 페이지 상단 사이의 근접성
메타 데이터 키워드, 설명, 모든 이미지, 변경 로그 (조정 및 관리 목적)
- ak! 개그! 구문 오류.
저는 Google에서 일하지 않지만 약 1 년 전에 검색 결과 순위를 매기는 요소가 200 개가 넘는다는 것을 읽었습니다. 물론 최상위 순위는 관련성이 있으므로 귀하의 질문은 그런 의미에서 상당히 흥미 롭습니다.
관련성은 무엇이며 어떻게 계산합니까? 몇 가지 알고리즘이 있으며 Google에는 자체 알고리즘이 있지만 내가 아는 알고리즘은 Pearson Correlation 및 Euclidean Distance 입니다.
이 주제 (검색 엔진 일 필요는 없음)에 대해 제가 제안 할 좋은 책은 Toby Segaran (O'Reilly)의 Programming Collective Intelligence 입니다. 이 책의 몇 가지 샘플은 API 또는 화면 스크래핑을 통해 타사 웹 사이트에서 데이터를 가져오고 유사한 항목을 찾는 방법을 보여줍니다.
어쨌든 Google로 돌아갑니다. 다른 관련성 기술은 물론 전체 텍스트 검색이며 그 문제에 대해 MySQL 또는 Sphinx에 대한 좋은 책을 얻을 수 있습니다. @Chaoley가 제안한 TSEP도 꽤 흥미 롭습니다.
하지만 실제로 Yandex라는 러시아 검색 엔진의 사람들을 알고 있으며 그들이하는 모든 일은 NDA하에 있으므로 가까이 다가 갈 수 있지만 Google에서 일하지 않으면 완벽 할 수 없습니다.)
건배.
실제로 귀하의 질문에 대한 답변 (일반적으로 검색 엔진에 관한 것이 아님) :
Instapaper처럼 조금씩가는 것이 최선의 선택이라고 생각합니다.
instapaper의 논리 (내가 만든 것이 아니기 때문에 내부 작업을 확실히 모르지만 작동 방식을 예측하는 것은 매우 쉽습니다) :
텍스트와 같은 요소에서 가장 많은 텍스트를 찾습니다 (단락 태그에 의존하는 것은 매우 우아하지만 p 대신 div를 사용하는 엉터리 사이트에서는 작동하지 않습니다). 기본적으로 블록 요소 (div, ps 등)와 텍스트 양 사이에 적절한 균형을 찾아야합니다. 몇 가지 임계 값을 생각해보십시오. X 개의 단어가 마크 업으로 나뉘 지 않은 상태로 유지되면 해당 텍스트는 본문 텍스트에 속합니다. 그런 다음 일종의 텍스트 / 마크 업 임계 값을 유지하는 형제로 확장합니다.
가장 어려운 부분 (실제 기사에 속하는 텍스트를 찾는 것)을 수행하면 매우 쉬워집니다. 해당 텍스트 주변의 첫 번째 이미지를 찾아 축소판으로 사용할 수 있습니다. 이렇게하면 광고가 본문 텍스트 마크 업에 그다지 가깝지 않기 때문에 광고를 피할 수 있습니다.
마지막으로 키워드를 만드는 것이 재미있는 부분입니다. 당신은 수많은 일을 할 수 있습니다 : 빈도에 따라 단어를 정렬하고, 소음 (ands, ors 등)을 제거하고 좋은 것을 가지고 있습니다. 이를 "감지 된 본문 텍스트 영역 위에 눈에 띄는 짧은 텍스트 요소"(예 : 기사 제목), 페이지 제목, 메타와 혼합하면 꽤 맛있는 것이 있습니다.
이러한 모든 아이디어가 제대로 구현되면 의미 론적 마크 업에 의존하지 않기 때문에 매우 방탄이 될 것입니다. 코드를 복잡하게 만들면 매우 조잡하게 코딩 된 웹 사이트도 제대로 감지 될 수 있습니다.
물론 성능이 좋지 않다는 단점이 있지만 그렇게 열악해서는 안된다고 생각합니다.
Tip: for large-scale websites, to which people link very often, you can set HTML element that contains the body text (that I was describing on point #1) manually. This will ensure correctness and speed things up.
Hope this helps a bit.
There are lots of highly sophisticated algorithms for extracting the relevant content from a tag soup. If you're looking to build something usable your self, you could take a look at the source code for readability and port it over to php. I did something similar recently (Can't share the code, unfortunately).
The basic logic of readability is to find all block level tags and count the length of text in them, not counting children. Then each parent node is awarded a fragment (half) of the weight of each of its children. This is used to fund the largest block level tag that has the largest amount of plain text. From here, the content is further cleaned up.
It's not bullet proof by any means, but it works well in the majority of cases.
Most search engines look for the title and meta description in the head of the document, then heading one and text content in the body. Image alt tags and link titles are also considered. Last I read Yahoo was using the meta keyword tag but most don't.
You might want to download the open source files from The Search Engine Project (TSEP) on Sourceforge https://sourceforge.net/projects/tsep/ and have a look at how they do it.
I'd just grab the first 'paragraph' of text. The way most people write stories/problems/whatever is that they first state the most important thing, and then elaborate. If you look at any random text and you can see it makes sense most of the time.
For example, you do it yourself in your original question. If you take the first three sentences of your original question, you have a pretty good summary of what you are trying to do.
And, I just did it myself too: the gist of my comment is summarized in the first paragraph. The rest is just examples and elaborations. If you're not convinced, take a look at a few recent articles I semi-randomly picked from Google News. Ok, that last one was not semi-random, I admit ;)
Anyway, I think that this is a really simple approach that works most of the time. You can always look at meta-descriptions, titles and keywords, but if they aren't there, this might be an option.
Hope this helps.
I would consider these building the code
- Check for synonyms and acronyms
- applying OCR on images to search as text(Abby Fine Reader and Recostar are nice, Tesseract is free and fine(no so fine as fine reader :) )
- weight Fonts as well(size, boldness, underline, color)
- weight content depending on its place on page(like contents on upper side of page is more relevant)
Also:
- An optinal text asked from the webmaster to define the page
You can also check if you can find anything useful at Google search API: http://code.google.com/intl/tr/apis/ajaxsearch/
I'm facing the same problem right now, and after some tries I found something that works for creating a webpage snippet (must be fine-tuned):
- take all the html
- remove script and style tags inside the body WITH THEIR CONTENT (important)
- remove unnecessary spaces, tabs, newlines.
- now navigate through the DOM to catch div, p, article, td (others?) and, for each one . take the html of the current element . take a "text only" version of the element content . assign to this element the score: text lenght * text lenght / html lenght
- now sort all the scores, take the greatest.
This is a quick (and dirty) way to identify longest texts with a relatively low balance of markup, like what happens in normal contents. In my tests this seems really good. Just add water ;)
In addition to this you can search for "og:" meta tags, title and description, h1 and a lot of other minor techniques.
Google for 'web crawlers, robots, Spiders, and Intelligent Agents', might try them separately as well to get individual results.
What I think you're looking for is Screen Scraping (with DOM) which Stack has a ton of Q&A on.
Google also uses a system called Page Rank, where it examines how many links to a site there are. Let's say that you're looking for a C++ tutorial, and you search Google for one. You find one as the top result, an it's a great tutorial. Google knows this because it searched through its cache of the web and saw that everyone was linking to this tutorial, while ranting how good it was. Google deceides that it's a good tutorial, and puts it as the top result.
It actually does that as it caches everything, giving each page a Page Rank, as said before, based on links to it.
Hope this helps!
To answer one of your questions, I am reading the following book right now, and I recommend it: Google's PageRank and Beyond, by Amy Langville and Carl Meyer.
Mildly mathematical. Uses some linear algebra in a graph theoretic context, eigenanalysis, Markov models, etc. I enjoyed the parts that talk about iterative methods for solving linear equations. I had no idea Google employed these iterative methods.
Short book, just 200 pages. Contains "asides" that diverge from the main flow of the text, plus historical perspective. Also points to other recent ranking systems.
There are some good answers on here, but it sounds like they don't answer your question. Perhaps this one will.
What your looking for is called Information Retrieval
It usually uses the Bag Of Words model
Say you have two documents:
DOCUMENT A
Seize the time, Meribor. Live now; make now always the most precious time. Now will never come again
and this one
DOCUMENT B
Worf, it was what it was glorious and wonderful and all that, but it doesn't mean anything
and you have a query, or something you want to find other relevant documents for
QUERY aka DOCUMENT C
precious wonderful life
Anyways, how do you calculate the most "relevant" of the two documents? Here's how:
- tokenize each document (break into words, removing all non letters)
- lowercase everything
- remove stopwords (and, the etc)
- consider stemming (removing the suffix, see Porter or Snowball stemming algorithms)
- consider using n-grams
You can count the word frequency, to get the "keywords".
Then, you make one column for each word, and calculate the word's importance to the document, with respect to its importance in all the documents. This is called the TF-IDF metric.
Now you have this:
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
Then, you calculate the similarity between the documents, using the Cosine Similarity measure. The document with the highest similarity to DOCUMENT C is the most relevant.
Now, you seem to want to want to find the most similar paragraphs, so just call each paragraph a document, or consider using Sliding Windows over the document instead.
You can see my video here. It uses a graphical Java tool, but explains the concepts:
http://vancouverdata.blogspot.com/2010/11/text-analytics-with-rapidminer-part-4.html
here is a decent IR book:
http://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf
참고URL : https://stackoverflow.com/questions/3967076/how-do-search-engines-find-relevant-content
'Program Tip' 카테고리의 다른 글
React에서 onChange와 onInput의 차이점은 무엇입니까? (0) | 2020.12.05 |
---|---|
C 및 C ++의 문자열 리터럴 유형은 무엇입니까? (0) | 2020.12.05 |
언제 바이트 배열을 사용하고 언제 바이트 버퍼를 사용합니까? (0) | 2020.12.05 |
ASP.NET MVC의 사용자 인증 및 권한 부여 (0) | 2020.12.05 |
모든 열을 기준으로 SQL 그룹화 (0) | 2020.12.05 |