2014-01-23 86 views
0

所以我一直在尋找到這對相當多,到目前爲止,我正在一個字符串,並執行以下操作:刪除特殊字符,解碼和編碼後

title = title.decode('windows-1252') 
title = title.encode('utf-8','replace') 

我的字符串如下,儘管可以有其他字符不會被刪除。

Bus • Lorry • IT & Construction 

標點刪除:

title = title.translate(string.punctuation) 

這似乎成爲(後標點刪除):

Bus • Lorry • IT Construction 

雖然現在我得到,我分割字符串的問題,並嘗試加入吧重新走到一起。我把它拆分:

['Bus', '\xc3\xa2\xe2\x82\xac\xc2\xa2', 'Lorry', '\xc3\xa2\xe2\x82\xac\xc2\xa2', 'IT', 'Construction'] 

通過: 字= text.split(」「)

的嘗試重返一旦我了一些每個單詞詞根:

text = ' '.join([stemmer.stem(word) for word in words]) 

而且那麼,在這一點上,我碰到一個問題:

「ASCII」編解碼器不能在位置0解碼字節0xc3:有序不在範圍內(128)

但我很困惑,從閱讀的網站,我需要進行編碼和解碼,我覺得自己的已經做了....

+0

您應該在'unicode'中處理文本,之後再輸出,再次在'utf8'中編碼。你可以試試嗎? –

+0

另外請注意,你實際上並沒有_removing標點符號,你只是在utf8中重新編碼它。 –

+1

我正在刪除它:title = title.translate(string.punctuation)我只是沒有把那部分放在 – redrubia

回答

0

您需要解碼後的數據被輸入,將其用作unicode並僅對輸出進行編碼。如果某些東西試圖在不知道原始編碼的情況下將編碼字符串編碼爲unicode對象,則會引發UnicodeDecodeError

在你的情況下,我會嘗試拆分並在編碼爲UTF-8之前分割並運行詞幹分析器。這隻會用於輸出或(可能)存儲。

+0

我試過這個,我在那裏做了:解碼,刪除點,幹,編碼按此順序)。我現在遇到了刪除標點符號的問題:title = title.translate(string.punctuation)。錯誤顯示它不喜歡我移動編碼的效果:翻譯表必須是256個字符長 – redrubia

+0

from python docs: 「string。標點符號 在C語言環境中被認爲是標點符號的ASCII字符的字符串。「 - 您的輸入和輸出都不是ASCII,所以string.punctuation不適用 – knitti