Разбор дампа Википедии - PullRequest
       38

Разбор дампа Википедии

15 голосов
/ 12 августа 2010

Например, используя этот дамп Википедии:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=lebron%20james&rvprop=content&redirects=true&format=xmlfm

Существует ли существующая библиотека для Python, которую я могу использовать для создания массива с отображением предметов и значений?

Например:

{height_ft,6},{nationality, American}

Ответы [ 8 ]

11 голосов
/ 12 августа 2010

Похоже, вы действительно хотите иметь возможность анализировать разметку MediaWiki. Для этой цели разработана библиотека python, которая называется mwlib . Вы можете использовать встроенные в Python XML-пакеты для извлечения содержимого страницы из ответа API, а затем передать это содержимое в анализатор mwlib для создания представления объекта, которое вы можете просматривать и анализировать в коде для извлечения необходимой информации. mwlib имеет лицензию BSD.

6 голосов
/ 16 января 2014

Я описал, как сделать это, используя комбинацию pywikibot и mwparserfromhell в этой записи (пока не хватает репутации, чтобы пометить ее как дубликат).

In [1]: import mwparserfromhell

In [2]: import pywikibot

In [3]: enwp = pywikibot.Site('en','wikipedia')

In [4]: page = pywikibot.Page(enwp, 'Waking Life')            

In [5]: wikitext = page.get()               

In [6]: wikicode = mwparserfromhell.parse(wikitext)

In [7]: templates = wikicode.filter_templates()

In [8]: templates?
Type:       list
String Form:[u'{{Use mdy dates|date=September 2012}}', u"{{Infobox film\n| name           = Waking Life\n| im <...> critic film|waking-life|Waking Life}}', u'{{Richard Linklater}}', u'{{DEFAULTSORT:Waking Life}}']
Length:     31
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items

In [10]: templates[:2]
Out[10]: 
[u'{{Use mdy dates|date=September 2012}}',
 u"{{Infobox film\n| name           = Waking Life\n| image          = Waking-Life-Poster.jpg\n| image_size     = 220px\n| alt            =\n| caption        = Theatrical release poster\n| director       = [[Richard Linklater]]\n| producer       = [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West\n| writer         = Richard Linklater\n| starring       = [[Wiley Wiggins]]\n| music          = Glover Gill\n| cinematography = Richard Linklater<br />[[Tommy Pallotta]]\n| editing        = Sandra Adair\n| studio         = [[Thousand Words]]\n| distributor    = [[Fox Searchlight Pictures]]\n| released       = {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}\n| runtime        = 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>\n| country        = United States\n| language       = English\n| budget         =\n| gross          = $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>\n}}"]

In [11]: infobox_film = templates[1]

In [12]: for param in infobox_film.params:
             print param.name, param.value

 name             Waking Life

 image            Waking-Life-Poster.jpg

 image_size       220px

 alt             

 caption          Theatrical release poster

 director         [[Richard Linklater]]

 producer         [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West

 writer           Richard Linklater

 starring         [[Wiley Wiggins]]

 music            Glover Gill

 cinematography   Richard Linklater<br />[[Tommy Pallotta]]

 editing          Sandra Adair

 studio           [[Thousand Words]]

 distributor      [[Fox Searchlight Pictures]]

 released         {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}

 runtime          101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>

 country          United States

 language         English

 budget          

 gross            $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>

Не забывайте, что params тоже являются объектами mwparserfromhell!

6 голосов
/ 12 августа 2010

Только что наткнулся на библиотеку в PyPi, wikidump , которая утверждает, что предоставляет

Инструменты для манипулирования и извлечения данных из дампов Википедии

Я еще не использовал его, так что вы сами можете попробовать ...

3 голосов
/ 12 марта 2015

Я знаю, что вопрос старый, но я искал библиотеку, которая анализирует дамп xml в Википедии. Однако предлагаемые библиотеки, wikidump и mwlib, не предлагают много документации по коду. Затем я нашел Mediwiki-utilities , в котором есть некоторая документация по коду: http://pythonhosted.org/mediawiki-utilities/.

1 голос
/ 26 октября 2016

WikiExtractor сегодня выглядит чистым, простым и эффективным способом сделать это в Python: https://github.com/attardi/wikiextractor

Он предоставляет простой способ разбить дамп Википедии в простую файловую структуру, например:

<doc>...</doc>
<doc>...</doc>
...
<doc>...</doc>

... где каждый документ выглядит так:

<doc id="2" url="http://it.wikipedia.org/wiki/Harmonium">
Harmonium.
L'harmonium è uno strumento musicale azionato con una tastiera, detta manuale.
Sono stati costruiti anche alcuni harmonium con due manuali.
...
</doc>
0 голосов
/ 11 сентября 2010

Вы, вероятно, ищете Pywikipediabot для управления API Википедии.

0 голосов
/ 12 августа 2010

Я бы сказал, посмотрите на использование Beautiful Soup и просто получите страницу Wikipedia в HTML вместо использования API.

Я постараюсь опубликовать пример.

0 голосов
/ 12 августа 2010

Здесь есть некоторая информация о библиотеках Python и XML здесь .

Если вы спрашиваете, существует ли библиотека, специально предназначенная для синтаксического анализа Wiki (pedia) XML и соответствия вашим требованиям,это сомнительноОднако вы можете использовать одну из существующих библиотек для обхода DOM и извлечения нужных вам данных.

Другой вариант - написать таблицу стилей XSLT, которая работает аналогично, и вызвать ее с помощью lxml.Это также позволяет вам вызывать функции Python изнутри XSLT, так что вы получаете лучшее из обоих миров.

...