def test_align_different_start(self): ref = annotations.LabelList(labels=[ annotations.Label('b', 4, 9) ]) hyp = annotations.LabelList(labels=[ annotations.Label('b', 2, 8) ]) result = alignment.InvariantSegmentAligner().align(ref, hyp) assert len(result) == 3 segment = result[0] assert segment.start == 2 assert segment.end == 4 assert segment.ref == [] assert segment.hyp == [annotations.Label('b', 2, 8)] segment = result[1] assert segment.start == 4 assert segment.end == 8 assert segment.ref == [annotations.Label('b', 4, 9)] assert segment.hyp == [annotations.Label('b', 2, 8)] segment = result[2] assert segment.start == 8 assert segment.end == 9 assert segment.ref == [annotations.Label('b', 4, 9)] assert segment.hyp == []
def test_align(self): ref = annotations.LabelList(labels=[ annotations.Label('a', 0, 3), annotations.Label('b', 3, 6), annotations.Label('c', 7, 10) ]) hyp = annotations.LabelList(labels=[ annotations.Label('a', 0, 3), annotations.Label('b', 4, 8), annotations.Label('c', 8, 10) ]) result = alignment.InvariantSegmentAligner().align(ref, hyp) assert len(result) == 6 segment = result[0] assert segment.start == 0 assert segment.end == 3 assert segment.ref == [annotations.Label('a', 0, 3)] assert segment.hyp == [annotations.Label('a', 0, 3)] segment = result[1] assert segment.start == 3 assert segment.end == 4 assert segment.ref == [annotations.Label('b', 3, 6)] assert segment.hyp == [] segment = result[2] assert segment.start == 4 assert segment.end == 6 assert segment.ref == [annotations.Label('b', 3, 6)] assert segment.hyp == [annotations.Label('b', 4, 8)] segment = result[3] assert segment.start == 6 assert segment.end == 7 assert segment.ref == [] assert segment.hyp == [annotations.Label('b', 4, 8)] segment = result[4] assert segment.start == 7 assert segment.end == 8 assert segment.ref == [annotations.Label('c', 7, 10)] assert segment.hyp == [annotations.Label('b', 4, 8)] segment = result[5] assert segment.start == 8 assert segment.end == 10 assert segment.ref == [annotations.Label('c', 7, 10)] assert segment.hyp == [annotations.Label('c', 8, 10)]
def test_align_empty_hypothesis(self): ref = annotations.LabelList(labels=[ annotations.Label('b', 4, 8) ]) hyp = annotations.LabelList(labels=[ ]) result = alignment.InvariantSegmentAligner().align(ref, hyp) assert len(result) == 1 segment = result[0] assert segment.start == 4 assert segment.end == 8 assert segment.ref == [annotations.Label('b', 4, 8)] assert segment.hyp == []
def test_align_with_empty_segments(self): ref = annotations.LabelList(labels=[ annotations.Label('a', 0, 3), annotations.Label('b', 4, 6), ]) hyp = annotations.LabelList(labels=[ annotations.Label('a', 0, 3), annotations.Label('c', 5, 8), ]) result = alignment.InvariantSegmentAligner().align(ref, hyp) assert len(result) == 5 segment = result[0] assert segment.start == 0 assert segment.end == 3 assert segment.ref == [annotations.Label('a', 0, 3)] assert segment.hyp == [annotations.Label('a', 0, 3)] segment = result[1] assert segment.start == 3 assert segment.end == 4 assert segment.ref == [] assert segment.hyp == [] segment = result[2] assert segment.start == 4 assert segment.end == 5 assert segment.ref == [annotations.Label('b', 4, 6)] assert segment.hyp == [] segment = result[3] assert segment.start == 5 assert segment.end == 6 assert segment.ref == [annotations.Label('b', 4, 6)] assert segment.hyp == [annotations.Label('c', 5, 8)] segment = result[4] assert segment.start == 6 assert segment.end == 8 assert segment.ref == [] assert segment.hyp == [annotations.Label('c', 5, 8)]
def test_align_with_overlapping_labels(self): ref = annotations.LabelList(labels=[ annotations.Label('a', 0, 3), annotations.Label('b', 3, 6), annotations.Label('bx', 4, 5), annotations.Label('c', 7, 10) ]) hyp = annotations.LabelList(labels=[ annotations.Label('a', 0, 3), annotations.Label('b', 4, 8), annotations.Label('c', 8, 10), annotations.Label('cx', 9, 11) ]) result = alignment.InvariantSegmentAligner().align(ref, hyp) assert len(result) == 9 segment = result[0] assert segment.start == 0 assert segment.end == 3 assert segment.ref == [annotations.Label('a', 0, 3)] assert segment.hyp == [annotations.Label('a', 0, 3)] segment = result[1] assert segment.start == 3 assert segment.end == 4 assert segment.ref == [annotations.Label('b', 3, 6)] assert segment.hyp == [] segment = result[2] assert segment.start == 4 assert segment.end == 5 assert segment.ref == [annotations.Label('b', 3, 6), annotations.Label('bx', 4, 5)] assert segment.hyp == [annotations.Label('b', 4, 8)] segment = result[3] assert segment.start == 5 assert segment.end == 6 assert segment.ref == [annotations.Label('b', 3, 6)] assert segment.hyp == [annotations.Label('b', 4, 8)] segment = result[4] assert segment.start == 6 assert segment.end == 7 assert segment.ref == [] assert segment.hyp == [annotations.Label('b', 4, 8)] segment = result[5] assert segment.start == 7 assert segment.end == 8 assert segment.ref == [annotations.Label('c', 7, 10)] assert segment.hyp == [annotations.Label('b', 4, 8)] segment = result[6] assert segment.start == 8 assert segment.end == 9 assert segment.ref == [annotations.Label('c', 7, 10)] assert segment.hyp == [annotations.Label('c', 8, 10)] segment = result[7] assert segment.start == 9 assert segment.end == 10 assert segment.ref == [annotations.Label('c', 7, 10)] assert segment.hyp == [annotations.Label('c', 8, 10), annotations.Label('cx', 9, 11)] segment = result[8] assert segment.start == 10 assert segment.end == 11 assert segment.ref == [] assert segment.hyp == [annotations.Label('cx', 9, 11)]
def __init__(self, aligner=None): if aligner is None: self.aligner = alignment.InvariantSegmentAligner() else: self.aligner = aligner