2009-07-07 5 views
9

위키 피 디아에서 발견 된 (자바로) 위키 미디어 마크 업을 구문 분석하려고합니다. 이 작업에는 기존 패키지가 많이 있지만, 내 요구 사항을 잘 충족시키지 못했습니다. 가장 좋은 패키지는 대부분의 페이지에서 괜찮은 일을하는 Mathclipse Bliki parser입니다.위키 미디어 마크 업 구문 분석 - EBNF 기반 파서가 적합하지 않습니까?

그러나이 구문 분석기는 불완전하며 특정 페이지를 구문 분석하지 못하거나 잘못 파싱하지 못합니다. 안타깝게도 코드가 다소 엉망이되어서이 구문 분석 엔진의 문제를 해결하는 데 시간이 많이 걸리고 오류가 발생하기 쉽습니다.

더 나은 구문 분석 엔진을 찾기 위해이 작업 (특히 ANTLR)에 EBNF 기반 파서를 사용하여 조사했습니다. 그러나 위키 미디어 마크 업이 상대적으로 완화되어 구조화 된 문법에 쉽게 들어갈 수 없기 때문에 이러한 접근법이이 작업에 특히 적합하지 않은 것으로 보인다.

ANTLR 및 이와 유사한 파서에 대한 경험은 매우 제한적이므로이 파서가 본질적으로이 작업에 적합하지 않은 것보다 문제를 일으킬 수 있습니다. 이 주제에 대해 더 많은 경험을 가진 사람이 여기에 무게를 둘 수 있습니까?

@Stobor : Google 쿼리에서 반환 한 구문 분석 엔진을 비롯하여 다양한 구문 분석 엔진을 살펴 봤다. 지금까지 찾은 최고의 것은 Bliki 엔진입니다. 문제는 그러한 파서를 수정하는 것이 엄청나게 지루한데, 그 이유는 모두 본질적으로 조건문과 정규식 체인이 길어서 스파게티 코드가 생기기 때문입니다. 나는 파싱의 EBNF 방법에 더 비슷한 것을 찾고 있는데, 그 방법은 훨씬 더 명확하고 간결하며 이해하기 쉽고 진화하기 때문이다. 나는 당신이 올린 미디어 위키 링크를 보았습니다. 그리고 그것은 상자 밖의 EBNF가이 작업에 적합하지 않다는 나의 의심을 확인하는 것으로 보입니다. 따라서 나는 EBNF처럼 명확하고 이해할 수있는 구문 분석 엔진을 찾고 있지만 위키 마크 업의 지저분한 구문을 처리 할 수 ​​있습니다.

+0

그것은 좋은 수 있습니다 ...

그래서 짧은에, 더 EBNF의 문법은 미디어 위키 마크 업을 구문 분석에 적합하지 않습니다,하지만 아무것도 정말 없다 http://google.com/search?q=wikipedia+java+parser의 인기 검색어는 더 나은 답변을 제공 할 수 있습니다. – Stobor

+0

도 http://www.mediawiki.org/wiki/Markup_spec/BNF – Stobor

답변

4

미디어 위키 콘텐츠를 구문 분석하는 것은 일반적인 미디어 위키 자체를 사용하면 거의 불가능합니다.이를 파싱하려면 HTML과 CSS를 완벽하게 구문 분석 할 수 있어야하며 (포함시킬 수 있기 때문에) 전체 템플릿 인스턴스화 및 확장은 물론 관련 콘텐츠가 사용했을 수도있는 파서 추가를 처리해야합니다. 이 템플릿 인스턴스화는 전처리 기와 동일합니다.

파서는 잘못된 형식의 입력 및 파서 확장명에 의한 임의의 구문 추가를 처리한다는 점을 제외하면 C++ 구문 분석과 비슷한 의미를 지닙니다. 실제 미디어 위키 구현은 Perl 5와 매우 흡사합니다. 원래의 구현은 그다지 나쁘지 않습니다. 그러나 모든 것들이 서로 연결되어 있지만 실제로 후속 구현을 수행하는 것은 실제로 복잡합니다. 특히 행동은 종종 창 발되고 문서화되지 않았으며 설계되지 않았습니다.

페이지를 100 % 작업하지 않거나 모든 콘텐츠를 추출 할 필요가없는 경우, 당신을 위해 뭔가를 함께 모을 수 있으며, 알 수 있듯이 그렇게하는 패키지가 있습니다. 실제 정확한 요구 사항을 알기에 부족합니다. 누구나 분석 방법에 대한 답변을 줄 수 있을지 의심 스럽습니다. 모든 페이지에서 작업하고 모든 내용을 올바르게 파싱 할 수 있어야한다면 상당히 큰 팀을두고 일할 때 수년이 걸릴 것입니다. 그렇더라도 여전히 작은 모서리가 많이 남아 있습니다. 당신이 충족되지 않은 요구 사항의 몇 가지를 지적 할 수 있다면

+0

Perfect , 이것은 내가 찾고있는 대답이었다. 감사! – toluju

3

당신이 맞습니다 위키 미디아는 EBNF 잘 정의 된 문법에 도움이되지 않습니다.

당신은 되돌아 오는 Yacc에 있습니다 위키

btyacc을 구문 분석 할 수있는 역 추적 할 도구를보고해야합니다. http://www.siber.com/btyacc/

악센트를 볼 수 있습니다. Yacc보다 낫다 http://accent.compilertools.net/

아니면 당신이 소유해야 할 프롤로그와 롤의 맛을 알아야한다. 당신이하는 것은 무엇이든 당신보다 앞서 흥미로운 학습 기간을 갖습니다.

행운

1

예전에 기본적으로 위키 백과에서 사용하는 위키 텍스트와 같은 인 Boost.Quickbook에 대한 파서를 작성했습니다.

몇 가지 기본 작업을 수행하는 것은 매우 지루한 과정 이었지만 결국에는 EBNF 문법을 작성하는 것이 가능할 것이라고 생각합니다. 관심이 있으시면 my partial parser을 온라인에서 사용할 수 있습니다 (문법은 doc-strings에 포함되어 있습니다).

0

이 답변은 조금 밖에 있지만 텍스트를 렌더링 한 다음 HTML 위임을 구문 분석하여 다른 위키 구성 요소를 알아내는 것은 어떨까요?