如何解决在Tensorflow 2中的tf.Tensor中使用正则表达式提取字符串?
我正在使用TF2中的签名保存我的tf.keras模型,以便通过TFServing提供它。在签名函数中,我想提取带有正则表达式的某些实体。
我的输入是数据类型为tf.string的张量。我不能在其中使用numpy(),导致“ Tensor对象没有属性numpy”。 tf.py_function()在TFServing中也不可用。
所以我只剩下张量流操作。如何提取带有模式的子字符串?
@tf.function
def serve_fn(input):
# Returns Today's date is . Tomorrow is another day. But I need 11/2020
output = tf.strings.regex_replace("Today's date is 11/2020. Tomorrow is another day.",pattern=r'[\d]{2}/[\d]{4}',rewrite=" ")
# model inference ...
return {'output': output}
这将返回一个张量,其内容为“今天的日期。明天是另一天。”
仅返回日期的模式看起来如何?如果我没记错的话,tf.strings.regex_replace使用re2,它不支持先行。可能还有其他解决方案吗?
预先感谢
解决方法
您可以使用
tf.strings.regex_replace("Today's date is 11/2020. Tomorrow is another day.",pattern=r'.*?(\d{2}/\d{4}).*',rewrite=r'\1')
请参见RE2 regex demo。详细信息:
-
.*?(\d{2}/\d{4}).*
匹配除换行符以外的0个或更多字符,并尽可能少地匹配(\d{2}/\d{4})
捕获到组1中的任意两位数字/
和那么任何四位数,然后将行的其余部分与.*
相匹配(尽可能多地匹配) -
\1
是对组1值的引用。请参阅regex_replace
reference:regex_rewrite
“ 支持反斜杠转义数字(\1
至\9
)可以插入与相应括号组匹配的文本。”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。