从 Tensorflow 2 中的 tf.Tensor 中使用正则表达式提取字符串?

Extracting string with regex from a tf.Tensor in Tensorflow 2?

我在 TF2 中保存带有签名的 tf.keras 模型,以便通过 TFServing 为其提供服务。在签名函数中,我想用正则表达式提取一些实体。

我的输入是一个数据类型为 tf.string 的张量。我不能在其中使用 numpy(),导致“张量对象没有属性 numpy”。 tf.py_function() 在 TFServing 中也不可用。

所以我只剩下tensorflow操作了。我将如何提取带有模式的子字符串?

@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}

那将 return 内容为“今天的日期。明天又是新的一天。”的张量。

模式会是什么样子,return只是日期?如果我没记错的话,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'')

RE2 regex demo。详情:

  • .*?(\d{2}/\d{4}).* 匹配除换行字符以外的 0 个或多个字符,尽可能少,(\d{2}/\d{4}) 捕获 到第 1 组任意两个数字,/ 然后是任意四位数字,然后将行的其余部分与 .* 匹配(贪婪地,尽可能多)
  • </code> 是对第 1 组值的引用。参见<a href="https://www.tensorflow.org/api_docs/python/tf/strings/regex_replace" rel="nofollow noreferrer"><code>regex_replace reference:regex_rewrite "支持反斜杠转义数字(</code>到<code>)可以插入匹配相应括号组的文本。".