Функция байтов в Python 2.7 принимает только один аргумент - PullRequest
0 голосов
/ 22 декабря 2018

Я знаю bytes() в Python 3.7, который принимает до 3 аргументов, однако я использую Python 2.7, я пытаюсь считать n-грамм после очистки текста, проблема в том, что функция bytes, но она дает мнеследующая ошибка.

Я пытался закодировать его, используя encode("utf-8"), но это не решило проблему, я также пытался оставить его только с «контентом», но он вылетает, как только попадает в странный символ (т.е.Латинские символы или математические символы).

from urllib import urlopen
from bs4 import BeautifulSoup
import re,string
def cleanInput(input):
    input=re.sub('\n+'," ",input)
    input=re.sub("\[[0-9]*\]","",input)
    input=re.sub(" +"," ",input)
    input=bytes(input).encode("utf-8")
    input=input.decode("ascii","ignore")
    cleanInput=[]
    input=input.split(" ")
    for item in input:
        item.strip(string.punctuation)
        if len(item)>1 or item.lower()=='i' or item.lower()=="a":
            cleanInput.append(item)
    return cleanInput

Я ожидаю заменить команду bytes(content,"utf-8") на строку, которая делает то же самое, вот ошибка, которую я получаю UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 90: ordinal not in range(128)

1 Ответ

0 голосов
/ 04 января 2019

Вы кодируете Unicode и декодируете байты.Python 2 будет неявно преобразовывать в правильный тип, используя кодек ascii, если вы используете неправильный кодек, который выдает ошибку, которую вы видите.Обратите внимание, что Python 3 этого не сделает, поэтому легче отлавливать ошибки.

Если input имеет тип unicode, тогда просто используйте input.encode('utf8').decode('ascii','ignore'), чтобы удалить все кодовые точки Unicode> U + 00FF.

Если input имеет тип str, просто используйте input.decode('ascii','ignore').

PS Не используйте имена встроенных функций Python в качестве имен переменных.input() является встроенным.

...