Рекомендации по программному обеспечению для обработки текстов

Мне нужно обработать текстовые файлы, чтобы извлечь соответствующую информацию для последующего ввода в R для статистического анализа. Содержимое текстового файла обычно выглядит примерно так, как показано ниже. Может ли правление дать какие-либо рекомендации относительно того, какое программное обеспечение/язык программирования мне следует использовать для этой цели? Критические требования к программному обеспечению:

  • простота/ясность синтаксиса программирования для извлечения соответствующей информации из каждой строки (примечание: не все строки будут содержать соответствующую информацию)
  • бесплатно/с открытым исходным кодом
  • может работать как в системах Linux, так и в Windows
  • возможность перебирать множество отдельных текстовых файлов, содержащихся в папке/каталоге, но выводить только в один файл (csv/text)

ПРИМЕР

Full Tilt Poker Game #19911608402: Table Buggy - $0.01/$0.02 - No Limit Hold'em - 4:05:58 ET - 2010/04/08
Seat 2: BAD BeAts02 ($1.74)
Seat 3: VIVIVIVIV ($1.20)
Seat 4: pipelis ($2.87), is sitting out
Seat 5: trichinosis ($2.54)
Seat 6: Syrenski ($2)
Seat 9: evil-bunny1 ($1.20)
BAD BeAts02 posts the small blind of $0.01
VIVIVIVIV posts the big blind of $0.02
handrici sits down
pipelis stands up
Syrenski posts $0.02
The button is in seat #9
*** HOLE CARDS ***
Dealt to Syrenski [6d 3s]
handrici adds $2
trichinosis calls $0.02
Syrenski checks
pkmyers sits down
evil-bunny1 folds
BAD BeAts02 raises to $0.08
VIVIVIVIV folds
VIVIVIVIV adds $0.02
pkmyers adds $1.34
trichinosis calls $0.06
Syrenski folds
*** FLOP *** [Js 5s 8s]
pipelis sits down
BAD BeAts02 has 15 seconds left to act
BAD BeAts02 bets $0.18
AntHraX85 sits down
pipelis stands up
trichinosis folds
Uncalled bet of $0.18 returned to BAD BeAts02
BAD BeAts02 mucks
AntHraX85 adds $2
BAD BeAts02 wins the pot ($0.19)
*** SUMMARY ***
Total pot $0.20 | Rake $0.01
Board: [Js 5s 8s]
Seat 2: BAD BeAts02 (small blind) collected ($0.19), mucked
Seat 3: VIVIVIVIV (big blind) folded before the Flop
Seat 4: pipelis is sitting out
Seat 5: trichinosis folded on the Flop
Seat 6: Syrenski folded before the Flop
Seat 9: evil-bunny1 (button) didn't bet (folded)

person babelproofreader    schedule 13.10.2010    source источник
comment
Какая информация будет актуальна для вас? Будет ли пользователь решать, что важно? Есть ли образец?   -  person pablosaraiva    schedule 13.10.2010
comment
Соответствующей информацией будет вся информация, относящаяся к конкретному названному игроку, то есть Сиренскому, и информация о структуре руки.   -  person babelproofreader    schedule 14.10.2010
comment
handrici sits down ... на каком месте?   -  person Kaz    schedule 19.12.2013
comment
Более того, если handrici сел и вложил деньги, то почему handrici не упоминается в описании игры? AntHraX85 то же самое.   -  person Kaz    schedule 19.12.2013


Ответы (4)


По стечению обстоятельств, я также повозился с парсингом файлов истории раздач :) Я думаю, что лучшими кандидатами являются python и perl. Они оба кроссплатформенные и с открытым исходным кодом. Концептуально структура программы проста: она просто включает итерацию построчного ввода и применение различных регулярных выражений для извлечения информации. И вы можете сделать это практически на любом языке программирования. (Возможно, вы даже сможете сделать это на чистом R, кто знает?) Тем не менее, я бы отдал свой голос Perl, поскольку он известен как превосходный язык, особенно для обработки простых текстовых файлов.

person Bogdev    schedule 17.10.2010

Взгляните на «grep» (попробуйте Википедию).

Его можно использовать в PHP: http://www.php.net/manual/en/function.preg-grep.php

Существуют настольные текстовые редакторы, которые также могут работать с grep. Некоторые из них бесплатны - например. TextWrangler (Mac)

person KemanoThief    schedule 17.10.2010

Я сделал язык специально для таких вещей, по крайней мере, изначально: http://www.nongnu.org/txr< /а>

person Kaz    schedule 31.08.2012

Этот вопрос был открыт некоторое время, но я все равно опубликую здесь фрагмент кода. grep будет работать в Linux, но не в Windows. Perl будет работать на обеих платформах. В Linux предустановлен Perl; в Windows вам нужно будет установить Perl самостоятельно.

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

perl -n -e'print if m{Syrenski}' directory/* >output.txt

-n перебирает все строки во входных данных, но не печатает их

печатать, если m{Syrenski} говорит, печатать строку, если она содержит строку "Syrenski"

каталог/* говорит обработать все файлы в каталоге

>output.txt сообщает, что нужно распечатать вывод в файл output.txt.

person Mauritz Hansen    schedule 11.09.2012