Question

Je cherche à analyser (en Java) balisage Wikimedia trouvés sur Wikipedia. Il y a un certain nombre de paquets existants là-bas pour cette tâche, mais je n'ai trouvé aucune pour répondre à mes besoins particulièrement bien. Le meilleur paquet que je travaille avec le Mathclipse Bliki analyseur , qui fait un travail décent sur la plupart pages.

Cet analyseur est incomplet, cependant, et ne parvient pas à analyser certaines pages ou traite de façon incorrecte sur les autres. Malheureusement, le code est assez désordonné et ainsi régler les problèmes dans ce moteur d'analyse est très coûteuse en temps et sujette aux erreurs.

En essayant de trouver un meilleur moteur d'analyse que je l'ai étudié à l'aide d'un analyseur à base EBNF pour cette tâche (en particulier ANTLR). Après quelques tentatives mais il semble que cette approche ne soit pas particulièrement bien adapté à cette tâche, comme le balisage Wikimedia est relativement détendue et ne peut pas être facilement adapter ainsi dans une grammaire structurée.

Mon expérience avec ANTLR et parseurs similaires est très limité cependant, il peut être mon manque d'expérience qui est à l'origine des problèmes plutôt que de tels parseurs étant par nature mal adaptés à cette tâche. Quelqu'un peut-il avec plus d'expérience sur ces sujets pèsent ici?

@Stobor: Je l'ai mentionné que je l'ai regardé différents moteurs d'analyse, y compris ceux renvoyés par la requête google. Le meilleur que j'ai trouvé est jusqu'à présent le moteur Bliki. Le problème est que la résolution des problèmes avec ces parseurs devient incroyablement fastidieux, car ils sont essentiellement de longues chaînes de conditionals et des expressions régulières, résultant dans le code spaghetti. Je cherche quelque chose de plus proche de la méthode EBNF de l'analyse syntaxique, comme cette méthode est beaucoup plus claire et plus concise, et donc plus facile à comprendre et à évoluer. J'ai vu les mediawiki vous lien affiché, et il semble confirmer mes soupçons que EBNF de la boîte est mal adaptée à cette tâche. Ainsi, je suis à la recherche d'un moteur d'analyse qui est claire et compréhensible comme EBNF, mais aussi capable de gérer la syntaxe désordonnée de balisage wiki.

Était-ce utile?

La solution

Parsing contenu mediawiki dans un sens générique est à peu près impossible à court en utilisant lui-même mediawiki. Pour l'analyser, vous devez être en mesure d'analyser entièrement HTML et CSS (car ils peuvent être intégrés), et la poignée complète instanciation et d'expansion, ainsi que tout ajout d'analyseur la teneur en relevent peut avoir été utilisé. Ce modèle instanciation équivaut à un préprocesseur.

Il est dans un certain sens de l'analyse syntaxique C similiar ++, sauf l'analyseur également en charge l'entrée malformé et des additions de syntaxe arbitraires faites par des extensions de l'analyseur. La mise en œuvre de mediawiki réelle est beaucoup comme Perl 5, la mise en œuvre originale était pas si mal parce que tous les cas de pointe tombent juste de sortir mais les choses sont reliées entre elles, mais en fait d'obtenir une mise en œuvre à la suite de faire la même chose est vraiment compliqué, d'autant plus que la les comportements sont souvent émergent et sans papier, ne sont pas conçus.

Si vous n'avez pas besoin de 100% de pages pour travailler ou être en mesure d'extraire tout le contenu que vous pourriez être en mesure de bricoler quelque chose qui fonctionne pour vous et que vous avez noté il y a quelques paquets qui le font. Court de connaître vos besoins précis réels je doute que quelqu'un peut vous donner une réponse nettement mieux sur la façon de l'analyser. Si vous devez être en mesure de travailler sur chaque page et analyser correctement tout ce que vous mieux avoir une équipe assez grande et plusieurs années à travailler, et même alors vous avez encore beaucoup de petits cas limites.

Donc en bref, pas un Grammer EBNF ne convient pas à l'analyse syntaxique balisage mediawiki, mais rien est vraiment ...

Autres conseils

Vous avez raison Wikimedia ne se prête pas à EBNF bien définis programmateurs.

Vous devrez examiner les outils qui Backtrack pour pouvoir analyser Wiki

btyacc qui est un yacc de retours en arrière. http://www.siber.com/btyacc/

Vous pouvez regarder Accent. Mieux que Yacc http://accent.compilertools.net/

Ou vous pouvez avoir à la dégradation et apprendre un peu de saveur de Prolog et rouler que vous possédez. Quoi que vous fassiez devant vous que vous avez une période d'apprentissage intéressant.

Bonne chance

J'ai essayé une fois d'écrire un analyseur pour Boost.Quickbook , qui est essentiellement le même que le texte wiki utilisé par Wikipedia.

Ce fut un processus très fastidieux juste pour obtenir quelques notions de base de travail, mais je pense qu'il serait éventuellement possible d'écrire la grammaire EBNF pour elle. Si vous êtes intéressé, mon analyseur partiel est disponible en ligne (la grammaire est intégrée dans les chaînes de doc-).

Cette réponse est un peu là-bas, mais qu'en rendant le texte, puis analyser le code HTML Dom afin de comprendre les différents composants du wiki.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top