如果我来设计一个简单标签

个人在做一个tts(文本转语音)翻译功能。对于不同的语音语义通过标签标识。
例如:

  • 停顿 <break>
  • 多音字 <pinyin>
  • 断句 <segment> <phone>,<muney> 等

目前在对接不同的平台,不同平台的使用大同小异。使用来说,必须得统一,所以得有一套自己的标准规则。

解析规则

现有的模板引擎没有能满足需求的,因为想标签尽可能的简单。

先想想其他办法。实在不行再上xml

标签格式

公司内部关于变量定义,基本都是以%开头的,考虑用百分号做标签的话,会跟文本内容冲突的场景,考虑后,决定还是用尖括号<>来定义标签。

标签内容

<tag>内容</tag>标准的标签格式应该是这个样子。但局限于产品设计,用户的输入文本数量有限,应该尽量精简标签。

考虑后,精简后大概是这个样子<tag:内容/>

正则匹配:

/<tag:(?<content>.*?)/>/

直接取content内容就是文本内容了。

标签属性

标签定义比较好办,属性定义再什么格式呢?

思考了几种格式

/<tag:a=b::c=d:内容\/

模板识别上不好办,发现正则不好写,双冒号和单冒号不好区分

/<tag:a=b;c=d:内容\/>/

这样看着好像可以了

正则

一条正则全提出来不现实。还是得区分一下。

标签的正则

 /<tag(?<props>:.*?):(?<content>.*?)\/>/

标签属性的正则

/(.*?)=(.*?)[;:]/

标签内容的正则

问题

  • 简单解析足够了, 就是文本的其他内容里不能有 :(冒号) ,;(分号),业务上找些偏僻的字符

  • 模板标签文本业务上是个高频操作,正则的效率要低一些,量大肯定要优化

  • 不满足需求的情况下, 再只能上xml了 , 如果有后续扩展需求的话, 最好就是上xml了


如果文章有帮助到您,请点个赞,您的反馈会让我感到文章是有价值的

posted @ 2020-06-17 18:10  孙行者、  阅读(212)  评论(0编辑  收藏  举报