從普通檔案中例如txt中讀到的中文是使用gbk編碼的。但是我始終不知道decode('gbk')之後是什麼編碼。但是那種應該是某個unicode編碼.
我不知道有沒有好的處理方式。但是中文分詞要先分句。結果我使用string.maketrans()或者是re.sub()..都沒有起到將七七八八的符號轉換為空白格的效果。最後發現可能是由於編碼的問題。然後使用了笨方法來做分句,一個一個字元讀,讀到對應的就分句。另外注意這裡如果是gbk編碼一定要decode('gbk'),而且不能編碼成utf-8,也不能使用過去的gbk活著gb2312編碼。否則你分出來的句子就會有亂碼的問題。這個問題,我一直不明白為啥米。下面是:
def Cut(cutlist,lines):<br /> l = []<br /> line = []</p><p> for i in lines:<br /> if FindTok(cutlist,i):<br /> l.append("".join(line))<br /> l.append(i)<br /> line = []<br /> else:<br /> line.append(i)<br /> return l
然後以行讀檔案,在切分行為句。上面返回的結果中含有標點符號。標點符號單獨存。並且可能結果中包含空格。
cutlist = "[。,,!……!《》<>/"'::?/?、/|“”‘’;]{}(){}【】(){}():?!。,;、~——+%%`:“”"'‘/n/r".decode('gbk')<br />for lines in file(inputfilename):<br /> l = Cut(list(cutlist),list(lines.decode('gbk')))<br /> for line in l:<br /> if line.strip() <> "":#這裡可能包含空格<br /> li = line.strip().split()<br /> for sentence in li:<br /> print "se:",sentence
大家要copy代碼的時候注意格式。反正不管怎麼說,總算把中文分句搞定了。大家可以根據自己的需要減少或者增加cutlist