Python 中文分句

今天在某论坛中看到应用Python对中文进行分句的源码(http://www.corpus4u.org/forum/showthread.php?s=86a8e08ccda003206c8f8d66c011df67&t=8662&page=2),原理很简单,帖上来传播一下。注释是我自己加上去的。向原作者致谢!

# coding: utf-8 

#设置分句的标志符号;可以根据实际需要进行修改
cutlist ="。!?".decode('utf-8')

#检查某字符是否分句标志符号的函数;如果是,返回True,否则返回False
def 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 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就又正常了。不懂,不理解,这东西吭爹!

你可能感兴趣的:(Python)