Как вывести простой текст из Википедии - PullRequest
19 голосов
/ 15 декабря 2010

Я искал около 2 месяцев, чтобы найти скрипт, который получает только раздел описания Википедии. (Это для бота, которого я строю, а не для IRC.) То есть, когда я говорю

/wiki bla bla bla

он перейдет на страницу Википедии для bla bla bla, получит следующее и вернет его в чат:

"Bla Bla Bla" - это название песни сделано Джиджи д'Агостино. Он описал эта песня как "кусок, который я написал, думая из всех людей, которые говорят и говорят ничего не сказав ". выдающийся, но бессмысленный вокал образцы взяты из британской группы Песня Стретча "Почему ты это сделал"

Вот самое близкое, что я нашел, но он получает только URL:

import json
import urllib.request, urllib.parse

def google(searchfor):
  query = urllib.parse.urlencode({'q': searchfor})
  url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query

  search_response = urllib.request.urlopen(url)
  search_results = search_response.read().decode("utf8")
  results = json.loads(search_results)
  data = results['responseData']
  hits = data['results']

  if len(hits) > 0:
    return hits[0]['url']
  else:
    return "No results found."

(Python 3.1)

Ответы [ 11 ]

17 голосов
/ 15 декабря 2010

Используйте MediaWiki API , который работает в Википедии.Вам придется выполнить некоторый анализ данных самостоятельно.

Например:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&&titles=Bla%20Bla%20Bla

означает

извлечение (действие = запрос) содержимого (rvprop = content) самой последней версии главной страницы (title = Main% 20Page) в формате JSON (format = json).

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

12 голосов
/ 01 июля 2016

Вот несколько возможных подходов;используйте то, что работает для вас.Все приведенные ниже примеры кода используют requests для HTTP-запросов к API;Вы можете установить requests с pip install requests, если у вас есть Pip.Все они также используют Mediawiki API , а два используют конечную точку query ;перейдите по этим ссылкам, если вам нужна документация.

1.Получите простое текстовое представление либо всей страницы, либо страницы «извлечения» прямо из API с помощью extracts prop

Обратите внимание, что этот подход работает только на сайтах MediaWiki с расширением TextExtracts .В частности, это относится к Википедии, но не к небольшим сайтам Mediawiki, таким как, скажем, http://www.wikia.com/

. Вы хотите перейти по URL-адресу, например

https://en.wikipedia.org/w/api.php?action=query&format=json&titles=Bla_Bla_Bla&prop=extracts&exintro&explaintext

.у нас есть следующие параметры (задокументировано в https://www.mediawiki.org/wiki/Extension:TextExtracts#query+extracts):

  • action=query, format=json и title=Bla_Bla_Bla - все это стандартные параметры MediaWiki API
  • prop=extracts заставляет нас использовать расширение TextExtracts
  • exintro ограничивает ответ на содержимое до того, как заголовок первого раздела
  • explaintext делает извлечение в ответе простым текстом вместо HTML

Затем проанализируйте ответ JSON и извлеките извлечение:

>>> import requests
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'query',
...         'format': 'json',
...         'titles': 'Bla Bla Bla',
...         'prop': 'extracts',
...         'exintro': True,
...         'explaintext': True,
...     }
... ).json()
>>> page = next(iter(response['query']['pages'].values()))
>>> print(page['extract'])
"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

2. Получите полный HTML-код страницы, используя конечную точку parse, проанализируйте ее и извлеките первый абзац

MediaWiki имеет конечную точку parse , которую можно нажать с помощью URL-адреса, например https://en.wikipedia.org/w/api.php?action=parse&page=Bla_Bla_Bla, чтобы получить HTML-код страницы. Затем его можно проанализировать с помощью анализатора HTML, например lxml (установите сначала с pip install lxml), чтобы извлечь первый параграфграфик.

Например:

>>> import requests
>>> from lxml import html
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'parse',
...         'page': 'Bla Bla Bla',
...         'format': 'json',
...     }
... ).json()
>>> raw_html = response['parse']['text']['*']
>>> document = html.document_fromstring(raw_html)
>>> first_p = document.xpath('//p')[0]
>>> intro_text = first_p.text_content()
>>> print(intro_text)
"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

