免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2940 | 回复: 13
打印 上一主题 下一主题

[文本处理] 求助-语音报时处理 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-28 08:54 |只看该作者 |倒序浏览
本帖最后由 bikkuri 于 2015-04-28 10:00 编辑

大家好!
我有一个问题向大家请教。
我在我的树莓派上用以下命令进行语音报时。
  1. echo "现在时刻:$(date +%k)点,$(date +%M)分"|espeak -vzh+f3 -k5 -s140 2>/dev/null
复制代码
但是发现TTS朗读软件espeak比较笨,在读分钟数碰到两位数的时候不能按汉语习惯朗读。
比如
现在时刻:8点,28分
按照汉语习惯应该朗读成:现在时刻:八点,二十八分
但是espeak读成了:现在时刻:八点,二八分
  1. date输出                espeak朗读输出                期望的朗读输出
  2. 00                00分(错误)                整
  3. 01                01分(正确)                01分
  4. 02                02分(正确)                02分
  5. ...
  6. 09                09分(正确)                09分
  7. 10                10分(错误)                十,分
  8. 11                11分(错误)                十,1分
  9. 12                12分(错误)                十,2分
  10. ...
  11. 19                19分(错误)                十,9分
  12. 20                20分(错误)                2十,分
  13. 21                21分(错误)                2十,1分
  14. ...
  15. 29                29分(错误)                2十,9分
  16. 30                30分(错误)                3十,分
  17. 31                31分(错误)                3十,1分
  18. ...
  19. 59                59分(错误)                5十,9分
复制代码
请大家帮忙处理一下,对应于第一列的date命令的分钟输出,产生第三列的文本。
例如对应于以下时刻:
[pi@gin:~]$ date
Tue Apr 28 09:35:24 CST 2015
[pi@gin:~]$ cn date
2015年 04月 28日 星期二 09:35:29 CST
产生的文本应该是:
现在时刻:9点,3十,5分

对应于以下时刻:
[pi@gin:~]$ date -d '+12 hours'
Tue Apr 28 21:37:44 CST 2015
[pi@gin:~]$ cn date -d '+12 hours'
2015年 04月 28日 星期二 21:37:52 CST
产生的文本应该是:
现在时刻:2十,1点,3十,7分
谢谢大家。

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
2 [报告]
发表于 2015-04-28 09:08 |只看该作者
哥,感觉你的需求,都是挺有意思的

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2015-04-28 09:41 |只看该作者
哥,感觉你的需求,都是挺有意思的

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2015-04-28 09:44 |只看该作者
回复 1# bikkuri


目测是这个意思:
  1. echo "现在时刻:$(date +%k)点,$(date +%M)分" | sed -r 's/00分/整/;s/([1-5])0(点|分)/\1十\2/g;s/([1-5])([1-9])(点|分)/\1十,\2\3/g'
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2015-04-28 09:46 |只看该作者
本帖最后由 jason680 于 2015-04-28 09:47 编辑

回复 1# bikkuri

How about this way for your reference

$ seq -w 0 60 | awk -vFS="" '{t=($1==1)?"":$1;if($1>0)$1=t"十";m=$2?$2:"";$2=m" 分";if($1=="0"&&$1+$2==0)$0="整"}1'

0 1分
...
0 9分
十 分
十 1分
...
十 9分
2十 分
2十 1分
...
2十 9分
3十 分
3十 1分
...
5十 9分
6十 分

   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
6 [报告]
发表于 2015-04-28 09:51 |只看该作者
本帖最后由 bikkuri 于 2015-04-28 13:05 编辑

非常感谢!您的命令已经很接近于完美了。
但是测试发现还有一点点问题。
比如:
对于以下时刻:
[pi@gin:~]$ date
Tue Apr 28 10:03:24 CST 2015

您的命令的输出是:
现在时刻:1十点,03分

“1十点” 前的1应该要去掉。
  1. alias clock='echo "现在时刻:$(date +%k)点,$(date +%M)分" | sed -r "s/00分/整/;s/([1-5])0(点|分)/\1十\2/g;s/([1-5])([1-9])(点|分)/\1十,\2\3/g;s/1十/十/g"|espeak -vzh+f3 -k5 -s140 2>/dev/null'
复制代码
谢谢!

ly5066113 发表于 2015-04-28 09:44
回复 1# bikkuri

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
7 [报告]
发表于 2015-04-28 10:27 |只看该作者
Thank you very much for your help!
Your code works fine.

jason680 发表于 2015-04-28 09:46
回复 1# bikkuri

How about this way for your reference

论坛徽章:
10
2015年亚洲杯之科威特
日期:2015-04-13 13:51:5315-16赛季CBA联赛之山东
日期:2016-01-16 18:35:0815-16赛季CBA联赛之广东
日期:2016-01-04 15:26:23程序设计版块每日发帖之星
日期:2015-11-13 06:20:002015亚冠之阿尔艾因
日期:2015-11-10 12:32:242015亚冠之阿尔沙巴布
日期:2015-05-15 18:26:49羊年新春福章
日期:2015-04-28 16:45:112015年亚洲杯之伊拉克
日期:2015-04-25 20:06:30羊年新春福章
日期:2015-04-13 13:53:2015-16赛季CBA联赛之八一
日期:2016-01-20 18:23:49
8 [报告]
发表于 2015-04-28 11:52 |只看该作者
哥,感觉你的需求,挺有意思的

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
9 [报告]
发表于 2015-04-28 12:39 |只看该作者

哥,感觉你的需求,挺有意思的

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
10 [报告]
发表于 2015-04-28 13:01 |只看该作者
呵呵,谢谢各位小伙伴们。
有你们真好!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP