2016-04-08 13 views
1

ラピッドアノテータツールbratを使用すると、作成されたアノテーションファイルは、アノテーションがユーザによって実行された順序でアノテーションを提示するように見えます。ドキュメントの先頭から始めてアノテーションを実行する最後に行くと、アノテーションは当然ながら正しいオフセット順序になります。ただし、ドキュメントの前に移動して別の注釈を追加する必要がある場合は、出力.annファイル内の注釈のオフセット順が乱れることがあります。コメントはどのように注文するのですか?

どのようにすれば、注釈が完了したときに注釈がオフセットされた順序になるように.annファイルを並べ替えることができますか?あなたがこれを行うことができるか、または実行するために自分のスクリプトを書く必要がある何かであるブラット内のいくつかのオプションはありますか?

答えて

1

何も聞こえませんでしたが、私は何をするかを決めるためにpythonスクリプトを書いていました。まず、すべての注釈をbegin indexで並べ替えます。第二に、私はラベル番号を並べ替え、再び昇順に並べ替える。

import optparse, sys 

splitchar1 = '\t' 
splitchar2 = ' ' 

# for brat, overlapped is not permitted (or at least a warning is generated) 
# we could use this simplification in sorting by simply sorting on begin. it is 
# probably a good idea anyway. 
class AnnotationRecord: 
    label = 'T0' 
    type = '' 
    begin = -1 
    end = -1 
    text = '' 

    def __repr__(self): 
     return self.label + splitchar1 + self.type + splitchar2 + str(self.begin) + splitchar2 + str(self.end) + splitchar1 + self.text 

def create_record(parts): 
    record = AnnotationRecord() 
    record.label = parts[0] 
    middle_parts = parts[1].split(splitchar2) 
    record.type = middle_parts[0] 
    record.begin = middle_parts[1] 
    record.end = middle_parts[2] 
    record.text = parts[2] 
    return record 

def main(filename, out_filename): 
    fo = open(filename, 'r') 
    lines = fo.readlines() 
    fo.close() 

    annotation_records = [] 

    for line in lines: 
     parts = line.split(splitchar1) 
     annotation_records.append(create_record(parts)) 

    # sort based upon begin  
    sorted_annotation_records = sorted(annotation_records, key=lambda a: int(a.begin)) 

    # now relabel based upon the sorted order 
    label_value = 1 
    for sorted_record in sorted_annotation_records: 
     sorted_record.label = 'T' + str(label_value) 
     label_value += 1 

    # now write the resulting file to disk 
    fo = open(out_filename, 'w') 
    for sorted_record in sorted_annotation_records: 
     fo.write(sorted_record.__repr__())   
    fo.close() 


#format of .ann file is T# Type Start End Text 
#args are input file, output file 
if __name__ == '__main__': 
    parser = optparse.OptionParser(formatter=optparse.TitledHelpFormatter(), usage=globals()['__doc__'], version='$Id$') 
    parser.add_option ('-v', '--verbose', action='store_true', default=False, help='verbose output') 
    (options, args) = parser.parse_args() 
    if len(args) < 2: 
     parser.error ('missing argument') 
    main(args[0], args[1]) 
    sys.exit(0) 
関連する問題