2011-11-20 10 views
9

Estoy tratando de encontrar un analizador para jugadas de fútbol. Utilizo aquí el término "lenguaje natural" muy libremente, así que tengan paciencia porque sé muy poco sobre este campo.Analizador de lenguaje natural para analizar datos play-by-play de deportes

Éstos son algunos ejemplos de lo que estoy trabajando con (Formato: TIEMPO | ABAJO & DIST | OFF_TEAM | DESCRIPCIÓN):

04:39|4th and [email protected]|Dal|Mat McBriar punts for 32 yards to NYJ14. Jeremy Kerley - no return. FUMBLE, recovered by NYJ.| 
04:31|1st and [email protected]|NYJ|Shonn Greene rush up the middle for 5 yards to the NYJ21. Tackled by Keith Brooking.| 
03:53|2nd and [email protected]|NYJ|Mark Sanchez rush to the right for 3 yards to the NYJ24. Tackled by Anthony Spencer. FUMBLE, recovered by NYJ (Matthew Mulligan).| 
03:20|1st and [email protected]|NYJ|Shonn Greene rush to the left for 4 yards to the NYJ37. Tackled by Jason Hatcher.| 
02:43|2nd and [email protected]|NYJ|Mark Sanchez pass to the left to Shonn Greene for 7 yards to the NYJ44. Tackled by Mike Jenkins.| 
02:02|1st and [email protected]|NYJ|Shonn Greene rush to the right for 1 yard to the NYJ45. Tackled by Anthony Spencer.| 
01:23|2nd and [email protected]|NYJ|Mark Sanchez pass to the left to LaDainian Tomlinson for 5 yards to the 50. Tackled by Sean Lee.| 

A partir de ahora, he escrito un programa de análisis mudos que los mangos todas las cosas fáciles (playID, quarter, time, down & distancia, equipo ofensivo) junto con algunos scripts que van y obtienen estos datos y los desinfectan en el formato visto anteriormente. Una sola línea se convierte en un objeto "Reproducir" para almacenarse en una base de datos.

La parte difícil aquí (al menos para mí) es analizar la descripción de la obra. Aquí hay alguna información que me gustaría extraer de esa cadena:

Ejemplo cadena:

"Mark Sanchez pass to the left to Shonn Greene for 7 yards to the NYJ44. Tackled by Mike Jenkins." 

Resultado:

turnover = False 
interception = False 
fumble = False 
to_on_downs = False 
passing = True 
rushing = False 
direction = 'left' 
loss = False 
penalty = False 
scored = False 
TD = False 
PA = False 
FG = False 
TPC = False 
SFTY = False 
punt = False 
kickoff = False 
ret_yardage = 0 
yardage_diff = 7 
playmakers = ['Mark Sanchez', 'Shonn Greene', 'Mike Jenkins'] 

La lógica que tenía para mi programa de análisis inicial fue algo como esto :

# pass, rush or kick 
# gain or loss of yards 
# scoring play 
    # Who scored? off or def? 
    # TD, PA, FG, TPC, SFTY? 
# first down gained 
# punt? 
# kick? 
    # return yards? 
# penalty? 
    # def or off? 
# turnover? 
    # INT, fumble, to on downs? 
# off play makers 
# def play makers 

Las descripciones pueden ponerse bastante peludas (errores varios & recuperaciones con penalidades, etc.) y me preguntaba si podría aprovechar algunos módulos NLP. Lo más probable es que vaya a pasar unos días en una máquina de estado tonto/estático como analizador, pero si alguien tiene sugerencias sobre cómo abordarlo usando técnicas de PNL, me gustaría saber de ellos.

+9

Dado el tema de la pregunta, me parece interesante que el resaltador de sintaxis SO esté resaltando todos los nombres humanos ... – Jon

Respuesta

4

Creo que pyparsing sería muy útil aquí.

Su texto de entrada se ve muy regular (a diferencia del lenguaje natural real), y pyparsing es excelente en este aspecto. deberías echarle un vistazo.

Por ejemplo, para analizar las siguientes frases:

Mat McBriar punts for 32 yards to NYJ14. 
Mark Sanchez rush to the right for 3 yards to the NYJ24. 

Se podría definir una frase de análisis con algo como (busque sintaxis exacta de documentos):

name = Group(Word(alphas) + Word(alphas)).setResultsName('name') 

action = Or(Exact("punts"),Exact("rush")).setResultsName('action') + Optional(Exact("to the")) + Or(Exact("left"), Exact("right"))) 

distance = Word(number).setResultsName("distance") + Exact("yards") 

pattern = name + action + Exact("for") + distance + Or(Exact("to"), Exact("to the")) + Word() 

Y pyparsing rompería las cadenas utilizando este patrón También devolverá un diccionario con el nombre, la acción y la distancia de los elementos, extraídos de la oración.

+0

Lo comprobaré e informaré, gracias. – Jon

0

Imagino que pyparsing funcionaría bastante bien, pero los sistemas basados ​​en reglas son bastante frágiles. Por lo tanto, si vas más allá del fútbol, ​​es posible que tengas problemas.

Creo que una mejor solución para este caso sería una parte del marcador de voz y un léxico (leer diccionario) de nombres de jugadores, posiciones y otra terminología deportiva. Tírelo en su herramienta favorita de aprendizaje automático, descubra las buenas características y creo que sería bastante útil.

NTLK es un buen lugar para comenzar la PNL. Desafortunadamente, el campo no está muy desarrollado y no hay una herramienta que sea como bam, problema resuelto, fácil cursi.

Cuestiones relacionadas