Je tente d'analyser (en Java) Wikimedia Markup, comme l'a été trouvé sur Wikipedia. Il existe un certain nombre de packages existants pour cette tâche, mais je n'ai trouvé aucun pour répondre à mes besoins particulièrement bien. Le meilleur forfait que j'ai travaillé est le MathClipse BLIKI PARSER , qui fait un travail décent sur la plupart des pages. p>
Cet analyseur est incomplet, cependant, et ne parvient pas à analyser certaines pages ou analyse de manière incorrecte sur les autres. Malheureusement, le code est plutôt en désordre et la correction des problèmes de ce moteur d'analyse est très prononcé et prononcé par erreur. P>
En essayant de trouver un meilleur moteur à analyser, j'ai étudié à l'aide d'un analyseur basé sur EBNF pour cette tâche (spécifiquement antlr). Après quelques tentatives, il semble que cette approche ne soit pas particulièrement bien adaptée à cette tâche, car le marquage Wikimedia est relativement détendu et ne peut donc pas être facilement adapté à une grammaire structurée. p>
Mon expérience avec ANTLR et des analyseurs similaires est toutefois très limitée, ce qui peut donc être mon inexpérience qui cause des problèmes plutôt que de tels analyseurs étant intrinsèquement mal adaptés à cette tâche. Quelqu'un peut-il avoir plus d'expérience sur ces sujets peser ici? P>
@stobor: J'ai mentionné que j'ai examiné divers moteurs d'analyse, y compris ceux retournés par la requête Google. Le meilleur que j'ai trouvé jusqu'à présent est le moteur de Bliki. Le problème est que les problèmes de fixation de tels analyseurs deviennent incroyablement fastidieux, car ils sont tous essentiellement de longues chaînes de conditionnels et d'expressions régulières, ce qui entraîne un code spaghetti. Je cherche quelque chose de plus proche de la méthode de l'analyse de l'EBTNF, car cette méthode est beaucoup plus claire et plus concise, et donc plus facile à comprendre et à évoluer. J'ai vu le maidaywiki que vous avez posté, et il semble confirmer mes soupçons que EBNF hors de la boîte est mal adapté à cette tâche. Ainsi, je cherche un moteur d'analyse claire et compréhensible comme Ebnf, mais également capable de manipuler la syntaxe désordonnée du marquage Wiki. P>
4 Réponses :
Vous êtes correct Wikimedia ne se prête pas aux grammeurs bien définis Ebnf. p>
Vous devrez examiner des outils qui vous conviendront pour pouvoir analyser Wiki P>
BTYACC qui est un puitade de retour en arrière. http://www.siber.com/btyacc/ p>
Vous pouvez regarder l'accent. Mieux que YACC http://accent.compilerTools.net/ p>
ou vous devrez peut-être dépasser et apprendre une idée de Prolog et de vous rouler. Quoi que vous fiez, vous avez une période d'apprentissage intéressante devant vous. P>
bonne chance p>
J'ai une fois essayé d'écrire un analyseur pour Boost.QuickBook , qui est essentiellement la même chose que le texte wiki utilisé par Wikipedia. P>
C'était un processus très fastidieux juste pour obtenir des bases de travail, mais je pense que cela serait éventuellement possible d'écrire la grammaire EBNF pour cela. Si vous êtes intéressé, mon analyseur partiel est disponible en ligne en ligne (La grammaire est intégrée à Doc-Strings). P>
Cette réponse est un peu chère, mais qu'en est-il de rendre le texte, puis de l'analyse du HTML DOM afin de déterminer différents composants de wiki. P>
La contenue MediaWiki analysée dans tout sens générique est assez impossible à l'aide de MediaWiki elle-même. Afin de l'analyser, vous devez être capable d'analyser HTML et CSS (car ils peuvent être intégrés), et gérer l'instanciation complète et l'expansion, ainsi que toute addition d'analyseur, le contenu pertinent peut être utilisé. Cette instanciation de gabarit équivaut à un pré-processeur. P>
Il est dans certains sens similaires à analyser C ++, à l'exception de l'analyseur gérer également des ajouts d'entrée malformée et de syntaxe arbitraire fabriqués par des extensions d'analyseurs. La mise en œuvre réelle MediaWiki ressemble beaucoup à Perl 5, la mise en œuvre initiale n'était pas si mauvaise car tous les cas de bord tombent tout ce qui est lié ensemble, mais en réalité une implémentation ultérieure pour faire la même chose est vraiment compliquée, d'autant plus que la Les comportements sont souvent émergents et sans papiers, non conçus. P>
Si vous n'avez pas besoin de 100% des pages pour travailler ou pour pouvoir extraire tout le contenu, vous pourriez être capable de gonfler quelque chose qui fonctionne pour vous, et comme vous l'avez noté, certains paquets qui font cela. Il manque de connaître vos besoins précis réels, je doute que quiconque puisse vous donner une réponse substantiellement meilleure sur la façon de l'analyser. Si vous devez pouvoir travailler sur chaque page et analyser correctement tout ce que vous feriez mieux d'avoir une équipe assez grande et plusieurs années pour travailler, et même vous avez encore beaucoup de petits cas de bord. P>
Donc en bref, aucun grammer Ebnf n'est pas bien adapté à l'analyse de la balise MediaWiki, mais rien n'est vraiment ... P>
Parfait, c'était la réponse que je cherchais. Merci!
Cela pourrait être agréable si vous pouviez signaler quelques besoins qui ne sont pas rencontrés par les meilleurs hits sur Google.com/Search?q=wikipedia+java+parser afin que nous puissions offrir de meilleures réponses ...
Aussi: mediawiki.org/wiki/markup_spec/bnf