Я разбирал истории покерных рук за последний год и узнал довольно много о разборе в целом.
Мы начали с регулярных выражений, но быстро поняли, что это будет нелегко масштабировать.
Мы пропустили языки от ruby до c ++ и, наконец, поняли, что именно алгоритм должен был измениться.
Мы взяли Boost :: Spirit и наблюдали, как наша скорость резко возрастает на порядки, в 10 раз превышающие нашу первоначальную скорость. Затем мы перешли на java и в настоящее время используем antlr для создания грамматик для каждого сайта. Это, безусловно, самый быстрый метод, и он очень тщательный, и это хорошо, потому что вы точно знаете, где находитесь с точки зрения «полной» грамматики. К сожалению, я потратил невероятное количество времени на работу с этими грамматиками - они работают чертовски хорошо, но пока не идеально.
Во всяком случае, хватит с подоплекой вопроса под рукой - есть ли какие-нибудь «экзотические» или менее известные методы анализа, о которых я не знаю? Я знаю только о лексизировании / разборе грамматики и другом низком методе регулярных выражений / циклов.
Для тех из вас, кто не знаком с историей покерных рук, я выложу одну, чтобы вы могли рассказать, какова структура.
Full Tilt Poker Game #12037626529: Table durrrr (heads up, deep) - $500/$1000 -
Pot Limit Omaha Hi - 2:00:48 ET - 2009/05/05
Seat 1: durrrr ($196,456.50)
Seat 2: Gus Hansen ($65,499)
durrrr posts the small blind of $500
Gus Hansen posts the big blind of $1,000
The button is in seat #1
*** HOLE CARDS ***
durrrr raises to $3,000
Gus Hansen raises to $9,000
durrrr calls $6,000
*** FLOP *** [3d 4d 7d]
Gus Hansen has 15 seconds left to act
Gus Hansen checks
durrrr checks
*** TURN *** [3d 4d 7d] [Jh]
Gus Hansen checks
durrrr checks
*** RIVER *** [3d 4d 7d Jh] [Ah]
Gus Hansen has 15 seconds left to act
Gus Hansen checks
durrrr has 15 seconds left to act
123stayfree (Observer): GUS I NOW BRING U LUCK
durrrr bets $7,600
Gus Hansen has 15 seconds left to act
Gus Hansen has requested TIME
Hernandez777 (Observer): Gus has the super-duper nuts
Gus Hansen calls $7,600
Podobed45 (Observer): fluuuuuuuuuush
*** SHOW DOWN ***
durrrr shows [Kc 3s Qd As] two pair, Aces and Threes
Gus Hansen mucks
durrrr wins the pot ($33,199.50) with two pair, Aces and Threes
*** SUMMARY ***
Total pot $33,200 | Rake $0.50
Board: [3d 4d 7d Jh Ah]
Seat 1: durrrr (small blind) collected ($33,199.50)
Seat 2: Gus Hansen (big blind) mucked
Я хорошо знаю о других методах сбора информации (таких как очистка экрана и инъекция DLL), но необходимость преобразования истории рук в структурированные данные все еще существует, поэтому я смотрю только на методы, которые собирают информацию. информация, такая как регулярные выражения / грамматики ...
Я думаю, что если я не найду что-то, я собираюсь переписать наши грамматики с помощью ocamllex / ocamlyacc.
обновление
fyi: скорость регулярного выражения составляла ~ 60 рук / сек, в то время как грамматики обрабатывали 600+ рук / сек ... вся рука преобразуется в xml после того, как все данные отсортированы ... существует от 20 до 30 регулярных выражений необходим (по последнему счету) для КАЖДОГО сайта, который вы хотите проанализировать .... у каждого сайта на стороне грамматики есть своя собственная грамматика с безбожным количеством правил лексера / синтаксического анализатора (но это все же меньший размер кода)
У меня есть книга драконов, и я ее читаю - что подстегнуло мой интерес к использованию ocamllex / ocamlyacc .... скорость - это название игры здесь ..