regex - 使用正则表达式从 Tensorflow 2 中的 tf.Tensor 中提取字符串?
问题描述
我将我的 tf.keras 模型与 TF2 中的签名一起保存,以便与 TFServing 一起使用。在签名函数中,我想用正则表达式提取一些实体。
我的输入是数据类型为 tf.string 的张量。我不能在其中使用 numpy(),导致“张量对象没有属性 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 正则表达式演示。细节:
.*?(\d{2}/\d{4}).*
匹配除换行符之外的 0 个或多个字符,尽可能少,将任意两位数(\d{2}/\d{4})
捕获/
到第 1 组,然后捕获任意四位数,然后仅将行的其余部分与.*
(贪婪地,尽可能多)匹配\1
是对第 1 组值的括号引用。参见regex_replace
参考:regex_rewrite
“支持反斜杠转义数字(\1
to\9
)可以插入匹配对应括号组的文本。 ”。
推荐阅读
- r - 按列表元素迭代数据帧
- java - 替换文本文件的一行
- bash - 用于移动小于特定大小的所有子目录的 bash 命令
- django - django 形式的唯一性验证(添加和编辑)
- git - gitlab 管理学生练习的最佳工作流程
- ruby-on-rails - nil:NilClass 的未定义方法“each” - 需要帮助
- python - 如何安全地将变量中定义的字符串与从 Python 2.7 中未知编码的文本文件加载的字符串进行比较?
- scala - Scala:如何将类字段传递给方法
- google-cloud-storage - 如何协调 Terraform 状态与现有存储桶?
- flutter - 使用颤振在本地保存值