2009-06-13 6 views
9

Sono ancora bloccato sul mio problema di cercare di analizzare gli articoli da Wikipedia. In realtà, desidero analizzare la sezione degli articoli di infobox da wikipedia, la mia applicazione ha riferimenti a paesi e in ogni pagina di paese vorrei poter mostrare l'infobox che è sull'articolo wikipedia corrispondente di quel paese. Sto usando php qui - sarei molto grato se qualcuno avesse qualche frammento di codice o consigli su cosa dovrei fare qui.Come faccio ad afferrare solo l'Infobox analizzato di un articolo di Wikipedia?

Grazie ancora.


EDIT

Beh io ho una tabella di db con i nomi dei paesi. E ho una sceneggiatura che prende un paese e mostra i suoi dettagli. Mi piacerebbe prendere la infobox - la scatola blu con tutte le immagini dei dettagli del paese, ecc. Come è da wikipedia e mostrarla sulla mia pagina. Mi piacerebbe conoscere un modo semplice e facile per farlo - o avere uno script che scarica semplicemente le informazioni della infobox su un sistema remoto locale a cui potrei accedere in seguito. Voglio dire, io sono aperto a idee qui - tranne che il risultato finale che voglio è vedere l'infobox sulla mia pagina -, naturalmente, con un po 'di contenuti con un link Wikipedia in fondo :)


EDIT

Penso di aver trovato quello che stavo cercando su http://infochimps.org - hanno ottenuto un sacco di set di dati in credo che il linguaggio YAML. Posso usare queste informazioni direttamente così com'è, ma avrei bisogno di un modo per aggiornare costantemente queste informazioni da wikipedia di tanto in tanto, anche se credo che le infobox raramente cambino in particolare nei paesi, a meno che qualche nazione decida di cambiare la propria capitale o poco più.

risposta

-5

Suggerisco di eseguire un WebRequest contro wikipedia. Da lì avrai la pagina e potrai semplicemente analizzare o interrogare i dati di cui hai bisogno utilizzando una regex, una scansione dei caratteri o qualche altro modulo con cui hai familiarità. In sostanza uno schermo raschiato!

MODIFICA - Vorrei aggiungere a questa risposta che è possibile utilizzare HtmlAgilityPack per quelli in C# land. Per PHP sembra SimpleHtmlDom. Detto questo, sembra che Wikipedia abbia un'API più che adeguata. Questa domanda probabilmente risponde alle vostre esigenze meglio:

Is there a Wikipedia API?

+1

Questo è uno spreco di risorse. –

+0

Scusa - Vedo cosa intendi con un enorme spreco di risorse. Non volevo grattare la pagina ogni volta che qualcuno sul tuo sito aveva bisogno di guardarlo. Penserei che lo si scriverà offline (se si sceglie di farlo) e lo memorizzeremo in un DB locale sulle applicazioni (in modo più efficiente per tutte le parti coinvolte).Non intendevo attirare le fiamme! : P –

+0

@Andrew - Sono aperto a tutte le possibilità - tuttavia non sono sicuro di come iniziare. C'è qualche tipo di codice funzionante che posso guardare per iniziare su questo? – Ali

10

vi suggerisco di utilizzare DBPedia invece che ha già fatto il lavoro di trasformare i dati in wikipedia in, collegabile, forme aperte utilizzabili.

+0

Questo sembra molto promettente, ma come posso usarlo? – Ali

+0

Probabilmente iniziare da http://linkeddata.org/tools per i puntatori agli strumenti di dati collegati. Ci sono anche delle demo nelle vicinanze Se vuoi solo i dati, è nell'area download di DBPedia http://wiki.dbpedia.org/Downloads32 – dajobe

+0

btw dbpedia non è proprio così aggiornato –

2

Dipende da quale percorso si desidera andare. Ecco alcune possibilità:

  1. Installare MediaWiki con le modifiche appropriate . Dopo tutto è un'app PHP progettata appositamente per analizzare
  2. Scarica l'static HTML version e analizzare le parti che si desidera.
  3. Utilizzare il Wikipedia API con memorizzazione nella cache appropriata.

NON appena colpito l'ultima versione della pagina dal vivo e rifare le analisi ogni volta che la vostra applicazione vuole la casella. Questo è un enorme spreco di risorse sia per te che per Wikimedia.

1

se si vuole analizzare una sola volta tutti gli articoli, Wikipedia ha tutti gli articoli in formato XML disponibili,

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

altrimenti si può schermare raschiare singoli articoli per esempio

+1

In realtà mi piacerebbe prendere solo le infobox da un elenco selezionato di articoli – Ali

2

C'è un certo numero di fornitori di dati semantici da cui è possibile estrarre i dati strutturati invece di cercare di analizzare manualmente:

  • DBpedia - come già accennato fornisce SPARQL endpoint che potrebbe essere utilizzato per le query di dati. Sono disponibili numerose librerie per piattaforme multiple, incluso PHP.

  • Freebase - un altro fornitore di dati commons creative. Il set di dati iniziale si basa su dati di Wikipedia, ma ci sono alcune informazioni prese da altre fonti. Il set di dati potrebbe essere modificato da chiunque e, a differenza di Wikipedia, è possibile aggiungere i propri dati nel proprio spazio dei nomi utilizzando uno schema definito personalizzato. Utilizza il proprio linguaggio di query chiamato MQL, che è basato su JSON. I dati contengono collegamenti WebID per correggere gli articoli di Wikipedia. La base gratuita fornisce anche il numero di discariche di dati scaricabili. Freebase ha un numero di librerie client incluso PHP.

  • Geonames - database di posizioni geografiche. Ha API che fornisce informazioni su Paese e Regione per coordinate date, località vicine (ad esempio città, stazione ferroviaria, ecc.)

  • Opensteetmap - mappa del mondo costruita dalla comunità. Dispone di API che consentono di eseguire query per gli oggetti in base alla posizione e al tipo.

  • Wikimapia API - un altro servizio di localizzazione

14

userei il wikipedia (Wikimedia) API. È possibile recuperare i dati in formato JSON, XML, formato nativo di php e altri. Dovrai quindi analizzare le informazioni restituite per estrarre e formattare le informazioni desiderate, ma la casella informativa inizia, termina e i tipi di informazioni sono chiari.

Esegui la query solo per rvsection = 0, in quanto questa prima sezione ti fornisce il materiale prima della prima interruzione di sezione, inclusa la finestra delle informazioni. Quindi dovrai analizzare il contenuto della casella informativa, che non dovrebbe essere troppo difficile. Vedi en.wikipedia.org/w/api.php per la documentazione formale di wikipedia api, e www.mediawiki.org/wiki/API per il manuale.

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

+0

Peccato che i dati della casella informativa non vengano analizzati nell'head-end. Devi solo ottenere una stringa che devi analizzare personalmente – Julian

+0

Sì, molto triste: h TTP: //wikimedia.7.x6.nabble.com/template-parameters-td4998633.html – Vanuan

2

Per caricare la prima sezione analizzata, è sufficiente aggiungere questo parametro al fine dell'URL api

rvparse 

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

Quindi analizzare il codice html per ottenere la tabella delle informazioni (utilizzando 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]);