TypeError: нельзя использовать шаблон байтов для строкового объекта - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь разбить предложение на слова.В следующем коде я пытаюсь разбить предложение на слова, используя некоторые предопределенные параметры разбиения.

import re
_WORD_SPLIT = re.compile(b"([.,!?\"':;)(])")

def basic_tokenizer(sentence):
    words = []
    for space_separated_fragment in sentence.strip().split():
        words.extend(_WORD_SPLIT.split(space_separated_fragment))
    return [w for w in words if w]

basic_tokenizer("I live, in Mumbai.")

Это показывает мне ошибку:

TypeError: невозможно использовать шаблон байтовна строковом объекте.

Раньше этот код работал правильно для меня, но когда я переустанавливаю и устанавливаю tensorflow, он показывает мне ошибку.Я также использовал функцию .decode(), но это не решило мою проблему.

Я использую python3.6 в Ubuntu.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

re.compile принимает нормальную строку. re.compile

import re
_WORD_SPLIT = re.compile("([.,!?\"':;)(])")

def basic_tokenizer(sentence):
    words = []
    for space_separated_fragment in sentence.strip().split():
        words.extend(_WORD_SPLIT.split(space_separated_fragment))
    return [w for w in words if w]
print(basic_tokenizer("I live, in Mumbai."))
#['I', 'live', ',', 'in', 'Mumbai', '.']
1 голос
/ 17 апреля 2019

Вы дали байтовый объект во время компиляции re и при вызове его вы предоставляете строковый объект space_seprated_fragment

, преобразует его в байты при передаче его в _WORD_SPLIT:

import re
_WORD_SPLIT = re.compile(b"([.,!?\"':;)(])")

def basic_tokenizer(sentence):
    words = []
    for space_separated_fragment in sentence.strip().split():
        words.extend(_WORD_SPLIT.split(space_separated_fragment.encode()))
    return [w for w in words if w]

basic_tokenizer("I live, in Mumbai.")
...