1
- from benchmarkstt .schema import Schema , Item
1
+ from benchmarkstt .schema import Schema
2
2
import logging
3
- from benchmarkstt .diff import Differ , factory as differ_factory
4
- from benchmarkstt .diff .core import RatcliffObershelp
3
+ from collections import namedtuple
4
+ from typing import Union
5
+ from benchmarkstt .diff import DifferInterface , factory as differ_factory
6
+ from benchmarkstt .diff .core import RatcliffObershelp , Levenshtein
5
7
from benchmarkstt .diff .formatter import format_diff
6
8
from benchmarkstt .metrics import Metric
7
9
from collections import namedtuple
13
15
('equal' , 'replace' , 'insert' , 'delete' ))
14
16
15
17
type_schema = Union [Schema , list ]
18
+ type_differ = DifferInterface
16
19
17
20
18
21
def traversible (schema , key = None ):
@@ -21,7 +24,7 @@ def traversible(schema, key=None):
21
24
return [item if type (item ) is str else item [key ] for item in schema ]
22
25
23
26
24
- def get_differ (a , b , differ_class : Differ ):
27
+ def get_differ (a , b , differ_class : type_differ ):
25
28
if differ_class is None or differ_class == '' :
26
29
differ_class = RatcliffObershelp
27
30
elif type (differ_class ) is str :
@@ -33,13 +36,13 @@ class WordDiffs(Metric):
33
36
"""
34
37
Present differences on a per-word basis
35
38
36
- :param differ_class: see :py:mod:`benchmarkstt.Differ .core`
39
+ :param differ_class: see :py:mod:`benchmarkstt.diff .core`
37
40
:param dialect: Presentation format. Default is 'ansi'.
38
41
:example differ_class: 'levenshtein'
39
42
:example dialect: 'html'
40
43
"""
41
44
42
- def __init__ (self , differ_class : Differ = None , dialect : str = None ):
45
+ def __init__ (self , differ_class : type_differ = None , dialect : str = None ):
43
46
self ._differ_class = differ_class
44
47
self ._dialect = dialect
45
48
@@ -73,7 +76,7 @@ class WER(Metric):
73
76
See https://docs.python.org/3/library/difflib.html
74
77
75
78
:param mode: 'strict' (default), 'hunt' or 'levenshtein'.
76
- :param differ_class: see :py:mod:`benchmarkstt.Differ .core`
79
+ :param differ_class: see :py:mod:`benchmarkstt.diff .core`
77
80
"""
78
81
79
82
# WER modes
@@ -84,7 +87,7 @@ class WER(Metric):
84
87
INS_PENALTY = 1
85
88
SUB_PENALTY = 1
86
89
87
- def __init__ (self , mode = None , differ_class : Union [str , Differ , None ] = None ):
90
+ def __init__ (self , mode = None , differ_class : Union [str , type_differ , None ] = None ):
88
91
self ._mode = mode
89
92
90
93
if differ_class is None :
@@ -136,10 +139,10 @@ class CER(Metric):
136
139
will first be split into words, ['aa','bb','cc'], and
137
140
then merged into a final string for evaluation: 'aabbcc'.
138
141
139
- :param differ_class: see :py:mod:`benchmarkstt.Differ .core`
142
+ :param differ_class: see :py:mod:`benchmarkstt.diff .core`
140
143
"""
141
144
142
- def __init__ (self , differ_class : Union [str , Differ , None ] = None ):
145
+ def __init__ (self , differ_class : Union [str , type_differ , None ] = None ):
143
146
self ._differ_class = Levenshtein if differ_class is None else differ_class
144
147
145
148
def compare (self , ref : type_schema , hyp : type_schema ):
@@ -157,10 +160,10 @@ class DiffCounts(Metric):
157
160
"""
158
161
Get the amount of differences between reference and hypothesis
159
162
160
- :param differ_class: see :py:mod:`benchmarkstt.Differ .core`
163
+ :param differ_class: see :py:mod:`benchmarkstt.diff .core`
161
164
"""
162
165
163
- def __init__ (self , differ_class : Union [str , Differ , None ] = None ):
166
+ def __init__ (self , differ_class : Union [str , type_differ , None ] = None ):
164
167
self ._differ_class = differ_class
165
168
166
169
def compare (self , ref : type_schema , hyp : type_schema ) -> OpcodeCounts :
0 commit comments