2009-06-13 5 views
9

Je suis toujours bloqué sur mon problème d'essayer d'analyser des articles de wikipedia. En fait, je souhaite analyser la section infobox des articles de wikipedia, c'est-à-dire que mon application a des références aux pays et sur chaque page de pays je voudrais pouvoir montrer l'infobox qui est sur l'article wikipedia correspondant de ce pays. J'utilise PHP ici - j'apprécierais grandement si quelqu'un a des extraits de code ou des conseils sur ce que je devrais faire ici.Comment saisir uniquement l'infobox analysée d'un article wikipedia?

Merci encore.


EDIT

Eh bien, j'ai une table db avec des noms de pays. Et j'ai un script qui prend un pays et montre ses détails. Je voudrais saisir l'infobox - la boîte bleue avec toutes les images de détails du pays, comme il est de wikipedia et le montrer sur ma page. Je voudrais savoir un moyen très simple et facile de le faire - ou avoir un script qui télécharge simplement les informations de l'infobox à un système distant local auquel je pourrais accéder plus tard. Je veux dire que je suis ouvert aux idées ici - sauf que le résultat final est que je veux voir l'Infobox sur ma page - bien sûr, avec un peu de contenu en lien Wikipédia en bas :)


EDIT

Je pense que j'ai trouvé ce que je cherchais sur http://infochimps.org - ils ont eu beaucoup de jeux de données dans le langage YAML. Je peux utiliser cette information directement comme il est mais je voudrais un moyen de mettre à jour constamment cette information de wikipedia maintenant et puis bien que je crois que les infoboxes changent rarement de pays, sauf si une nation décide de changer leur capitale ou plus.

Répondre

-5

Je suggère d'effectuer un WebRequest contre wikipedia. De là, vous aurez la page et vous pouvez simplement analyser ou interroger les données dont vous avez besoin en utilisant une regex, une exploration de caractères, ou une autre forme que vous connaissez. Essentiellement un grattage d'écran!

EDIT - J'ajouterais à cette réponse que vous pouvez utiliser HtmlAgilityPack pour ceux qui sont en terre C#. Pour PHP, il ressemble à SimpleHtmlDom. Cela dit, il semble que Wikipedia a une API plus que suffisante. Cette question répond probablement mieux à vos besoins:

Is there a Wikipedia API?

+1

C'est un gaspillage de ressources. –

+0

Désolé - je peux voir ce que vous voulez dire par un énorme gaspillage de ressources. Je ne voulais pas gratter la page chaque fois que quelqu'un sur votre site avait besoin de le regarder. Je penserais que vous le gratteriez hors ligne (si vous avez choisi de le faire) et le stockeriez dans une base de données locale sur votre fin d'applications (manière plus efficace pour toutes les parties impliquées).Je ne voulais pas attirer les flammes! : P –

+0

@Andrew - Je suis ouvert à toutes les possibilités - mais je ne suis pas sûr de savoir comment commencer. Y a-t-il un code de travail que je peux regarder pour commencer? – Ali

10

Je vous suggère d'utiliser DBPedia au lieu qui a déjà fait le travail de transformer les données en wikipedia en formes utilisables, raccordables, ouvert.

+0

Cela semble très prometteur - comment puis-je réellement utiliser cela? – Ali

+0

Commencez probablement à http://linkeddata.org/tools pour les pointeurs vers les outils de données liées. Il y a des démos à proximité aussi, si vous voulez juste les données, c'est dans la zone de téléchargement de DBPedia http://wiki.dbpedia.org/Downloads32 – dajobe

+0

btw dbpedia n'est pas vraiment à jour, –

2

Cela dépend de l'itinéraire que vous voulez suivre. Voici quelques possibilités:

  1. Installez MediaWiki avec les modifications appropriées. C'est une application PHP spécialement conçue pour analyser wikitext ...
  2. Téléchargez le et analysez les pièces que vous voulez.
  3. Utilisez le Wikipedia API avec la mise en cache appropriée.

NE PAS vient de frapper la dernière version de la page en direct et refaire l'analyse syntaxique chaque fois que votre application veut la boîte. C'est un énorme gaspillage de ressources pour vous et Wikimedia.

1

si vous voulez analyser un temps tous les articles, wikipedia a tous les articles en format XML disponibles,

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

sinon vous pouvez filtrer gratter des articles individuels par exemple

+1

En fait, je voudrais récupérer seulement les infoboxes de – Ali

2

Il y a un certain nombre de fournisseurs de données sémantiques à partir de laquelle vous pouvez extraire des données structurées au lieu d'essayer d'analyser manuellement:

  • DBPedia - comme déjà mentionné fournit SPARQL endpoint qui pourrait être utilisé pour les requêtes de données. Il existe un certain nombre de bibliothèques disponibles pour plusieurs plates-formes, y compris PHP.

  • Freebase - un autre fournisseur de données commun créatif. L'ensemble de données initial est basé sur des données Wikipedia analysées, mais certaines informations proviennent d'autres sources. L'ensemble de données peut être édité par n'importe qui et, contrairement à Wikipedia, vous pouvez ajouter vos propres données dans votre propre espace de noms en utilisant un schéma personnalisé. Utilise son propre langage de requête appelé MQL, qui est basé sur JSON. Les données ont des liens WebID vers les articles correspodants de Wikipédia. La base libre fournit également le nombre de vidages de données téléchargeables. Freebase a un certain nombre de bibliothèques clientes y compris PHP.

  • Geonames - base de données des emplacements géographiques. A API qui fournit des informations sur le pays et la région pour des coordonnées données, des lieux proches (par exemple, ville, gare, etc.)

  • Opensteetmap - carte construite par la communauté du monde. A API permettant de rechercher des objets par emplacement et par type.

  • API Wikimapia - un autre service de localisation

14

J'utilise l'API wikipedia (de wikimedia). Vous pouvez récupérer des données au format JSON, XML, php natif et autres. Vous devrez ensuite analyser les informations renvoyées pour extraire et formater les informations souhaitées, mais les types de début, d'arrêt et d'informations de la boîte d'informations sont clairs.

Exécutez votre requête pour juste rvsection = 0, comme cette première section vous obtient le matériel avant le premier saut de section, y compris l'infobox. Ensuite, vous devrez analyser le contenu de l'infobox, ce qui ne devrait pas être trop dur. Voir en.wikipedia.org/w/api.php pour la documentation officielle de l'api wikipedia, et www.mediawiki.org/wiki/API pour le manuel.

Run, par exemple, la requête: http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=fortran&rvsection=0

+0

Dommage qu'il semble que les données d'infobox ne soient pas analysées en tête de ligne, mais que vous ayez une chaîne à analyser vous-même – Julian

+0

Oui, très triste: h ttp: //wikimedia.7.x6.nabble.com/template-parameters-td4998633.html – Vanuan

2

Pour charger la section première analysable, ajoutez ce paramètre à la fin de l'URL api

rvparse 

Comme ceci: http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=fortran&rvsection=0&rvparse

Puis analyser le code HTML pour obtenir la table d'infobox (en utilisant Regex)

$url = "http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Niger&rvsection=0&rvparse"; 
    $data = json_decode(file_get_contents($url), true); 
    $data = current($data['query']['pages']); 
    $regex = '#<\s*?table\b[^>]*>(.*)</table\b[^>]*>#s'; 
    $code = preg_match($regex, $data["revisions"][0]['*'], $matches); 
    echo($matches[0]);