2016-12-07 9 views
0

Я следую за тюрториальным на LDA и сталкиваюсь с проблемой, так как turtorial сделан в python 3, и я работаю в 2.7 (тюрториальные требования работать в обоих). Насколько я понимаю, мне нужно превратить строки в unicode в python 2.x, прежде чем я смогу применить token.isnumeric(). Из-за моего отсутствия опыта и знаний я не уверен, как это сделать в следующем сценарии. у кого-нибудь есть решение?Эффективное превращение строк в unicode для python 2.7

data_dir = 'nipstxt/' 
yrs = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'] 
dirs = ['nips' + yr for yr in yrs] 
docs = [] 
for yr_dir in dirs: 
files = os.listdir(data_dir + yr_dir) 
    for filen in files: 
     # Note: ignoring characters that cause encoding errors. 
     with open(data_dir + yr_dir + '/' + filen) as fid: 
      txt = fid.read() 
     docs.append(txt) 

tokenizer = RegexpTokenizer(r'\w+') 
for idx in range(len(docs)): 
    docs[idx] = docs[idx].lower() # Convert to lowercase. 
    docs[idx] = tokenizer.tokenize(docs[idx]) # Split into words. 

docs = [[token for token in doc if not token.isnumeric()] for doc in docs] 

docs = [[token for token in doc if len(token) > 1] for doc in docs] 

ответ

0

Общий способ преобразовать строку байт в строку Юникод с decode. Если вы знаете, что строка будет содержать только символы ASCII (как номер будет), вам не нужно указывать параметр, по умолчанию он будет равен ascii.

docs = [[token for token in doc if not token.decode().isnumeric()] for doc in docs] 

Если есть шанс, что строка будет содержать не-ASCII символы, вы можете получить те, заменены специальным символом, который не будет рассчитывать как числовой.

docs = [[token for token in doc if not token.decode(errors='replace').isnumeric()] for doc in docs] 
+0

Спасибо, это, кажется, на правильном пути, так как он дал мне новую ошибку: UnicodeDecodeError: «ASCII» кодек не может декодировать байт 0xf8 в положении 0: порядковый не в диапазоне (128). Я предполагаю, что это означает, что некоторые символы 'ascii'. Могу ли я установить параметр, чтобы справиться с этим? – WiggyStardust

+0

@WiggyStardust Я уже ожидал этой проблемы, см. Мое редактирование. –

+0

Отлично, спасибо! – WiggyStardust