Как зациклить несколько файлов, сохраняя базовое имя для дальнейшей обработки? - PullRequest
3 голосов
/ 01 марта 2011

У меня есть несколько текстовых файлов, которые должны быть размечены, POS и NER.Я использую теги C & C и запустил их учебник, но мне интересно, есть ли способ пометить несколько файлов, а не один за другим.

В данный момент я размечаю файлы:

bin/tokkie --input working/tutorial/example.txt--quotes delete --output working/tutorial/example.tok

следующим образом, а затем тегом части речи:

bin/pos --input working/tutorial/example.tok --model models/pos --output working/tutorial/example.pos

и, наконец, распознавание именованного объекта:

bin/ner --input working/tutorial/example.pos --model models/ner --output working/tutorial/example.ner

Я не уверен, как бы ясоздайте цикл, чтобы сделать это, и сохраните имя файла таким же, как у ввода, но с расширением, представляющим тегирование, которое оно имеет.Я думал о bash-скрипте или, возможно, Perl, чтобы открыть каталог, но я не уверен, как вводить команды C & C, чтобы скрипт мог понять.

В данный момент я делаю это вручную, и этодовольно много времени, чтобы не сказать больше!

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

Не проверено, вероятно, требуется некоторое искажение каталога.

use autodie qw(:all);
use File::Basename qw(basename);

for my $text_file (glob 'working/tutorial/*.txt') {
    my $base_name = basename($text_file, '.txt');
    system 'bin/tokkie',
        '--input'  => "working/tutorial/$base_name.txt",
        '--quotes' => 'delete',
        '--output' => "working/tutorial/$base_name.tok";
    system 'bin/pos',
        '--input'  => "working/tutorial/$base_name.tok",
        '--model'  => 'models/pos',
        '--output' => "working/tutorial/$base_name.pos";
    system 'bin/ner',
        '--input'  => "working/tutorial/$base_name.pos",
        '--model'  => 'models/ner',
        '--output' => "working/tutorial/$base_name.ner";
}
1 голос
/ 01 марта 2011

В Баш:

#!/bin/bash
dir='working/tutorial'
for file in "$dir"/*.txt
do
    noext=${file/%.txt}

    bin/tokkie --input "$file" --quotes delete --output "$noext.tok"

    bin/pos --input "$noext.tok" --model models/pos --output "$noext.pos"

    bin/ner --input "$noext.pos" --model models/ner --output "$noext.ner"

done
...