首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在brat中按偏移量对注释进行排序?

如何在brat中按偏移量对注释进行排序?
EN

Stack Overflow用户
提问于 2016-04-09 01:55:31
回答 1查看 229关注 0票数 1

当使用快速注释器工具brat时,所创建的注解文件似乎将按照用户执行注解的顺序来呈现注解。如果您从文档的开头开始执行批注,那么批注自然会以正确的偏移顺序进行。但是,如果需要在文档的较早位置添加另一个批注,则输出.ann文件中批注的偏移顺序将会打乱。

那么,如何重新排列.ann文件,以便在完成时使注释按偏移量顺序排列?在brat中有没有什么选项可以让你这样做呢,还是需要编写自己的脚本来执行?

EN

回答 1

Stack Overflow用户

发布于 2016-04-14 00:56:25

我什么也没听到,就写了一个python脚本来完成我打算做的事情。首先,我按照begin index对所有注释进行重新排序。其次,我对标签编号进行了重新排序,以便它们再次按升序排列。

代码语言:javascript
复制
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_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_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_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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36506241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档