提交 0322d752 编写于 作者: Y yangyaming

Follow comments.

上级 7afa9db6
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """This module provides functions to calculate error rate in different level.
This module provides functions to calculate error rate in different level. e.g. wer for word-level, cer for char-level.
e.g. wer for word-level, cer for char-level.
""" """
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import numpy as np import numpy as np
...@@ -42,8 +44,7 @@ def levenshtein_distance(ref, hyp): ...@@ -42,8 +44,7 @@ def levenshtein_distance(ref, hyp):
def wer(reference, hypothesis, ignore_case=False, delimiter=' '): def wer(reference, hypothesis, ignore_case=False, delimiter=' '):
""" """Calculate word error rate (WER). WER compares reference text and
Calculate word error rate (WER). WER compares reference text and
hypothesis text in word-level. WER is defined as: hypothesis text in word-level. WER is defined as:
.. math:: .. math::
...@@ -71,6 +72,7 @@ def wer(reference, hypothesis, ignore_case=False, delimiter=' '): ...@@ -71,6 +72,7 @@ def wer(reference, hypothesis, ignore_case=False, delimiter=' '):
:type delimiter: char :type delimiter: char
:return: Word error rate. :return: Word error rate.
:rtype: float :rtype: float
:raises ValueError: If reference length is zero.
""" """
if ignore_case == True: if ignore_case == True:
reference = reference.lower() reference = reference.lower()
...@@ -88,8 +90,7 @@ def wer(reference, hypothesis, ignore_case=False, delimiter=' '): ...@@ -88,8 +90,7 @@ def wer(reference, hypothesis, ignore_case=False, delimiter=' '):
def cer(reference, hypothesis, ignore_case=False): def cer(reference, hypothesis, ignore_case=False):
""" """Calculate charactor error rate (CER). CER compares reference text and
Calculate charactor error rate (CER). CER compares reference text and
hypothesis text in char-level. CER is defined as: hypothesis text in char-level. CER is defined as:
.. math:: .. math::
...@@ -117,6 +118,7 @@ def cer(reference, hypothesis, ignore_case=False): ...@@ -117,6 +118,7 @@ def cer(reference, hypothesis, ignore_case=False):
:type ignore_case: bool :type ignore_case: bool
:return: Character error rate. :return: Character error rate.
:rtype: float :rtype: float
:raises ValueError: If reference length is zero.
""" """
if ignore_case == True: if ignore_case == True:
reference = reference.lower() reference = reference.lower()
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""Test error rate."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import unittest import unittest
import sys
sys.path.append('..')
import error_rate import error_rate
class TestParse(unittest.TestCase): class TestParse(unittest.TestCase):
def test_wer(self): def test_wer_1(self):
ref = 'i UM the PHONE IS i LEFT THE portable PHONE UPSTAIRS last night' ref = 'i UM the PHONE IS i LEFT THE portable PHONE UPSTAIRS last night'
hyp = 'i GOT IT TO the FULLEST i LOVE TO portable FROM OF STORES last night' hyp = 'i GOT IT TO the FULLEST i LOVE TO portable FROM OF STORES last night'
word_error_rate = error_rate.wer(ref, hyp) word_error_rate = error_rate.wer(ref, hyp)
self.assertTrue(abs(word_error_rate - 0.769230769231) < 1e-6) self.assertTrue(abs(word_error_rate - 0.769230769231) < 1e-6)
def test_cer_en(self): def test_wer_2(self):
ref = 'i UM the PHONE IS i LEFT THE portable PHONE UPSTAIRS last night'
word_error_rate = error_rate.wer(ref, ref)
self.assertEqual(word_error_rate, 0.0)
def test_wer_3(self):
ref = ' '
hyp = 'Hypothesis sentence'
try:
word_error_rate = error_rate.wer(ref, hyp)
except Exception as e:
self.assertTrue(isinstance(e, ValueError))
def test_cer_1(self):
ref = 'werewolf' ref = 'werewolf'
hyp = 'weae wolf' hyp = 'weae wolf'
char_error_rate = error_rate.cer(ref, hyp) char_error_rate = error_rate.cer(ref, hyp)
self.assertTrue(abs(char_error_rate - 0.25) < 1e-6) self.assertTrue(abs(char_error_rate - 0.25) < 1e-6)
def test_cer_zh(self): def test_cer_2(self):
ref = 'werewolf'
char_error_rate = error_rate.cer(ref, ref)
self.assertEqual(char_error_rate, 0.0)
def test_cer_3(self):
ref = u'我是中国人' ref = u'我是中国人'
hyp = u'我是 美洲人' hyp = u'我是 美洲人'
char_error_rate = error_rate.cer(ref, hyp) char_error_rate = error_rate.cer(ref, hyp)
self.assertTrue(abs(char_error_rate - 0.6) < 1e-6) self.assertTrue(abs(char_error_rate - 0.6) < 1e-6)
def test_cer_4(self):
ref = u'我是中国人'
char_error_rate = error_rate.cer(ref, ref)
self.assertFalse(char_error_rate, 0.0)
def test_cer_5(self):
ref = ''
hyp = 'Hypothesis'
try:
char_error_rate = error_rate.cer(ref, hyp)
except Exception as e:
self.assertTrue(isinstance(e, ValueError))
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册