Python中文文本分句

参考博客:https://blog.csdn.net/blmoistawinde/article/details/82379256

该博客将引号的情况也考虑进来,

然后实践中发现还有括号的问题。

import re
def cut_sent(para):
    para = re.sub('([。!?\?])([^”’])', r"\1\n\2", para)  # 单字符断句符
    para = re.sub('(\.{6})([^”’])', r"\1\n\2", para)  # 英文省略号
    para = re.sub('(\…{2})([^”’])', r"\1\n\2", para)  # 中文省略号
    para = re.sub('([。!?\?][”’])([^,。!?\?])', r'\1\n\2', para)
    # 如果双引号前有终止符,那么双引号才是句子的终点,把分句符\n放到双引号后,注意前面的几句都小心保留了双引号
    para = para.rstrip()  # 段尾如果有多余的\n就去掉它
    # 很多规则中会考虑分号;,但是这里我把它忽略不计,破折号、英文双引号等同样忽略,需要的再做些简单调整即可。
    return para.split("\n")

代码中


    para = re.sub('([。!?\?])([^”’])', r"\1\n\2", para)  # 单字符断句符
   

表示第一组匹配。!?出现,第二组匹配后面跟的不是双引号,才能进行断句。那么在第一组匹配结果和第二组匹配结果之间加上换行符。

    para = re.sub('([。!?\?][”’])([^,。!?\?])', r'\1\n\2', para)

表示在第一组中匹配到。!?,之后匹配到双引号,然后第二组匹配判断后面的符号,是为了将换行符放到双引号后面。

并且在文中出现括号的时候,需要将右括号也考虑进来。


    para = re.sub('([。!?\?])([^”^)^)’])', r"\1\n\2", para)  
    #如果。!?后面不是双引号和中英的右括号,才可以加入换行
    para = re.sub('([。!?\?][”))’])([^,。!?\?])', r'\1\n\2', para)
    #同上将中英右括号加入考虑,把换行放其后方。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值