Próbuję wymyślić parser do gry piłkarskiej. Używam tutaj określenia "język naturalny", więc proszę o zachowanie mnie, ponieważ niewiele wiem o tym polu.Analizator języka naturalnego do analizowania danych play-by-play
Oto kilka przykładów tego, co ja pracuję z (format: Czas DOWN & DIST | OFF_TEAM | opis):
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.|
już teraz, pisałem niemego parser, który obsługuje wszystkie proste rzeczy (playID, kwartał, czas, dół & dystans, ofensywny zespół) wraz z niektórymi skryptami, które idą i pobierają te dane i odkażają je do formatu pokazanego powyżej. Pojedyncza linia zostaje przekształcona w obiekt "Play", który ma być zapisany w bazie danych.
Najtrudniejszą częścią (przynajmniej dla mnie) jest parsowanie opisu gry. Oto kilka informacji, które chciałbym, aby wyodrębnić z tego łańcucha:
Przykład ciąg:
"Mark Sanchez pass to the left to Shonn Greene for 7 yards to the NYJ44. Tackled by Mike Jenkins."
Wynik:
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']
Logika, że miałem na moim początkowym parsera poszedł coś takiego :
# 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
Opisy mogą być bardzo owłosione (wiele pomyłek & odzyskiwanie z karami itp.) I zastanawiałem się, czy mogę skorzystać z niektórych modułów NLP. Prawdopodobnie zamierzam spędzić kilka dni na głupi/statyczny automat, jak na przykład parser, ale jeśli ktoś ma sugestie, jak się do niego podejść za pomocą technik NLP, chciałbym o nich usłyszeć.
Biorąc pod uwagę temat pytania, uważam, że interesujące jest to, że zakreślacz SO jest podświetlany przez wszystkie ludzkie imiona ... – Jon