如何使用tf.py_function处理tf.string?

时间:2019-06-16 09:51:43

标签: tensorflow tensorflow-transform

我有带张量(tf.string)的张量,我想通过regexp分割此字符串并进行一些预处理。

例如,我有功能

py_split(x):
    x = x.lower()
    x = re.split(r"(http:\/\/)|(https:\/\/)|(\W)", x)
    return x

,我需要在tensorflow-transform图中使用它,以便将来与tf服务一起使用。

但是TF不允许我使用tf.string与python中的普通字符串相同。

如何在不使用C ++制作新的TF op的情况下解决问题?

P.S。我使用TensorFlow 1.13

1 个答案:

答案 0 :(得分:1)

有点棘手,因为TensorFlow(至少据我所知)没有正则表达式拆分功能。

如果有一个可以确定您输入的字符串不包含的字符,则可以使用tf.strings.regex_replace()tf.strings.split()进行一些麻烦的解决。我们首先使用regex_replace来将匹配替换为特殊字符,然后使用split分割特殊字符

例如,如果可以确定我们的输入字符串将永远不包含char |,则可以按以下步骤进行操作:

def split(x):
  x = tf.strings.regex_replace(x, "(http:\/\/)|(https:\/\/)|(\W)", "|")
  return tf.strings.split(tf.expand_dims(x, 0), '|').values

split("http://www.bbc.co.uk")这样,给我们:

[b'', b'www', b'bbc', b'co', b'uk']