2014-03-12 4 views
1

위키 피 디아 페이지에서 내부 링크를 추출하려고합니다. 이것은 내가 사용중인 쿼리입니다.wikipedia 페이지의 최신 개정판에서 내부 링크를 얻는 방법?

/w/api.php?action=query&prop=links&format=xml&plnamespace=0&pllimit=max&titles=pageTitle 

그러나 결과는 위키 페이지의 내용을 반영하지 않습니다. 예를 들면 임의의 물품 here을 가져 가십시오. 이 페이지에는 오직 12 개의 링크 만 있습니다. 그러나 쿼리를 만들 때

/w/api.php?action=query&prop=links&format=xml&plnamespace=0&pllimit=max&titles=Von_Mises%E2%80%93Fisher_distribution 

나는 187 개의 링크를 얻었습니다. API에는 모든 개정판을 포함하여 페이지에 추가 된 모든 링크의 데이터베이스가있을 것 같습니다. 그럴까요? 마지막 버전의 링크 만 얻으려면 어떻게해야합니까?

+2

네비게이션 상자의 링크를 잊어 버렸을 수 있습니까? 내가 볼 수있는 것으로부터 API 응답의 모든 링크가 페이지에 있습니다. 없어야하는 링크의 예를 들어 줄 수 있습니까? – leo

+0

+1. 당신 말이 맞아요, 레오. 불행히도 API를 사용하면 페이지의 어느 섹션에서 링크를 추출 할 것인지를 지정할 수 없습니다. ( – chepukha

답변

5

데이터베이스에는 기사의 현재 버전에있는 링크 목록이 있습니다. API에서 얻은 모든 링크는 실제로 기사에 있습니다. 그러나 대부분은 아래쪽에있는 (두 번 접은) 탐색 상자에 숨겨져 있습니다 (아래로 스크롤하고 파란색 막대의 "표시"를 클릭 한 다음 지금 보게되는 추가 파란색 막대의 "표시"를 클릭하십시오).

이러한 링크는 페이지에 있지만 위키 텍스트에는 정의되어 있지 않습니다.이 링크는 {{ProbDistributions} 탐색 템플릿 (및 해당 템플릿이 포함하는 템플릿)에서 제공됩니다.

슬프게도, 페이지에 직접/명시 적으로 정의 된 링크 만 나열하는 좋은 방법은 없습니다. 템플릿 대체가 위키 구문의 실제 구문 분석 전에 발생하기 때문입니다.

+0

+1. 내가 예상 한 것보다 더 복잡하게 만듭니다.이 경우 가장 좋은 방법은 구문 분석하는 것입니다. wikitext하지만이 작업에 유용한 파서를 알고 계신가요? 감사합니다. – chepukha

+0

슬프게도 MediaWiki 구문은 매우 복잡하며 HTML로 변환하는 것을 "파서"라고 부르는 것은이 용어를 매우 어렵게 사용합니다. "정식"파서의 정확한 동작을 다시 구현하는 것은 매우 어렵습니다. 우리가 가진 폐점은 Parsoid이지만, 링크를 얻기에 충분해야하는 "괜찮은"파서가 많이 있습니다. 여기를 살펴보십시오. : https://www.mediawiki.org/wiki/Alternative_parsers – brightbyte

+0

링크를 추출하려면 PyWikipedia 프레임 워크 나 simmilar 라이브러리의 코드를 사용하면됩니다. https://stackoverflow.com/questions/ 1968132/from-to-parse-extract-data-from -a-mediawiki-marked-up-article-via-python – brightbyte