Анализатор естественного языка для анализа спортивных данных об игре - PullRequest
9 голосов
/ 20 ноября 2011

Я пытаюсь придумать парсер для футбольных игр.Я использую термин «естественный язык» здесь очень свободно, поэтому, пожалуйста, имейте в виду, что я почти ничего не знаю об этом поле.

Вот несколько примеров того, с чем я работаю (Формат: TIME | DOWN & DIST |OFF_TEAM | DESCRIPTION):

04:39|4th and 20@NYJ46|Dal|Mat McBriar punts for 32 yards to NYJ14. Jeremy Kerley - no return. FUMBLE, recovered by NYJ.|
04:31|1st and 10@NYJ16|NYJ|Shonn Greene rush up the middle for 5 yards to the NYJ21. Tackled by Keith Brooking.|
03:53|2nd and 5@NYJ21|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 10@NYJ33|NYJ|Shonn Greene rush to the left for 4 yards to the NYJ37. Tackled by Jason Hatcher.|
02:43|2nd and 6@NYJ37|NYJ|Mark Sanchez pass to the left to Shonn Greene for 7 yards to the NYJ44. Tackled by Mike Jenkins.|
02:02|1st and 10@NYJ44|NYJ|Shonn Greene rush to the right for 1 yard to the NYJ45. Tackled by Anthony Spencer.|
01:23|2nd and 9@NYJ45|NYJ|Mark Sanchez pass to the left to LaDainian Tomlinson for 5 yards to the 50. Tackled by Sean Lee.|

На данный момент я написал тупой парсер, который обрабатывает все простые вещи (playID, четверть, время, вниз и дистанция, атакующая команда) вместе с некоторыми сценариями, которые идут иполучает эти данные и очищает их в формате, указанном выше.Одна строка превращается в объект «Воспроизведение» для хранения в базе данных.

Здесь сложная часть (по крайней мере для меня) - анализ описания пьесы.Вот некоторая информация, которую я хотел бы извлечь из этой строки:

Пример строки:

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

Результат:

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']

Логика, которую я использовал для моейПервоначальный синтаксический анализатор выглядел примерно так:

# 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

Описания могут быть довольно сложными (многократные сбои и восстановления со штрафами и т. д.), и мне было интересно, смогу ли я воспользоваться некоторыми модулями NLP там.Скорее всего, я собираюсь потратить несколько дней на тупой / статический конечный автомат, такой как парсер, но если у кого-то есть предложения о том, как подойти к нему с использованием техник НЛП, я бы хотел о них услышать.

Ответы [ 2 ]

4 голосов
/ 20 ноября 2011

Я думаю, что pyparsing был бы очень полезен здесь.

Ваш вводимый текст выглядит очень регулярно (в отличие от реального естественного языка), и пиапарсинг хорош в этом. Вы должны взглянуть на это.

Например, для разбора следующих предложений:

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

Вы могли бы определить предложение синтаксического анализа с помощью чего-то вроде (ищите точный синтаксис в документах):

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() 

И pyparsing будет разрывать строки, используя этот шаблон. Он также вернет словарь с именем элемента, действием и расстоянием - извлеченный из предложения.

0 голосов
/ 06 декабря 2011

Я думаю, что pyparsing будет работать очень хорошо, но системы, основанные на правилах, довольно хрупкие.Так что, если вы выйдете за пределы футбола, вы можете столкнуться с некоторыми проблемами.

Я думаю, что лучшим решением для этого случая была бы часть речевого тега и словарь (читай словарь) имен игроков, позиций и другихспортивная терминология.Добавьте его в ваш любимый инструмент машинного обучения, определите хорошие возможности, и я думаю, что он вполне подойдет.

NTLK - хорошее место для старта НЛП.К сожалению, эта область не очень развита, и нет такого инструмента, как БАМ, проблема решена, легкая пошлая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...