3.Разбор викитекста самостоятельно

Вы можете использовать API query, чтобы получить викитекст страницы, разобрать его с помощью mwparserfromhell (сначала установить его с помощью pip install mwparserfromhell), а затем сократить его до удобочитаемого текста с помощью strip_code.strip_code не работает идеально во время написания (как ясно показано в примере ниже), но, надеюсь, улучшится.

>>> import requests
>>> import mwparserfromhell
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'query',
...         'format': 'json',
...         'titles': 'Bla Bla Bla',
...         'prop': 'revisions',
...         'rvprop': 'content',
...     }
... ).json()
>>> page = next(iter(response['query']['pages'].values()))
>>> wikicode = page['revisions'][0]['*']
>>> parsed_wikicode = mwparserfromhell.parse(wikicode)
>>> print(parsed_wikicode.strip_code())
{{dablink|For Ke$ha's song, see Blah Blah Blah (song). For other uses, see Blah (disambiguation)}}

"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

Background and writing
He described this song as "a piece I wrote thinking of all the people who talk and talk without saying anything". The prominent but nonsensical vocal samples are taken from UK band Stretch's song "Why Did You Do It"''.

Music video
The song also featured a popular music video in the style of La Linea. The music video shows a man with a floating head and no arms walking toward what appears to be a shark that multiplies itself and can change direction. This style was also used in "The Riddle", another song by Gigi D'Agostino, originally from British singer Nik Kershaw.

Chart performance
Chart (1999-00)PeakpositionIreland (IRMA)Search for Irish peaks23

References

External links


Category:1999 singles
Category:Gigi D'Agostino songs
Category:1999 songs
Category:ZYX Music singles
Category:Songs written by Gigi D'Agostino
7 голосов
/ 10 июня 2015

Вы можете получить данные вики в текстовых форматах. Если вам нужно получить доступ ко многим данным заголовка, вы можете получить все вики-данные заголовка за один вызов. Используйте символ (|) для разделения каждого заголовка.

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

Здесь этот вызов API возвращает данные Googles и Yahoos.

explaintext => Возвращать выдержки в виде простого текста вместо ограниченного HTML.

exlimit = max (сейчас его 20); В противном случае вернется только один результат.

exintro => Возврат только содержимого перед первым разделом. Если вам нужны полные данные, просто удалите это.

redirects= Решение проблем с перенаправлением.

7 голосов
/ 15 декабря 2010

Вы можете получить только первый раздел, используя API:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvsection=0&titles=Bla%20Bla%20Bla&rvprop=content

Это даст вам необработанный вики-текст, вам придется работать с шаблонами и разметкой.

получить всю страницу, отображаемую в HTML, который имеет свои плюсы и минусы в том, что касается разбора:

http://en.wikipedia.org/w/api.php?action=parse&prop=text&page=Bla_Bla_Bla

Я не могу найти простой способ получить разбор HTML первого раздела за один вызов, но выэто можно сделать двумя вызовами, передав викитекст, полученный с первого URL, с text= вместо page= во втором URL.

ОБНОВЛЕНИЕ

Извините, я пренебрег "простой текстовой" частью вашего вопроса.Получите ту часть статьи, которую вы хотите, в формате HTML. намного проще вырезать HTML, чем вырезать вики-текст!

4 голосов
/ 28 октября 2014

DBPedia - идеальное решение для этой проблемы.Здесь: http://dbpedia.org/page/Metallica, посмотрите на отлично организованные данные, используя RDF.Здесь можно запросить что угодно в http://dbpedia.org/sparql, используя SPARQL, язык запросов для RDF.Всегда есть способ найти pageID, чтобы получить описательный текст, но в большинстве случаев это должно быть сделано.

Кривая обучения RDF и SPARQL для написания любого полезного кода будет существовать, но это идеальное решение,

Например, запрос для Metallica возвращает таблицу HTML с аннотацией на нескольких разных языках:

<code><table class="sparql" border="1">
  <tr>
    <th>abstract</th>
  </tr>
  <tr>
    <td><pre>"Metallica is an American heavy metal band formed..."@en
"Metallica es una banda de thrash metal estadounidense..."@es
...

SPARQL QUERY:

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbres: <http://dbpedia.org/resource/>

SELECT ?abstract WHERE {
 dbres:Metallica dbpedia-owl:abstract ?abstract.
}

Измените «Metallica» на любое имя ресурса (имя ресурса, как в wikipedia.org/resourcename) длязапросы, относящиеся к аннотации.

1 голос
/ 22 апреля 2015

Я думаю, что лучшим вариантом является использование extracts проп, который предоставляет вам MediaWiki API . Он возвращает вам только некоторые теги (b, i, h #, span, ul, li) и удаляет таблицы, информационные поля, ссылки и т. Д.

http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Bla%20Bla%20Bla&format=xml дает вам что-то очень простое:

<api><query><pages><page pageid="4456737" ns="0" title="Bla Bla Bla"><extract xml:space="preserve">
<p>"<b>Bla Bla Bla</b>" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, <i>L'Amour Toujours</i>. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with <i>L'Amour Toujours (I'll Fly With You)</i> in its US radio version.</p> <p></p> <h2><span id="Background_and_writing">Background and writing</span></h2> <p>He described this song as "a piece I wrote thinking of all the people who talk and talk without saying anything". The prominent but nonsensical vocal samples are taken from UK band Stretch's song <i>"Why Did You Do It"</i>.</p> <h2><span id="Music_video">Music video</span></h2> <p>The song also featured a popular music video in the style of La Linea. The music video shows a man with a floating head and no arms walking toward what appears to be a shark that multiplies itself and can change direction. This style was also used in "The Riddle", another song by Gigi D'Agostino, originally from British singer Nik Kershaw.</p> <h2><span id="Chart_performance">Chart performance</span></h2> <h2><span id="References">References</span></h2> <h2><span id="External_links">External links</span></h2> <ul><li>Full lyrics of this song at MetroLyrics</li> </ul>
</extract></page></pages></query></api>

Затем вы можете запустить его через регулярное выражение, в JavaScript будет что-то вроде этого (возможно, вам придется сделать несколько небольших изменений:

/^.*<\s*extract[^>]*\s*>\s*((?:[^<]*|<\s*\/?\s*[^>hH][^>]*\s*>)*).*<\s*(?:h|H).*$/.exec(data)

Что дает вам (только параграфы, жирный и курсив):

" Bla Bla Bla " - название песни, написанной и записанной итальянским ди-джеем Джиджи Д'Агостино. Он был выпущен в мае 1999 года как третий сингл с альбома L'Amour Toujours . Он достиг № 3 в Австрии и № 15 во Франции. Эту песню также можно услышать в добавленном ремикшированном мэшапе с L'Amour Toujours (Я полетю с тобой) в его радио-версии для США.

0 голосов
/ 16 мая 2018

Первая проверка здесь .

В текстовой разметке MediaWiki много недопустимых синтаксисов. (Ошибки, сделанные пользователями ...) Только MediaWiki может разобрать этот адский текст. Но все же есть несколько альтернатив, чтобы попробовать в ссылке выше. Не идеально, но лучше, чем ничего!

0 голосов
/ 23 марта 2015

Существует также возможность использовать страницы Википедии через API-оболочку, такую ​​как JSONpedia , он работает как в реальном времени (запрашивать текущее представление JSON на вики-странице), так и на основе хранения (запрашивать несколько ранее загруженных страниц).в Elasticsearch и MongoDB).Выходной JSON также включает в себя простой отображаемый текст страницы.

0 голосов
/ 21 декабря 2012

Вы можете попробовать WikiExtractor: http://medialab.di.unipi.it/wiki/Wikipedia_Extractor

Это для Python 2.7 и 3.3 +.

0 голосов
/ 09 июля 2012

"... скрипт, который получает только раздел описания Википедии ..."

Для вашего приложения вы можете что посмотреть на свалках, например: http://dumps.wikimedia.org/enwiki/20120702/

Конкретные файлы, которые вам нужны, это «абстрактные» XML-файлы, например, этот маленький (22,7 МБ):

http://dumps.wikimedia.org/enwiki/20120702/enwiki-20120702-abstract19.xml

В XML есть тег «abstract», который содержит первую часть каждой статьи.

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

...