Как использовать tf.py_function для работы с tf.string? - PullRequest
1 голос
/ 16 июня 2019

У меня есть тензор со строками (tf.string), и я хочу разделить эти строки с помощью регулярного выражения и выполнить некоторую предварительную обработку.

Например, у меня есть функция

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

и мне нужно использовать его в графе тензорного преобразования для использования с tf-сервировкой в ​​будущем.

Но TF не позволяет мне работать с tf.string как с обычными строками в python.

Как я могу решить мою проблему, не создавая новую опцию TF в C ++?

P.S. Я использую TensorFlow 1.13

1 Ответ

1 голос
/ 16 июня 2019

Немного сложно, потому что TensorFlow (по крайней мере, насколько мне известно) не имеет функции разделения на регулярные выражения.

Если есть символ, который вы можете быть уверены, что ваши входные строки не будут содержать, вы можете сделатьнемного грязный обходной путь, используя tf.strings.regex_replace() и tf.strings.split().Сначала мы используем regex_replace, чтобы заменить совпадение нашим специальным символом, а затем split, чтобы разделить специальный символ

Например, если мы можем быть уверены, что наши входные строки никогда не будут содержать символ | тогда мы могли бы поступить следующим образом:

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...