🚧 dinglehopper: Test aligning by character while retaining segment id info

pull/38/head
Gerber, Mike 5 years ago
parent 1d553bb4e3
commit 98f6c68df7

@ -3,6 +3,7 @@ import pytest
from extracted_text import ExtractedText, ExtractedTextSegment from extracted_text import ExtractedText, ExtractedTextSegment
from uniseg.graphemecluster import grapheme_clusters from uniseg.graphemecluster import grapheme_clusters
from qurator.dinglehopper import seq_align from qurator.dinglehopper import seq_align
from collections import namedtuple
def test_text(): def test_text():
@ -24,6 +25,9 @@ def test_normalization_check():
assert ExtractedTextSegment('foo', unicodedata.normalize('NFC', 'Schlyñ')) assert ExtractedTextSegment('foo', unicodedata.normalize('NFC', 'Schlyñ'))
AlignmentElement = namedtuple('AlignmentElement', 'left right left_id right_id')
def test_align(): def test_align():
""" """
Test aligning by character while retaining segment id info Test aligning by character while retaining segment id info
@ -35,20 +39,30 @@ def test_align():
test1 = ExtractedText([ test1 = ExtractedText([
ExtractedTextSegment('s0', 'foo'), ExtractedTextSegment('s0', 'foo'),
ExtractedTextSegment('s1', 'bar'), ExtractedTextSegment('s1', 'bar'),
ExtractedTextSegment('s2', 'bazinga') ExtractedTextSegment('s2', 'batzinga')
], ' ') ], ' ')
test2 = ExtractedText([ test2 = ExtractedText([
ExtractedTextSegment('x0', 'foo'), ExtractedTextSegment('x0', 'foo'),
ExtractedTextSegment('x1', 'bar'), ExtractedTextSegment('x1', 'bar'),
ExtractedTextSegment('x2', '.'), # extra . ExtractedTextSegment('x2', '.'), # extra .
ExtractedTextSegment('x2', 'bazim̃ga'), # different grapheme cluster, m̃ also is two Python characters ExtractedTextSegment('x3', 'bazim̃ga'), # deletion + different grapheme cluster, m̃ also is two Python characters
], ' ') ], ' ')
left_pos = 0; right_pos = 0 left_pos = 0; right_pos = 0; alignment = []
for left, right in seq_align(grapheme_clusters(test1.text), grapheme_clusters(test2.text)): for left, right in seq_align(grapheme_clusters(test1.text), grapheme_clusters(test2.text)):
print(left, right, test1.segment_id_for_pos(left_pos), test2.segment_id_for_pos(right_pos)) left_id = test1.segment_id_for_pos(left_pos) if left is not None else None
right_id = test2.segment_id_for_pos(right_pos) if right is not None else None
el = AlignmentElement(left, right, left_id, right_id)
alignment.append(el)
if left is not None: if left is not None:
left_pos += len(left) left_pos += len(left)
if right is not None: if right is not None:
right_pos += len(right) right_pos += len(right)
assert False
print('test1: {}'.format(test1.text))
print('test2: {}'.format(test2.text))
assert alignment[0] == ('f', 'f', 's0', 'x0')
assert alignment[8] == (None, '.', None, 'x2')
assert alignment[12] == ('t', None, 's2', None)
assert alignment[15] == ('n', '', 's2', 'x3')

Loading…
Cancel
Save