美文网首页
Note - 中文分句

Note - 中文分句

作者: 汉江岳 | 来源:发表于2019-08-14 18:11 被阅读0次

    起因: 直接清洗后的新闻文档(str)用jieba分词 觉得不妥,不便于做抽取式摘要(抽取关键句子)

    做中文分句还是蛮复杂的一件事!!!
    简单地使用 。!?进行分句会存在问题
    例如: 玄德幼时,与乡中小儿戏于树下,曰:“我为天子,当乘此车盖。”

    Google一番并测试之后,发现下面这两种方法效果都不错。推荐一哈

    参考1: https://github.com/fxsjy/jieba/issues/575#issuecomment-359637511

    import re
    
    # sentence seperate pattern
    sent_sep_pattern = re.compile('([﹒﹔﹖﹗.。!?]["’”」』]{0,2}|(?=["‘“「『]{1,2}|$))') # del :;
    def sentence_split(article):
        sent_list = []
        for ele in sent_sep_pattern.split(article):
            if sent_sep_pattern.match(ele) and sent_list:
                sent_list[-1] += ele
            elif ele:
                sent_list.append(ele)
        return sent_list
    

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

    # 版本为python3,如果为python2需要在字符串前面加上u
    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")
    

    相关文章

      网友评论

          本文标题:Note - 中文分句

          本文链接:https://www.haomeiwen.com/subject/otpnjctx.html