patharanor commited on
Commit
1b3124c
·
1 Parent(s): 2f990e6

test: updated text format and unittest

Browse files
Files changed (3) hide show
  1. app.py +1 -5
  2. tests/test_thai_word.py +43 -50
  3. utils/thai_word.py +6 -4
app.py CHANGED
@@ -39,11 +39,7 @@ def transcribe(audio):
39
  # pretty text
40
  tokens = word_tokenize(text, engine="attacut", join_broken_num=True)
41
  print(tokens)
42
-
43
- if len(tokens) > 0:
44
- result = f'pretty: {thw.pretty(deque(deepcopy(tokens)))}\n\n original: {text}'
45
- else:
46
- result = 'pretty: ไม่สามารถตัดคำได้'
47
  else:
48
  result = 'โปรดลองพูดอีกครั้ง'
49
  except Exception as e:
 
39
  # pretty text
40
  tokens = word_tokenize(text, engine="attacut", join_broken_num=True)
41
  print(tokens)
42
+ result = f'pretty: {thw.pretty(deque(deepcopy(tokens)))}\n\n original: {text}'
 
 
 
 
43
  else:
44
  result = 'โปรดลองพูดอีกครั้ง'
45
  except Exception as e:
tests/test_thai_word.py CHANGED
@@ -1,5 +1,6 @@
1
  import unittest
2
  from utils.thai_word import ThaiWord
 
3
 
4
  class TestThaiWord(unittest.TestCase):
5
 
@@ -7,65 +8,57 @@ class TestThaiWord(unittest.TestCase):
7
  self.thw = ThaiWord()
8
 
9
  def test_pretty_text_to_numeric(self):
10
- self.assertEqual(
11
- self.thw.pretty(['ฮา','โหล','หนึ่ง','สอง','สาม','สี่']),
12
- 'ฮาโหล1234',
13
- 'should convert single word number in thai to numeric'
14
- )
15
 
16
  def test_pretty_long_words_to_numeric(self):
17
- self.assertEqual(
18
- self.thw.pretty([
19
- 'ปี','นี้','สอง','พัน','ห้า','ร้อย','หก','สิบ','เจ็ด','นะ',
20
- ' ',
21
- 'ปี','หน้า','ก็','สอง','พัน','ห้า','ร้อย','หก','สิบ','แปด'
22
- ]),
23
- 'ปีนี้2567นะ ปีหน้าก็2568',
24
- 'should convert full-words number in thai to numeric in long words (case1)'
25
- )
26
 
27
- self.assertEqual(
28
- self.thw.pretty([
29
- 'อืม', ' ', 'อยาก', 'ได้', 'ราย', 'ได้', 'ยี่', 'สิบ',
30
- 'เอ็ดล้าน', 'แบบ', 'เข้า', 'บ้าง', ' ', 'ทำ', 'ยัง', 'ไง', 'ดี'
31
- ]),
32
- 'อืม อยากได้รายได้21000000แบบเข้าบ้าง ทำยังไงดี',
33
- 'should convert full-words number in thai to numeric in long words (case2)'
34
- )
35
 
36
- self.assertEqual(
37
- self.thw.pretty([
38
- 'อืม',' ','อยาก','ได้','ราย','ได้','ยี่สิบ','เอ็ด','ล้าน',
39
- 'แบบ', 'ร้าน','พร้อม','ทำ','ยัง','ไง','ดี'
40
- ]),
41
- 'อืม อยากได้รายได้21000000แบบร้านพร้อมทำยังไงดี',
42
- 'should convert full-words number in thai to numeric in long words (case3)'
43
- )
44
 
45
  def test_pretty_word11_to_numeric(self):
46
- self.assertEqual(
47
- self.thw.pretty(['ซื้อ','มา','สิบ','เอ็ด','บาท']),
48
- 'ซื้อมา11บาท',
49
- 'should correct specific numeric "สิบ" and "เอ็ด"'
50
- )
51
- self.assertEqual(
52
- self.thw.pretty(['ซื้อ','มา','สิบเอ็ด','บาท']),
53
- 'ซื้อมา11บาท',
54
- 'should correct specific numeric "สิบเอ็ด"'
55
- )
56
 
57
  def test_pretty_word2x_to_numeric(self):
58
- self.assertEqual(
59
- self.thw.pretty(['ซื้อ','มา','ยี่','สิบ','ห้า','บาท']),
60
- 'ซื้อมา25บาท',
61
- 'should correct specific numeric "ยี่" and "สิบ"'
62
- )
63
 
64
- self.assertEqual(
65
- self.thw.pretty(['ซื้อ','มา','ยี่สิบ','ห้า','บาท']),
66
- 'ซื้อมา25บาท',
67
- 'should correct specific numeric "ยี่สิบ"'
68
- )
69
 
70
  def tearDown(self) -> None:
71
  self.thw = None
 
1
  import unittest
2
  from utils.thai_word import ThaiWord
3
+ from collections import deque
4
 
5
  class TestThaiWord(unittest.TestCase):
6
 
 
8
  self.thw = ThaiWord()
9
 
10
  def test_pretty_text_to_numeric(self):
