今天在某論壇中看到應用Python對中文進行分句的源碼(http://www.corpus4u.org/forum/showthread.php?s=86a8e08ccda003206c8f8d66c011df67&t=8662&page=2),原理很簡單,帖上來傳播一下。注釋是我自己加上去的。向原作者致謝!
# coding: utf-8 #設定分句的標誌符號;可以根據實際需要進行修改cutlist ="。!?".decode('utf-8')#檢查某字元是否分句標誌符號的函數;如果是,返回True,否則返回Falsedef FindToken(cutlist, char): if char in cutlist: return True else: return False #進行分句的核心函數 def Cut(cutlist,lines): #參數1:引用分句標誌符;參數2:被分句的文本,為一行中文字元 l = [] #句子列表,用於儲存單個分句成功後的整句內容,為函數的傳回值 line = [] #臨時列表,用於儲存捕獲到分句標誌符之前的每個字元,一旦發現分句符號後,就會將其內容全部賦給l,然後就會被清空 for i in lines: #對函數參數2中的每一字元逐個進行檢查 (本函數中,如果將if和else對換一下位置,會更好懂) if FindToken(cutlist,i): #如果當前字元是分句符號 line.append(i) #將此字元放入臨時列表中 l.append(''.join(line)) #並把當前臨時列表的內容加入到句子列表中 line = [] #將符號列表清空,以便下次分句使用 else: #如果當前字元不是分句符號,則將該字元直接放入臨時列表中 line.append(i) return l #以下為調用上述函數實現從文字檔中讀取內容並進行分句。for lines in file("t.txt"): l = Cut(list(cutlist),list(lines.decode('gbk'))) for line in l: if line.strip() !="": li = line.strip().split() for sentence in li: print i,sentence
===================節操分隔線,以上為7月6日內容,以下為7月7日內容============================
不知何故,上述程式突然運行報錯,位於“ l = Cut(list(cutlist),list(lines.decode('gbk'))) ”:UnicodeDecodeError: 'gbk' codec can't decode bytes in position 8-9: illegal multibyte sequence。
這肯定又是編碼問題了!這是我目前最頭疼的一個問題。這與那個t.txt的編碼格式有關,之前是utf-8格式。經過多次嘗試發現,把該文字文件的編碼改為ANSI就又正常了。不懂,不理解,這東西吭爹!