HY-2012's picture
First commit
0c354cf verified
import re
import time
from num2words import num2words
# 测试导入时间
start = time.time()
from num2words import num2words # 实际导入时间约0.01-0.05s
print(f"import num2words took {time.time() - start:.3f}s")
_time_re = re.compile(
r"""\b
((0?[0-9])|(1[0-1])|(1[2-9])|(2[0-3])) # hours
:
([0-5][0-9]) # minutes
\s*(a\.m\.|am|pm|p\.m\.|a\.m|p\.m)? # am/pm
\b""",
re.IGNORECASE | re.X,
)
def _expand_num(n: int) -> str:
"""替代 inflect 的数字转单词功能"""
if n == 0:
return "zero"
return num2words(n).replace("-", " ").replace(" and ", " ")
def _expand_time_english(match: "re.Match") -> str:
hour = int(match.group(1))
past_noon = hour >= 12
time = []
# 处理小时
if hour > 12:
hour -= 12
elif hour == 0:
hour = 12
past_noon = True
time.append(_expand_num(hour))
# 处理分钟
minute = int(match.group(6))
if minute > 0:
if minute < 10:
time.append("oh")
time.append(_expand_num(minute))
# 处理AM/PM
am_pm = match.group(7)
if am_pm is None:
time.append("p m" if past_noon else "a m")
else:
time.append(am_pm.replace(".", "").strip())
return " ".join(time)
def expand_time_english(text: str) -> str:
return re.sub(_time_re, _expand_time_english, text)