我有带张量(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
答案 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']