Python - Buscar texto en XML

 
Vista:
Imágen de perfil de Obed

Buscar texto en XML

Publicado por Obed (1 intervención) el 10/03/2015 23:50:14
Hola buen dia.
Estoy haciendo un proyecto de recuperacion de informacion en donde tengo que leer un corpus de conversaciones que vienen en formato xml.
El xml contiene mas o menos esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<conversation id="e621da5de598c9321a1d505ea95e6a2d">
    <message line="1">
      <author>97964e7a9e8eb9cf78f2e4d7b2ff34c7</author>
      <time>03:20</time>
      <text>Hola.</text>
    </message>
    <message line="2">
      <author>0158d0d6781fc4d493f243d4caa49747</author>
      <time>03:20</time>
      <text>hi.</text>
    </message>
    <message line="3">
      <author>0158d0d6781fc4d493f243d4caa49747</author>
      <time>03:20</time>
      <text>whats up?</text>
    </message>

y lo que necesito extraer es todo el texto, ubicado entre las etiquetas <text></text> de cada uno de los autores, que son identificados entre las etiquetas <author></author>
Lo que al final me gustaria es una lista con los textos que escribio cada uno de los autores, en el xml hay muchos autores pues son muchas conversaciones.
Si alguien me puede ayudar.
Estoy usando python, con ipython, y nltk pero creo que este ultimo no sirve para esto.
Saludos y gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Davy

Buscar texto en XML

Publicado por Davy (2 intervenciones) el 22/03/2015 15:45:04
Hola Obed. He pasado por algo parecido y te voy a mostrar como lo he hecho yo. He utilizado el modulo "xml.etree.ElementTree as ET".

Tu código quedaría así:

*******************************

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import xml.etree.ElementTree as ET #Esto lo utilizas para despues conferirle a la informacion del XML una estructura                                                            
                                                                  #arborea y trabajar con las funciones del modulo
codigo='''
<conversation id="e621da5de598c9321a1d505ea95e6a2d">
    <message line="1">
      <author>97964e7a9e8eb9cf78f2e4d7b2ff34c7</author>
      <time>03:20</time>
      <text>Hola.</text>
    </message>
    <message line="2">
      <author>0158d0d6781fc4d493f243d4caa49747</author>
      <time>03:20</time>
      <text>hi.</text>
    </message>
    <message line="3">
      <author>0158d0d6781fc4d493f243d4caa49747</author>
      <time>03:20</time>
      <text>whats up?</text>
    </message>
</conversation>'''
 
arbol=ET.fromstring(codigo) #Transformacion en estructura arborea
lista=arbol.findall('message') #Creacion de una lista que en cada posicion contiene un elemento
                                                      #"message" completo
mensajes=list() #Creacion de una lista en blanco para guardar en cada posicion el contenido del subelemto "text" del  
                              #elemento "message"
for item in lista:
    mensajes.append(item.find('text').text)

*******************************

Ahora que tienes una lista con el texto de cada mensaje en cada posición puedes trabajar la información como
quieras.

(Parece ser que al enviar la respuesta se eliminan las sangrías(tabulaciones). Te adjunto el archivo otro.py en el RAR para que puedas usarlo)

Espero que te sirva. Cualquier duda, coméntame por privado.

Un saludo! ^^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar