2011-08-24 2 views
0

우리는 일종의 digg 사이트를 만들고 있으며 제한된 텍스트 (2-3 문장)를 자동으로 가져 오려고합니다. 그것은 article.if의 마지막 3 문장 일 수 있습니다. 우리는 문제없이 웹 페이지 컨텐츠를 가져 왔지만 보편적 인 스크립트로 문장을 거의 만들지 않기를 원합니다. 우리는 콘텐츠를 얻고 자하는 각 웹 사이트에 대한 사용자 지정 스크립트를 만드는 것을 피하고자합니다.웹 페이지의 텍스트 본문에서 처음 몇 문장을 추출하는 방법

텍스트 블록을 점으로 표시하려고 생각했습니다. 가까운 거리의 점을 찾고 점 주위의 단어를 얻는 것. 그것이 원시 아이디어입니다. 누군가가 텍스트의 일부분을 추출하는 방법에 대해 다른 생각을 갖고 있습니까?

전체 콘텐츠를 스크래핑하지 않으려합니다.

감사합니다.

+0

죄송합니다. 귀하의 질문이 명확하지 않습니다. 페이지의 일부분을 다운로드하는 방법을 알고 싶습니까? 또는 문자열 조작을 수행하여 몇 문장을 추출하는 방법을 알고 싶습니까? – JonnyReeves

+0

불쌍한 설명을 드려 죄송합니다. 문자열 조작에 도움이 필요합니다. 웹 페이지의 내용을 가져오고 HTML을 제거한 다음 주요 기사 텍스트에서 2-3 문장을 가져와야합니다. 그것을하는 방법을 모른다. – Croky

+0

좋아, 글쎄, 당신이 질문하고 제목을 수정 해 줄 것을 제안한다; 예를 들어 '긁힌 자국'이 틀린 문맥에서 사용된다면, '텍스트 본문에서 첫 번째 X 문장을 추출하는 법'에 대한 질문이 더 많습니다. – JonnyReeves

답변

1

마크 업이 적고 수직 공백이 적은 부분을 많이 볼 수 있습니다. 페이지의 소스를 다운로드하고 strip_tags()을 사용하여 마크 업을 제거하십시오. 그런 다음 정규식을 사용하여 5 개의 연속 문장을 검색 할 수 있습니다.

다음은 스크립트 예제입니다. 포함되지 않은 클래스 (curl_multi 함수의 추상화)를 사용하지만이 클래스는 사용자의 질문과 관련이 없습니다.

<?php 

require_once("./../MultipleRequester.php"); 

$requester = new MultipleRequester(); 

$requester->addGetRequest('test', 'http://www.businessweek.com/news/2011-08-24/gold-tumbles-most-since-march-2008-as-demand-for-haven-wanes.html'); 
$requester->execute(); 
$content = $requester->getContent('test'); 

$plainText = strip_tags($content); 

$search = preg_match('/(\h{0,2}\v{0,2}\h{0,2}[A-Z]{1}[A-z0-9 ,\'")(.$]{10,1000}\.){2,5}/', $plainText, $matches); 

if($search) 
    print trim($matches[0]); 
else 
    print "Could not extract anything."; 

print "\n\n"; 
?> 

이 지문 :

달러는 연방 준비 제도 이사회 벤 버냉키 의장은 중앙 은행이 더를 제공 할 용의가 있음을 이번 주 말할 것이다 여부에 대한 추측 가운데 6 개 주요 통화 바스켓에 대해 상승 경제에 대한 자극. 이번 주 미국 중앙 은행 총재는 미국 회복을 위해 와이오밍 주 잭슨 홀에서 만난다.

콘텐츠를 많이 마크 업하는 사이트에 여전히 문제가있을 수 있습니다. 정규 표현식을 더 관대하게 만들려는 경우가 있습니다. 특히 공백 문자에 대해서는 더욱 그렇습니다.

정규 표현식은 약간 지저분하지만, 튜닝하거나 직접 만들 수 있습니다.

관련 문제