Как я должен отлаживать

#keras #nlp

#keras #nlp

Вопрос:

     def clean_str(string):
        string = re.sub(r"\", "", string)
        string = re.sub(r"'", "", string)
        string = re.sub(r""", "", string)
        return string.strip().lower()

    input_data = pd.read_csv('E:\data\rawData\labeledTrainData.tsv', sep='t')#导入数据

    for idx in range(input_data.review.shape[0]):
        text = BeautifulSoup(input_data.review[idx], features="html5lib")
        text = clean_str(text.get_text().encode('ascii', 'ignore'))
        texts.append(text)
        sentences = tokenize.sent_tokenize(text)
        reviews.append(sentences)
        labels.append(input_data.sentiment[idx])
  

ошибка:

Использование серверной части TensorFlow.

     Traceback (most recent call last):
      File "e:/python程序库/wu.py", line 379, in <module>
        text = clean_str(text.get_text().encode('ascii', 'ignore'))
      File "e:/python程序库/wu.py", line 370, in clean_str
        string = re.sub(r"\", "", string)
      File "C:Users29091Anaconda3libre.py", line 192, in sub
        return _compile(pattern, flags).sub(repl, string, count)
    TypeError: cannot use a string pattern on a bytes-like object
  

Ответ №1:

Ваша string переменная должна быть строкой python unicode, а не объектом bytes (при условии, что это py3):

 In [3]: re.sub(r"'", "", "jack's")
Out[3]: 'jacks'

In [4]: re.sub(r"'", "", b"jack's")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-0ca08a0c3ee4> in <module>()
----> 1 re.sub(r"'", "", b"jack's")

~/miniconda3/envs/address/lib/python3.6/re.py in sub(pattern, repl, string, count, flags)
    189     a callable, it's passed the match object and must return
    190     a replacement string to be used."""
--> 191     return _compile(pattern, flags).sub(repl, string, count)
    192 
    193 def subn(pattern, repl, string, count=0, flags=0):

TypeError: cannot use a string pattern on a bytes-like object

In [5]: re.sub(r"'", "", b"jack's".decode())
Out[5]: 'jacks'
  
  • первый вызов работает
  • добавление b префикса во втором примере для преобразования данных в байты приводит к той же ошибке, которую вы видите
  • добавление вызова для .decode преобразования байтов в строку снова исправляет ошибку