Pergunta

Eu estou tentando analisar (em Java) Wikimedia marcação como encontrado na Wikipedia. Há uma série de pacotes existente lá fora, para esta tarefa, mas eu não encontrei nenhuma para caber minhas necessidades muito bem. O melhor pacote Eu tenho trabalhado com é o Mathclipse Bliki analisador , que faz um trabalho decente na maioria Páginas.

Este analisador é incompleta, no entanto, e não para analisar certas páginas ou analisa incorretamente sobre os outros. Infelizmente, o código é bastante confuso e fixando assim os problemas neste mecanismo de análise é muito demorado e propenso a erros.

Na tentativa de encontrar um melhor mecanismo de análise que têm investigado utilizando um analisador baseado em EBNF para esta tarefa (especificamente ANTLR). Depois de algumas tentativas no entanto, parece que esta abordagem não é particularmente adequado para esta tarefa, como a marcação Wikimedia é relativamente relaxado e, portanto, não pode ser facilmente caber em uma gramática estruturado.

A minha experiência com ANTLR e analisadores semelhantes é muito limitado no entanto, por isso pode ser minha inexperiência que está causando problemas ao invés de tais analisadores sendo inerentemente mal adequado para esta tarefa. Pode alguém com mais experiência sobre estes temas pesar aqui?

@Stobor: Eu mencionei que eu olhei para vários motores de análise, incluindo os retornados pela consulta google. O melhor que eu encontrei até agora é o motor Bliki. O problema é que a fixação problemas com tais analisadores se torna incrivelmente entediante, porque eles são todos essencialmente longas cadeias de condicionais e expressões regulares, resultando em código espaguete. Estou à procura de algo mais parecido com o método EBNF de análise, como o método é muito mais clara e concisa, e, portanto, mais fácil de entender e evoluir. Eu vi o link mediawiki você postou, e parece confirmar as minhas suspeitas de que EBNF fora da caixa é pouco adequada para esta tarefa. Assim, eu estou procurando um motor de análise que seja clara e compreensível como EBNF, mas também capaz de lidar com a sintaxe confusa de wiki markup.

Foi útil?

Solução

conteúdo de análise mediawiki em qualquer sentido genérico é bastante curta impossível usando MediaWiki si. A fim de analisá-lo você precisa ser capaz totalmente analisar HTML e CSS (uma vez que pode ser incorporado), e lidar com instanciação completo modelo e expansão, bem como qualquer adição analisador o conteúdo relevent pode ter sido usando. Essa instanciação de modelo é equivalente a um pré-processador.

É em alguns sentidos similares a analisar C ++, excepto o analisador também manipular a entrada malformados e adições de sintaxe arbitrárias realizadas por extensões do analisador. A implementação mediawiki real é muito parecido com Perl 5, a implementação original não foi tão ruim, porque todos os casos de ponta apenas cair no entanto as coisas estão ligadas entre si, mas na verdade recebendo qualquer posterior implementação para fazer a mesma coisa é realmente complicado, especialmente desde que o comportamentos são muitas vezes emergente e em situação irregular, que não foi concebido.

Se você não precisa de 100% das páginas para o trabalho ou para ser capaz de extrair todo o conteúdo que você pode ser capaz de remendar algo juntos que funciona para você, e como você ter notado há alguns pacotes que fazem isso. Curto de saber suas necessidades específicas reais eu duvido que alguém pode dar-lhe um substancialmente melhor resposta sobre como analisá-lo. Se você precisa ser capaz de trabalhar em todas as páginas e corretamente parse tudo é melhor ter um bastante grande equipe e vários anos de trabalho, e mesmo assim você ainda tem muitos casos pequena ponta.

Assim, em breve, não uma gramática EBNF não é bem adequado para analisar MediaWiki marcação, mas nada é realmente ...

Outras dicas

Você está correto não Wikimedia se presta a EBNF grammers bem definidos.

Você vai ter que olhar para as ferramentas que irá recuar para ser capaz de analisar Wiki

btyacc que é um yacc retrocesso. http://www.siber.com/btyacc/

Você pode olhar para Accent. Melhor do que Yacc http://accent.compilertools.net/

Ou você pode ter à avaria e aprender um pouco sabor do prólogo and roll você possui. Faça o que fizer você tem um período de aprendizagem interessante pela frente.

Boa sorte

Uma vez eu tentei escrever um analisador para Boost.Quickbook , que é essencialmente o mesmo que o wiki-texto usado pela Wikipedia.

Foi um processo muito tedioso apenas para obter algumas noções básicas de trabalho, mas acho que acabaria por ser possível escrever EBNF gramática para ele. Se você estiver interessado, meu analisador parcial está disponível online (a gramática é incorporado em doc-cordas).

Esta resposta é um pouco lá fora, mas o que sobre o processamento de texto e, em seguida, analisar o Dom HTML, a fim de descobrir diferentes componentes do wiki.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top