Каков наилучший способ разбора разметки Википедии в PHP? - PullRequest
4 голосов
/ 24 декабря 2011

Я пытаюсь разобрать конкретный контент Википедии в структурированном виде. Вот пример страницы:

http://en.wikipedia.org/wiki/Polar_bear

У меня есть некоторый успех. Я могу определить, что эта страница является «специальной» страницей, и я также могу разобрать информацию о Taxobox (справа) в структуру. Пока все хорошо.

Однако я также пытаюсь разобрать текстовые абзацы. Они возвращаются API в формате Wiki или HTML, в настоящее время я работаю с форматом Wiki.

Я могу прочитать эти абзацы, но я бы хотел «почистить» их особым образом, потому что в конечном итоге мне придется отображать его в моем приложении, и оно не имеет смысла в разметке вики. Например, я хотел бы удалить все изображения. Это довольно просто, отфильтровывая блоки [[Image:]]. Тем не менее, есть также блоки, которые я просто не могу удалить, например:

{{конвертировать | 350 | - | 680 | кг | сокр = на}}

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

Моя дилемма заключается в следующем:

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

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

1 Ответ

3 голосов
/ 25 декабря 2011

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

А вики-синтаксис довольно сложный, имеет множество причуд и не имеет формальной спецификации. Это означает, что создание собственного парсера было бы слишком трудоемким, вы должны использовать его в MediaWiki.

Из-за этого, я думаю, вам лучше всего разбирать HTML через MediaWiki API .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...