2009-06-13 9 views
9

Todavía estoy atascado en mi problema de tratar de analizar artículos de wikipedia. En realidad, deseo analizar la sección infobox de los artículos de la wikipedia, es decir, mi aplicación tiene referencias a países y en cada página de país me gustaría poder mostrar la infobox que está en el artículo correspondiente de wikipedia de ese país. Estoy usando php aquí. Le agradecería enormemente si alguien tiene fragmentos de código o consejos sobre qué debería hacer aquí.¿Cómo puedo obtener solo el Infobox analizado de un artículo de wikipedia?

Gracias de nuevo.


EDITAR

Bueno, tengo una tabla db con los nombres de los países. Y tengo un script que toma un país y muestra sus detalles. Me gustaría tomar el cuadro de información: el cuadro azul con todas las imágenes de detalles del país, etc., tal como está en wikipedia y mostrarlo en mi página. Me gustaría conocer una manera realmente simple y fácil de hacerlo, o tener un script que simplemente descargue la información del cuadro de información a un sistema remoto local al que podría acceder más tarde. Quiero decir que estoy abierto a las ideas aquí - excepto que el resultado final quiero es ver la caja de información en mi página de - por supuesto con un poco de contenido de Wikipedia enlace en la parte inferior :)


EDITAR

Creo que encontré lo que estaba buscando en http://infochimps.org - obtuvieron montones de conjuntos de datos en el lenguaje YAML. Puedo utilizar esta información como está, pero necesitaría una forma de actualizar constantemente esta información de wikipedia de vez en cuando, aunque creo que las carpetas de información rara vez cambian, especialmente en algunos países, a menos que alguna nación decida cambiar su ciudad capital.

Respuesta

-5

Sugiero realizar una WebRequest contra wikipedia. A partir de ahí, tendrá la página y podrá analizar o consultar los datos que necesite utilizando una expresión regular, rastreo de caracteres u otra forma que le resulte familiar. ¡Esencialmente un raspado de pantalla!

EDITAR - Añadiría a esta respuesta que puede usar HtmlAgilityPack para aquellos en C# land. Para PHP, parece SimpleHtmlDom. Habiendo dicho eso, parece que Wikipedia tiene una API más que adecuada. Esta pregunta probablemente responde mejor a sus necesidades:

Is there a Wikipedia API?

+1

Esto es un desperdicio de recursos. –

+0

Lo siento, puedo ver lo que quiere decir con un gran desperdicio de recursos. No quise raspar la página cada vez que alguien en su sitio necesitaba verla. Creo que lo rascarías fuera de línea (si así lo deseas) y lo almacenarías en un DB local al final de tu aplicación (mucho más eficiente para todas las partes involucradas).¡No fue para atraer llamas! : P –

+0

@Andrew - Estoy abierto a todas las posibilidades, sin embargo, no estoy seguro de cómo comenzar. ¿Hay algún tipo de código de trabajo que pueda ver para comenzar con esto? – Ali

10

le sugiero que utilice DBPedia vez que ya ha hecho el trabajo de convertir los datos en Wikipedia en formas utilizables, vinculables y abiertas.

+0

Esto parece muy prometedor, ¿cómo lo uso en realidad? – Ali

+0

Probablemente empiece en http://linkeddata.org/tools para los punteros a las herramientas de datos vinculados. También hay demos cerca. Si solo desea los datos, está en el área de descarga de DBPedia http://wiki.dbpedia.org/Downloads32 – dajobe

+0

btw dbpedia no es realmente tan actualizado. –

2

Depende de qué ruta desee ir. Aquí hay algunas posibilidades:

  1. Instale MediaWiki con las modificaciones apropiadas de . Es, después de todo, una aplicación PHP diseñada precisamente para analizar wikitext ...
  2. Descargue el static HTML version, y analice las piezas que desea.
  3. Utilice Wikipedia API con el almacenamiento en caché apropiado.

NO acaba de golpear la última versión de la página en vivo y rehacer el análisis cada vez que su aplicación quiere la caja. Este es un gran desperdicio de recursos tanto para ti como para Wikimedia.

1

si desea analizar una vez todos los artículos, Wikipedia tiene todos los artículos en formato XML disponibles,

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

de lo contrario se puede pantalla raspar artículos individuales, por ejemplo,

+1

En realidad, me gustaría obtener solo las infoboxes de una lista de selección de artículos. – Ali

2

Hay un número de proveedores de datos semánticos a partir del cual se puede extraer datos estructurados en lugar de intentar analizar de forma manual:

  • DBpedia - como ya se ha mencionado proporciona SPARQL endpoint que podría ser el uso de las consultas de datos. Hay una serie de bibliotecas disponibles para múltiples plataformas, incluido PHP.

  • Freebase - otro proveedor de datos de creative commons. El conjunto de datos inicial se basa en datos de Wikipedia analizados, pero se ha tomado alguna información de otras fuentes. El conjunto de datos podría ser editado por cualquier persona y, a diferencia de Wikipedia, puede agregar sus propios datos a su propio espacio de nombres utilizando un esquema definido personalizado. Utiliza su propio lenguaje de consulta llamado MQL, que se basa en JSON. Los datos tienen enlaces de WebID a los artículos de Wikipedia correspondientes. La base gratuita también proporciona la cantidad de vuelcos de datos descargables. Freebase tiene una cantidad de bibliotecas cliente que incluye PHP.

  • Geonames - base de datos de ubicaciones geográficas. Tiene API que proporciona información de país y región para coordenadas determinadas, ubicaciones cercanas (por ejemplo, ciudad, estación de ferrocarril, etc.)

  • Opensteetmap: mapa del mundo creado por la comunidad. Tiene API que permite consultar objetos por ubicación y tipo.

  • Wikimapia API - otro servicio de localización

14

que haría uso de la API de Wikipedia (Wikimedia). Puede recuperar datos en formato JSON, XML, php nativo y otros. Seguirá necesitando analizar la información devuelta para extraer y formatear la información que desea, pero los tipos de información de inicio, detención e información son claros.

Ejecute su consulta solo para rvsection = 0, ya que esta primera sección le proporciona el material antes del primer salto de sección, incluido el cuadro de información. Entonces necesitarás analizar el contenido de la infobox, que no debería ser demasiado difícil. Consulte en.wikipedia.org/w/api.php la documentación formal de api de wikipedia, y www.mediawiki.org/wiki/API para el manual.

Ejecutar, por ejemplo, la consulta: http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=fortran&rvsection=0

+0

Lástima que los datos de la infobox no se analizan en la cabecera. Solo tienes que analizar una cadena. – Julian

+0

Sí, muy triste: h ttp: //wikimedia.7.x6.nabble.com/template-parameters-td4998633.html – Vanuan

2

Para cargar la primera sección analizada, basta con añadir este parámetro al final de la URL de la API

rvparse 

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

Luego analiza el html para obtener la tabla infobox (usando 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]); 
Cuestiones relacionadas