Где я могу найти хороший анализатор разметки MediaWiki на PHP?

Я бы попробовал немного взломать код MediaWiki, но понял, что в этом не будет необходимости, если я смогу получить независимый парсер.

Кто-нибудь может мне с этим помочь?

Спасибо.


person Aleph Dvorak    schedule 22.06.2009    source источник
comment
Не точная копия, но см. этот вопрос: stackoverflow.com/questions/324758/   -  person Sasha Chedygov    schedule 22.06.2009


Ответы (2)


Бен Хьюз прав. Это очень сложно сделать правильно, особенно если вы хотите анализировать настоящие статьи из крупных вики, таких как сама Википедия, со 100% точностью. Он часто обсуждается в списке рассылки Викитех, и, несмотря на многочисленные попытки, ни один альтернативный парсер не нашел подходящих вариантов.

Во-первых, это не настоящий синтаксический анализатор, поскольку в нем нет такого понятия, как AST (абстрактное синтаксическое дерево). Это конвертер, который специально конвертирует в HTML.

Во-вторых, не попадайтесь в ловушку, думая о викитексте как о языке разметки, который в редких случаях можно расширить с помощью HTML. Вы должны думать об этом как о расширении HTML. Гораздо проще добавить поддержку викитекста в парсер HTML, чем добавить поддержку HTML в парсер викитекста.

Это сводится к тому, что если вам нужен любой другой формат, вам нужно будет преобразовать HTML в этот формат.

В основном утверждается, что только MediaWiki может анализировать викитекст. Но да, парсер тесно интегрирован с остальным кодом. Опытные хакеры MediaWiki плохо реагируют на вопросы об изоляции парсера - я пробовал (-:

Но я все равно пошел дальше и изолировал его. Он еще не завершен и не готов поделиться с кем-либо. Но в основном вы хотите начать с исходного кода MediaWiki, который не установлен или не подключен к базе данных или веб-серверу. Создайте программу-заглушку PHP, включающую анализатор и вызывающую точку входа. Проверьте ошибку, если она не запускается, и создайте фальшивую заглушку для класса, функции или глобального объекта, к которому был осуществлен доступ. Повторяйте, пока не заглушите большинство мест, где анализатор взаимодействует с остальной частью MediaWiki.

Затем проблема возникает в том, чтобы синхронизировать ваш взломанный заглушенный вариант, потому что исходное дерево быстро меняется, а живые вики очень быстро принимают изменения в синтаксическом анализаторе, и ваш вариант должен будет не отставать, если он будет работать в будущем.

Ознакомьтесь с моим запросом функции: Ошибка 25984 – Изолировать анализатор от зависимостей базы данных

person hippietrail    schedule 15.12.2010
comment
по крайней мере, в настоящее время существует некоторая документация... - person mb21; 04.08.2016

На самом деле это невероятно сложный формат для разбора. Вы можете попытаться отделить компонент парсера от медиа-вики (поскольку это тоже php), но это запутанный беспорядок. Я видел несколько частично автономных, которые делают почти разумную работу для очень ограниченного подмножества разметки.

Если вам случится реализовать его или реорганизовать текущую википедию, дайте мне знать, так как это может быть весьма полезно.

person Ben Hughes    schedule 22.06.2009