11
+ tokens = deque(['ฮา','โหล','หนึ่ง','สอง','สาม','สี่'])
12
+ self.assertEqual(self.thw.pretty(tokens),
13
+ 'ฮาโหล 1234',
14
+ 'should convert single word number in thai to numeric')
 
15
 
16
  def test_pretty_long_words_to_numeric(self):
17
+ tokens1 = deque([
18
+ 'ปี','นี้','สอง','พัน','ห้า','ร้อย','หก','สิบ','เจ็ด','นะ', ' ',
19
+ 'ปี','หน้า','ก็','สอง','พัน','ห้า','ร้อย','หก','สิบ','แปด'
20
+ ])
21
+ self.assertEqual(self.thw.pretty(tokens1),
22
+ 'ปีนี้ 2,567 นะ ปีหน้าก็ 2,568 ',
23
+ 'should convert full-words number in thai to numeric in long words (case1)')
 
 
24
 
25
+ tokens2 = deque([
26
+ 'อืม', ' ', 'อยาก', 'ได้', 'ราย', 'ได้', 'ยี่', 'สิบ',
27
+ 'เอ็ดล้าน', 'แบบ', 'เข้า', 'บ้าง', ' ', 'ทำ', 'ยัง', 'ไง', 'ดี'
28
+ ])
29
+ self.assertEqual(self.thw.pretty(tokens2),
30
+ 'อืม อยากได้รายได้ 21,000,000 แบบเข้าบ้าง ทำยังไงดี',
31
+ 'should convert full-words number in thai to numeric in long words (case2)')
 
32
 
33
+ tokens3 = deque([
34
+ 'อืม',' ','อยาก','ได้','ราย','ได้','ยี่สิบ','เอ็ด','ล้าน',
35
+ 'แบบ', 'ร้าน','พร้อม','ทำ','ยัง','ไง','ดี'
36
+ ])
37
+ self.assertEqual(self.thw.pretty(tokens3),
38
+ 'อืม อยากได้รายได้ 21,000,000 แบบร้านพร้อมทำยังไงดี',
39
+ 'should convert full-words number in thai to numeric in long words (case3)')
 
40
 
41
  def test_pretty_word11_to_numeric(self):
42
+ tokens1 = deque(['ซื้อ','มา','สิบ','เอ็ด','บาท'])
43
+ self.assertEqual(self.thw.pretty(tokens1),
44
+ 'ซื้อมา 11 บาท',
45
+ 'should correct specific numeric "สิบ" and "เอ็ด"')
46
+
47
+ tokens2 = deque(['ซื้อ','มา','สิบเอ็ด','บาท'])
48
+ self.assertEqual(self.thw.pretty(tokens2),
49
+ 'ซื้อมา 11 บาท',
50
+ 'should correct specific numeric "สิบเอ็ด"')
 
51
 
52
  def test_pretty_word2x_to_numeric(self):
53
+ tokens1 = deque(['ซื้อ','มา','ยี่','สิบ','ห้า','บาท'])
54
+ self.assertEqual(self.thw.pretty(tokens1),
55
+ 'ซื้อมา 25 บาท',
56
+ 'should correct specific numeric "ยี่" and "สิบ"')
 
57
 
58
+ token2 = deque(['ซื้อ','มา','ยี่สิบ','ห้า','บาท'])
59
+ self.assertEqual(self.thw.pretty(token2),
60
+ 'ซื้อมา 25 บาท',
61
+ 'should correct specific numeric "ยี่สิบ"')
 
62
 
63
  def tearDown(self) -> None:
64
  self.thw = None
utils/thai_word.py CHANGED
@@ -34,16 +34,18 @@ class ThaiWord:
34
  except Exception:
35
  for word in words:
36
  num = f'{num}{text_to_arabic_digit(word)}'
 
 
37
 
38
  return num
39
 
40
- def pretty(self, words: deque) -> str:
41
  has_start_number = False
42
  number = []
43
  text = ''
44
 
45
- while len(words) > 0:
46
- word = words.popleft()
47
  if has_start_number:
48
  if self.is_number(word) or self.is_digit(word):
49
  number.append(word)
@@ -60,7 +62,7 @@ class ThaiWord:
60
  else:
61
  text = f'{text}{word}'
62
 
63
- if len(words) == 0 and len(number) > 0:
64
  text = f'{text}{self.words_to_number(number)}'
65
 
66
  return text
 
34
  except Exception:
35
  for word in words:
36
  num = f'{num}{text_to_arabic_digit(word)}'
37
+
38
+ num = f' {num}'
39
 
40
  return num
41
 
42
+ def pretty(self, tokens: deque) -> str:
43
  has_start_number = False
44
  number = []
45
  text = ''
46
 
47
+ while len(tokens) > 0:
48
+ word = tokens.popleft()
49
  if has_start_number:
50
  if self.is_number(word) or self.is_digit(word):
51
  number.append(word)
 
62
  else:
63
  text = f'{text}{word}'
64
 
65
+ if len(tokens) == 0 and len(number) > 0:
66
  text = f'{text}{self.words_to_number(number)}'
67
 
68
  return text