mirror of
https://github.com/qurator-spk/dinglehopper.git
synced 2025-07-01 22:50:08 +02:00
🚧 dinglehopper: Test aligning by character while retaining segment id info
This commit is contained in:
parent
1d553bb4e3
commit
98f6c68df7
1 changed files with 19 additions and 5 deletions
|
@ -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', 'm̃', 's2', 'x3')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue