Skip to content

Commit

Permalink
Fix lỗi kiểm tra tính hợp lệ của dữ liệu đầu & chuyển đổi số sang chữ…
Browse files Browse the repository at this point in the history
… không có từ liên kết hỗ trợ số có đầu số là +84, dành cho trường hợp số điện thoại Việt Nam
  • Loading branch information
ngthuong45 committed Jan 8, 2021
1 parent a65386e commit 6ac72e9
Show file tree
Hide file tree
Showing 9 changed files with 29 additions and 38 deletions.
5 changes: 5 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,11 @@ Tính năng
>>> n2w_single(number)
'không chín không tám một hai ba bốn năm sáu'
# Hỗ trợ cho số có đầu số là '+84'
>>> number = '+84908123456'
>>> n2w_single(number)
'không chín không tám một hai ba bốn năm sáu'
Tính Năng Trong Tương Lai
----------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "vietnam_number"
version = "1.0.0"
version = "1.0.2"
description = "Thư viện xữ lý chữ số dành riêng cho Tiếng Việt - Hỗ trợ chuyển đổi cho cả văn nói và văn viết"
authors = ["Nguyễn Hoài Thương <ng.thuong.lio@gmail.com>"]
repository = "https://github.com/ngthuong45/vietnam-number.git"
Expand Down
1 change: 1 addition & 0 deletions tests/number2word/test_single.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
'number_single, words_result',
[
('0908123456', 'không chín không tám một hai ba bốn năm sáu'),
('+84908123456', 'không chín không tám một hai ba bốn năm sáu'),
],
)
def test_n2w_single(number_single, words_result):
Expand Down
2 changes: 1 addition & 1 deletion vietnam_number/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
__email__ = 'ngthuong.lio@gmail.com'

# Version
__version__ = '1.0.0'
__version__ = '1.0.2'


###########################################################
Expand Down
20 changes: 5 additions & 15 deletions vietnam_number/number2word/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,17 @@
from vietnam_number.number2word.utils.base import pre_process_n2w


def n2w(number):
# Kiểm tra tính hợp lệ của đầu vào
if isinstance(number, int):
number = str(number)

if not isinstance(number, str):
raise ValueError('Đầu vào không phải là kiểu dữ liệu dạng số nguyên(int) hoặc kiểu chuỗi (str)!')

def n2w(number: str):
# Tiền xữ lý dữ liệu chuỗi số đầu vào
clean_number = pre_process_n2w(number)

return n2w_large_number(clean_number)


def n2w_single(number):
# Kiểm tra tính hợp lệ của đầu vào
if isinstance(number, int):
number = str(number)

if not isinstance(number, str):
raise ValueError('Đầu vào không phải là kiểu dữ liệu dạng số nguyên(int) hoặc kiểu chuỗi (str)!')
def n2w_single(number: str):
# Xữ lý đặc thù dành cho số điện thoại
if number[0:3] == '+84':
number = number.replace('+84', '0')

# Tiền xữ lý dữ liệu chuỗi số đầu vào
clean_number = pre_process_n2w(number)
Expand Down
7 changes: 2 additions & 5 deletions vietnam_number/number2word/large_number.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,18 @@
from vietnam_number.number2word.utils.base import chunks


def n2w_large_number(numbers: int):
def n2w_large_number(numbers: str):
"""Hàm chuyển đổi các số có giá trị lớn.
Hàm chuyển đổi các số có giá trị lớn từ 999 đến 999.999.999.999
Args:
numbers (int): Chuỗi số đầu vào.
numbers (str): Chuỗi số đầu vào.
Returns:
Chuỗi chữ số đầu ra.
"""
# chuyển kiểu số sang kiểu chuổi
numbers = str(numbers)

# Chúng ta cần duyệt chuổi số đầu vào từ phải sang trái nhằm phân biệt các giá trị từ nhỏ đến lớn.
# tương tự như khi chúng ta xữ lý cho hàm n2w_hundreds
reversed_large_number = numbers[::-1]
Expand Down
5 changes: 1 addition & 4 deletions vietnam_number/number2word/single.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from vietnam_number.number2word.data import units


def process_n2w_single(numbers: int):
def process_n2w_single(numbers: str):
"""Hàm chuyển đổi số sang chữ số theo từng số một.
Args:
Expand All @@ -10,9 +10,6 @@ def process_n2w_single(numbers: int):
Returns:
Chuỗi chữ số đầu ra.
"""
# chuyển kiểu dữ liệu số nguyên (int) sang kiểu chuỗi (str)
numbers = str(numbers)

total_number = ''
for element in numbers:
total_number += units[element] + ' '
Expand Down
17 changes: 9 additions & 8 deletions vietnam_number/number2word/utils/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,21 @@ def pre_process_n2w(number: str):
clean_number = ''

char_to_replace = {
'-': ' ',
'.': ' ',
',': ' ',
'+84': '0' # replace ký tự đặt biệt "+84" sang ký tự chữ số 0. cho trường hợp số điện thoại
' ': '',
'-': '',
'.': '',
',': '',
}

# replace ký tự đặt biệt "-" sang khoản trắng
# xóa các ký tự đặt biệt
for key, value in char_to_replace.items():
number = number.replace(key, value)

# xóa khoảng trắng thừa
number = number.strip()
# Kiểm tra tính hợp lệ của đầu vào
if not number.isdigit():
raise ValueError('Đầu vào không phải là kiểu chuỗi chỉ chứa các ký tự số (isdigit)!')

# xóa các số không có trong unit
# xóa các ký tự số không có trong unit
for element in number:
if element in units:
clean_number += element
Expand Down
8 changes: 4 additions & 4 deletions vietnam_number/word2number/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def w2n(number_sentence):
"""
# Kiểm tra tính hợp lệ của đầu vào
if isinstance(number_sentence, int) or number_sentence.isdigit():
return number_sentence # trả về số nếu đầu vào là số
return number_sentence

if not isinstance(number_sentence, str):
raise ValueError('Đầu vào không phải là dạng chuỗi (str)! Vui lòng truyền vào chuỗi các chữ số.')
Expand All @@ -39,7 +39,7 @@ def w2n_single(number_sentence):
"""
# Kiểm tra tính hợp lệ của đầu vào
if isinstance(number_sentence, int) or number_sentence.isdigit():
return number_sentence # trả về số nếu đầu vào là số
return number_sentence

if not isinstance(number_sentence, str):
raise ValueError('Đầu vào không phải là dạng chuỗi (str)! Vui lòng truyền vào chuỗi các chữ số.')
Expand All @@ -54,15 +54,15 @@ def w2n_couple(number_sentence):
"""Chuyển đổi chữ số sang số từng cặp số.
Args:
number_sentence (str): Chuổi chữ số đầu vào.
number_sentence: Chuổi chữ số đầu vào.
Returns:
Số đầu ra
"""
# Kiểm tra tính hợp lệ của đầu vào
if isinstance(number_sentence, int) or number_sentence.isdigit():
return number_sentence # trả về số nếu đầu vào là số
return number_sentence

if not isinstance(number_sentence, str):
raise ValueError('Đầu vào không phải là dạng chuỗi (str)! Vui lòng truyền vào chuỗi các chữ số.')
Expand Down

0 comments on commit 6ac72e9

Please sign in to comment.