Comment obtenir un texte brut sur wikipedia
J'ai cherché pendant près de 2 mois maintenant à trouver un script qui récupère le Wikipédia description de l'article. (C'est pour un bot, je suis en train de construire, pas pour l'IRC.) C'est, quand je dis
/wiki bla bla bla
il ira à l' Page Wikipedia pour bla bla bla
obtenez le résultat suivant et le retourner à la salle de chat:
"Bla Bla Bla" est le nom d'une chanson
effectuées par Gigi d'Agostino. Il a décrit
cette chanson comme "un morceau que j'ai écrit en pensant
de tous les gens à qui parler et parler
sans rien dire". L'
proéminent, mais absurde vocal
des échantillons sont prélevés à partir de bande au royaume-UNI
L'étirement de la chanson "Pourquoi Avez-Vous fait Cela"
Ici est le plus proche que j'ai trouvé, mais il ne reçoit que de l'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)
source d'informationauteur Wifi
Vous devez vous connecter pour publier un commentaire.
Utiliser le API MediaWikiqui s'exécute sur Wikipédia. Vous aurez à faire un analyse des données vous-même.
Par exemple:
moyens
Vous voudrez probablement à la recherche de la requête et de l'utilisation de la première suite, pour gérer les erreurs d'orthographe et la comme.
Ici sont un peu différentes approches possibles; utilisez celui qui fonctionne pour vous. Tous mes exemples de code ci-dessous utilise
demande
pour les requêtes HTTP à l'API; vous pouvez installerrequests
avecpip install requests
si vous avez Pip. Ils sont également tous utiliser le API Mediawikiet les deux utilisent le requête point de terminaison; suivez ces liens si vous souhaitez de la documentation.1. Obtenir une représentation en texte brut de l'ensemble de la page ou de la page "extraits" directement à partir de l'API avec les
extracts
propNoter que cette approche ne fonctionne que sur les sites utilisant MediaWiki avec le TextExtracts extension. Il s'agit notamment de Wikipédia, mais ce n'est pas quelques petits Mediawiki des sites comme, disons, http://www.wikia.com/
Vous voulez frapper une URL comme
https://en.wikipedia.org/w/api.php?action=query&format=json&titles=Bla_Bla_Bla&prop=extracts&exintro&explaintext
Rupture que vers le bas, nous avons les paramètres suivants (documenté à https://www.mediawiki.org/wiki/Extension:TextExtracts#query+extraits):
action=query
format=json
ettitle=Bla_Bla_Bla
sont tous les standard de MediaWiki paramètres APIprop=extracts
nous fait utiliser le TextExtracts extensionexintro
les limites de la réponse à un contenu avant le premier titre de sectionexplaintext
rend l'extrait de la réponse est du texte brut au lieu de HTMLEnsuite d'analyser la réponse JSON et de l'extrait de l'extrait:
2. Obtenir le plein code HTML de la page à l'aide de la
parse
point de terminaison, l'analyser, et d'en extraire le premier paragrapheMediaWiki a un
parse
point de terminaison que vous pouvez frapper avec une URL comme https://en.wikipedia.org/w/api.php?action=parse&page=Bla_Bla_Bla pour obtenir le code HTML d'une page. Vous pouvez ensuite analyser avec un analyseur HTML comme lxml (installer d'abord avecpip install lxml
) pour extraire le premier paragraphe.Par exemple:
3. Analyser wikitexte vous-même
Vous pouvez utiliser le
query
API pour obtenir la page du wiki, l'analyser en utilisantmwparserfromhell
(l'installer en premier à l'aide depip install mwparserfromhell
), puis le réduire en bas de l'homme-texte lisible à l'aide destrip_code
.strip_code
ne fonctionne pas parfaitement au moment de l'écriture (comme le montre clairement l'exemple ci-dessous), mais nous espérons améliorer.Vous pouvez simplement aller chercher la première section à l'aide de l'API:
Cela vous donnera raw wiki, vous aurez à traiter avec des modèles et des marques.
Ou vous pouvez chercher de l'ensemble de la page affichée dans le HTML qui a ses propres avantages et inconvénients, aussi loin que l'analyse de:
Je ne peux pas voir un moyen facile d'obtenir HTML analysée de la première section en un seul appel, mais vous pouvez le faire avec deux appels en passant par le wikitexte que vous recevez de la première URL de retour avec
text=
en place de lapage=
dans la deuxième URL.Mise à JOUR
Désolé j'ai oublié le "texte brut" partie de votre question. Obtenir la partie de l'article que vous voulez au format HTML. C'est beaucoup plus facile de bande de HTML que de la bande wikitexte!
Vous pouvez obtenir wiki données dans les formats de Texte. Si vous avez besoin d'accéder à de nombreuses titre d'information, vous pouvez obtenir tous les titres du wiki de données en un seul appel. Utiliser caractère pipe ( | ) pour séparer chaque titres.
http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Yahoo|Google&redirects=
Ici cet appel d'api retourner Googles et Yahoos de données.
explaintext
=> Retour des extraits en texte brut limité HTML.exlimit = max
(aujourd'hui ses 20); Sinon un seul résultat sera de retour.exintro
=> Retour uniquement le contenu avant de la première section. Si vous voulez plein de données, il suffit de retirer cette.redirects=
Résoudre rediriger les questions.DBPedia est la solution parfaite à ce problème. Ici: http://dbpedia.org/page/Metallicaregardez la parfaitement organisée de données à l'aide de RDF. On peut requête pour quoi que ce soit ici, à http://dbpedia.org/sparql à l'aide de SPARQL, le langage de requête pour le RDF. Il y a toujours moyen de trouver le pageID de manière à obtenir un texte descriptif, mais cela devrait le faire pour la plupart.
Il y aura une courbe d'apprentissage pour RDF et SPARQL pour écrire tout le code, mais c'est la solution parfaite.
Par exemple, l'exécution de la requête pour Metallica renvoie un tableau HTML avec le résumé en plusieurs langues différentes:
REQUÊTE SPARQL :
Changement "Metallica" à n'importe quelle ressource de nom de (nom de la ressource que dans wikipedia.org/resourcename) pour les requêtes relatives à l'abstrait.
Je pense que la meilleure option est d'utiliser le
extracts
prop qui vous fournit des API MediaWiki. Il vous renvoie seulement certaines balises (b, i, h#, span, ul, li) et supprime les tables, les infoboxes, références, etc.http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Bla%20Bla%20Bla&format=xml
vous donne quelque chose de très simple:
Vous pouvez ensuite exécuter à travers les expressions régulières en JavaScript serait quelque chose comme ceci (peut-être que vous avez à faire quelques modifications mineures:
Qui vous donne (seulement paragrphs, en gras et en italique):
"Bla Bla Bla" est le titre d'une chanson écrite et enregistrée par l'italien DJ Gigi d'Agostino. Il a été publié en Mai 1999 en tant que troisième single de l'album, L'Amour Toujours. Il a atteint le numéro 3 en Autriche et au nombre de 15 en France. Cette chanson peut aussi être entendu dans une ajouté remixé mashup avec L Amour Toujours (je vais Voler Avec Vous) dans sa version radio.
"...un script qui récupère le Wikipédia description de l'article..."
Pour votre application, vous pouvez rechercher sur les décharges, par exemple: http://dumps.wikimedia.org/enwiki/20120702/
Les fichiers en particulier, vous avez besoin de "abstrait" des fichiers XML, par exemple, ce petit (22.7 MO):
http://dumps.wikimedia.org/enwiki/20120702/enwiki-20120702-abstract19.xml
Le XML a une balise appelée "abstrait" qui contient la première partie de chaque article.
Sinon wikipedia2text utilise, par exemple, w3m de téléchargement de la page, avec des modèles élargie et mise en forme de texte. À partir de ce que vous pourriez être en mesure de choisir le résumé via une expression régulière.
Vous pouvez essayer WikiExtractor: http://medialab.di.unipi.it/wiki/Wikipedia_Extractor
C'est pour Python 2.7 et 3.3+.
Vérifiez d'abord ici.
Il y a beaucoup de non valide la syntaxe de MediaWiki de balisage de texte.
(Les erreurs commises par les utilisateurs...)
Seulement MediaWiki peut analyser cette infernale texte.
Mais encore il ya quelques solutions de rechange à l'essai dans le lien ci-dessus.
Pas parfait, mais mieux que rien!
Vous pouvez essayer le BeautifulSoup analyse HTML de la bibliothèque pour python,mais vous aurez à écrire un simple analyseur.
Il y a aussi la possibilité de consommer les pages de Wikipédia par le biais d'une API wrapper comme JSONpediail travaille à la fois en direct (demandez l'actuelle représentation JSON d'une page Wiki) et le stockage (requête de plusieurs pages auparavant ingéré dans Elasticsearch et MongoDB).
La sortie JSON également inclure le rendu de texte de la page.