2009-10-26 7 views
47

Я довольно новичок в MediaWiki, и теперь у меня есть проблема. У меня есть заголовок какой-либо страницы Wiki, и я хочу получить только текст указанной страницы, используя api.php, но все, что я нашел в API, - это способ получить содержимое Wiki на странице (с разметкой wiki). Я использовал этот HTTP-запрос ...Получить текст со страницы mediawiki через API

/api.php?action=query&prop=revisions&rvlimit=1&rvprop=content&format=xml&titles=test 

Но мне нужен только текстовый контент без разметки Wiki. Возможно ли это с помощью API MediaWiki?

ответ

4

Я не думаю, что это возможно с помощью API чтобы получить только текст.

Что сработало для меня, так это запросить HTML-страницу (используя обычный URL-адрес, который будет использоваться в браузере) и вычеркнуть HTML-теги под содержимым div.

EDIT:

У меня были хорошие результаты, используя HTML Parser для Java. В нем есть примеры того, как вырезать HTML-теги под данным DIV.

+0

Я сделал то же самое, у меня есть Java приложение, которое должно Получать текстовое содержимое страницы wiki. Когда я использую api и получаю страницу wikisyntax, она работает очень быстро, но мне нужен чистый текст, я попытался запросить HTML-страницу и вычеркнуть теги HTML, но она работает медленно, поэтому я спросил об этой функции в wiki API , Или, может быть, теперь у вас есть хороший wikisyntax-прозрачный текстовый конвертер для Java, а затем я могу преобразовать его прямо в Java? –

+2

Реальная проблема с языком Википедии заключается в том, что она полностью заполнена. Если вы внимательно посмотрите на код страницы, вы увидите всевозможные пользовательские функции. Определения этих функций также должны быть взяты, а затем интерпретированы, что может расширить до еще большего числа функций. Вот почему я вернулся к анализу html, который содержит полный, визуализированный текст. –

+2

Викитекс MediaWiki не совсем полный Turing, так как разработчики смело отбивались от требований редакторов для создания циклов. Но вы правы, что для получения простого текста из MediaWiki вам нужно получить HTML-код, а затем удалить его. Вы можете использовать этот инструмент 'html2txt.pl', который я сделал в Perl для этой работы, или преобразовать его на ваш любимый язык: https://gist.github.com/751910 – hippietrail

0

Страницы Wiki без каких-либо символов форматирования на самом деле не имеют большого смысла во многих случаях.

Вы можете вычеркнуть форматирование самостоятельно, если хотите, но вы сломаете некоторые вещи в процессе.

(Если вы создаете что-то вроде поисковой системы, в этом случае вам нужно только части текста, и может полностью игнорировать форматирование символов)

60

Используйте action=parse, чтобы получить HTML:

/api.php?action=parse&page=test

Один из способов, чтобы получить текст из HTML будет загрузить его в браузер и ходить узлы, глядя только для текстовых узлов, используя JavaScript.

+4

'action = parse' также может возвращать JSON, добавив' format = json'. – scai

33

Расширение TextExtracts АФИ делает о том, что вы просите. Используйте prop=extracts, чтобы получить очищенный ответ. Например, this link will give you cleaned up text for the Stack Overflow article. Также приятно, что он по-прежнему включает в себя теги секций, поэтому вы можете идентифицировать отдельные разделы статьи.

Просто включить видимую ссылку в моем ответе, выше ссылка выглядит следующим образом:

/api.php?format=xml&action=query&prop=extracts&titles=Stack%20Overflow&redirects=true 

Edit: Как уже упоминалось Амр, TextExtracts является расширение в MediaWiki, так что не обязательно будет доступен для каждого сайта MediaWiki.

+1

Отлично! Спасибо! –

+5

TextExtracts является расширением для MediaWiki. Он доступен для Википедии, но не для каждой установки MediaWiki. https://www.mediawiki.org/wiki/Extension:TextExtracts – Amr

23

Добавление ?action=raw в конце страницы MediaWiki возвращает последний контент в формате необработанного текста. Например: - https://en.wikipedia.org/wiki/Main_Page?action=raw

+0

Я пробовал это на странице, не на wikipedia, и это не сработало. Требуется ли расширение? –

+0

Кажется, что это работает только для английской Википедии - см. [Пример] (https://de.wikipedia.org/wiki/Eurofighter_Typhoon%26action%3Draw) –

+1

@MartinThoma Если вы измените '% 26action% 3Draw' на'? Action = raw', он работает. – KST

20

Вы можете получить данные вики в текстовом формате из API с помощью параметра explaintext. Кроме того, если вам нужно получить доступ ко многим сведениям о титрах, вы можете получить все данные вики-титры за один раз. Используйте символ трубы | для разделения каждого заголовка.Например, этот API вызов будет возвращать данные из обоих "Google" и "Yahoo" страницы:

http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Yahoo|Google&redirects= 

Параметры:

  • explaintext: Возвращение экстракты в виде обычного текста, а не ограниченного HTML.
  • exlimit=max: Верните несколько результатов. Максимум в настоящее время 20.
  • exintro: Верните только содержимое перед первым разделом. Если вам нужны полные данные, просто удалите это.
  • redirects=: Решите проблемы с перенаправлением.
+1

Это просто отлично. Спасибо – Darkbluesea

+0

Это даст вам только первый раздел, а не текст всей статьи –

-4

Вы можете сделать одну вещь после внесения содержимого на свою страницу - вы можете использовать функцию PHP strip_tags(), чтобы удалить теги HTML.

0

пользователей Python, приезжающие на этот вопрос может быть заинтересован в модуле wikipedia (docs):

import wikpedia 
wikipedia.set_lang('de') 
page = wikipedia.page('Wikipedia') 
print(page.content) 

Каждое форматирование, для секций (==), за исключением полосатая прочь.

 Смежные вопросы

  • Нет связанных вопросов^_^