基于该思路的文本相似度对比程序

问题

实现对文本的分句,大致来说主要是以中文的句号、感叹、问号等符号进行分句。难点在于直接分句可能会造成人物说话的语句也被分开!

步骤

  1. 分段
    首先读取文本,文本读取后整体是一个字符串,每一个段之间是空白,所以分段之间按照空白分开来即可,最后存入一个paragraph_list,注意该list的下标就是段落的顺序号!其他的这里就不再多赘述!(可以查看最后的整体代码)
  2. 分句
    首先拿到上面分好的paragraph_list,循环拿到每一段,然后对每一段直接按照分句规则(正则表达式)进行分句,参考该文章
import redef 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)para = para.rstrip()return para.split("\n")# 这一段文字分句后应该有的结果
s = '今天天气好啊!' \'温度高吗?你好,很高兴遇见你,真不错。' \'小明遇见小红说:"你的衣服这好看!"' \'小红说:"什么?衣服真好看?真的吗?"' \'小明回答到:"嗯,真的!我也想买。"'for i in cut_sent(s):print(i)#结果将人物语句也分开
"""
今天天气好啊!
温度高吗?
你好,很高兴遇见你,真不错。
小明遇见小红说:"你的衣服这好看!
"小红说:"什么?
衣服真好看?
真的吗?
"小明回答到:"嗯,真的!
我也想买。
"
"""
  1. 连接
    这里解决办法就是循环每一句,识别:""

    • 两个符号均有,则该句直接就是一整句,直接就加入
    • 两个符号都没有,则该句直接就是一整句,直接就加入
    • 如果只有前面符号而无后面符号,则记录有前面符号那一句,依次往下拼接,直到遇到字符最后有,将上面拼接好的语句作为一整句放入
def connect(paragraph):sentence_before = []sentence_after = []for each_para in paragraph:sentence_before.append(cut(each_para))# 核心代码!(将被错分的语句进行连接)for each in sentence_before:list = []sentence = ""FLAG = True # 非常关键!判断有':“'的符号后面的语句是否继续拼接for i in each:if i.find(':“') * i.find('”') >= 0 and FLAG:list.append(i + sentence)else:FLAG = Falsesentence = sentence + iif i.find('”') > 0:list.append(sentence)sentence = ""FLAG = Truesentence_after.append(list)return sentence_after

最后整体代码

我的文本资源
链接:https://pan.baidu.com/s/16iYli6F-IsNkEwO3L2Z90g
密码:vmc2

import re
import pandas as pd# 将整篇文章进行分段
def segments(url):raw = pd.read_csv(url,names=['txt'], sep='aaa', encoding="GBK" ,engine='python')def m_head(tem_str):return tem_str[:1]def m_mid(tmp_str):return tmp_str.find("回 ")raw['head'] = raw.txt.apply(m_head)raw['mid'] = raw.txt.apply(m_mid)raw['len'] = raw.txt.apply(len)chap_num = 0for i in range(len(raw)):if raw['head'][i] == "第" and raw['mid'][i] > 0 and raw['len'][i] < 30:chap_num += 1if chap_num >= 40 and raw['txt'][i] == "附录一:成吉思汗家族":chap_num = 0raw.loc[i, 'chap'] = chap_numdel raw['head']del raw['mid']del raw['len']tmp_chap = raw[raw['chap'] == 7].copy()tmp_chap.reset_index(drop=True, inplace=True)tmp_chap['paraidx'] = tmp_chap.indexparagraph = tmp_chap['txt'].values.tolist()return paragraph# 将每段进行分句
def cut(para):# 相关规则pattern = ['([。!?\?])([^”’])','(\.{6})([^”’])','(\…{2})([^”’])','([。!?\?][”’])([^,。!?\?])']for i in pattern:para = re.sub(i, r"\1\n\2", para)para = para.rstrip()return para.split("\n")# 将其中被错分的语句进行连接(主要是针对话语)
def connect(paragraph):sentence_before = []sentence_after = []for each_para in paragraph:sentence_before.append(cut(each_para))# 核心代码!(将被错分的语句进行连接)for each in sentence_before:list = []sentence = ""FLAG = True # 非常关键!判断有':“'的符号后面的语句是否继续拼接for i in each:if i.find(':“') * i.find('”') >= 0 and FLAG:list.append(i + sentence)else:FLAG = Falsesentence = sentence + iif i.find('”') > 0:list.append(sentence)sentence = ""FLAG = Truesentence_after.append(list)return sentence_after# 将最后的结果保存到DataFrame
def toDataFrame(list3):df = pd.DataFrame(columns=["content","paragraph","sentence"])for para_num,i in enumerate(list3):for sentence_num,j in enumerate(i):df_ = pd.DataFrame({"content": j, "paragraph": para_num,"sentence":sentence_num+1},index=[para_num])df = df.append(df_,ignore_index=True)for i in df['content'].values.tolist():print(i)def main():# URL = "/Users/dengzhao/Downloads/金庸-射雕英雄传txt精校版.txt"URL = input("请输入文件地址:")para = segments(URL)result = connect(para)print(result)flag = input("以DataFrame形式输出数据(Y,N):")if flag == 'Y':toDataFrame(result)elif flag == 'N':print("Thanks!!!!")else:print("程序结束!请检查的你的输入!")if __name__ == '__main__':main()

有任何疑问,学习交流请直接联系我的邮箱:
d_zhao_work@163.com

Python实现对中文文本分句相关推荐

  1. python中文分句_python实现中文文本分句的例子

    对于英文文本分句比较简单,只要根据终结符"."划分就好,中文文本分句看似很简单,但是实现时会遇到很多麻烦,尤其是处理社交媒体数据时,会遇到文本格式不规范等问题. 下面代码针对一段一 ...

  2. python实现中文文本分句

    对于英文文本分句比较简单,只要根据终结符"."划分就好,中文文本分句看似很简单,但是实现时会遇到很多麻烦,尤其是处理社交媒体数据时,会遇到文本格式不规范等问题.下面代码针对一段一段 ...

  3. python中文分句_中文文本分句

    关于文本分句这点,说简单也简单,说复杂也复杂.一般的自然语言处理任务中对这点要求并不严格,一般按照句末标点切分即可.也有一些专门从事文本相关项目的行业,可能就会有较高的要求,想100%分句正确是要考虑 ...

  4. Python:snownlp中文文本情感分析

    hello,大家好,我是wangzirui32,今天来教大家如何使用snownlp的中文文本情感分析功能,开始学习吧! 1. pip 安装 命令: pip install snownlp -i htt ...

  5. Python中文文本分句

    参考博客:https://blog.csdn.net/blmoistawinde/article/details/82379256 该博客将引号的情况也考虑进来, 然后实践中发现还有括号的问题. im ...

  6. Python中文文本聚类

    原文:https://blog.csdn.net/yyxyyx10/article/details/63685382 简介 一 切词 二 去除停用词 三 构建词袋空间VSMvector space m ...

  7. 中文文本聚类(切词以及Kmeans聚类)

    简介 一 切词 二 去除停用词 三 构建词袋空间VSMvector space model 四 将单词出现的次数转化为权值TF-IDF 五 用K-means算法进行聚类 六 总结 简介 查看百度搜索中 ...

  8. 『NLP自然语言处理』中文文本的分词、去标点符号、去停用词、词性标注

    利用Python代码实现中文文本的自然语言处理,包括分词.去标点符号.去停用词.词性标注&过滤. 在刚开始的每个模块,介绍它的实现.最后会将整个文本处理过程封装成 TextProcess 类. ...

  9. 在Python里如何切分中文文本句子(分句)、英文文本分句(切分句子)

    在处理文本时,会遇到需要将文本以 句子 为单位进行切分(分句)的场景,而文本又可以分为 中文文本 和 英文文本 ,处理的方法会略有不同.本文会介绍 Python 是如何处理 分句 的. 分句的关键是找 ...

最新文章

  1. 通信upf是什么意思_5G给边缘计算带来了什么?
  2. leetcode算法题--大礼包
  3. 防止js全局变量污染方法总结-待续
  4. Ivan D Jankovic PhD Studentship** Application
  5. OSChina 周一乱弹 ——致我们终将逝去的青春
  6. .net 4.5部署到docker容器
  7. 航班管家发布《民航运行周报5.10- 5.16》
  8. 华米OV坐不住了!九大手机厂商围剿微信小程序
  9. 需求处理的三个步骤:需求梳理、需求分析、需求放大
  10. STC学习:可同步显示歌词的ABC英文歌
  11. Java异步NIO框架Netty实现高性能高并发
  12. JAVA时间格式化处理_java时间格式化处理
  13. 通过身份证号码进行归属地的查询、出生日期,以及判断性别(升级版)
  14. 汉字五行归属python实现
  15. RStudio不在Plots中显示图片的一个原因
  16. “XXX停止运行”问题解决
  17. 【神经网络与深度学习】1.线性分类与感知机
  18. OpenCV + CPP 系列(卌二)图像特征匹配( KAZE/AKAZE)
  19. 小老虎的微信公众号:iITObserve
  20. 如何屏蔽百度广告及百度热点

热门文章

  1. 金陵科技学院计算机分数,2018金陵科技学院录取分数线
  2. TM Forum的TAM中文架构图
  3. 长江存储推全新3D NAND架构 挑战三星存储
  4. 容器三把斧之 | namespace原理与实现
  5. 2-快速攻破vuex五大核心-附案例源码
  6. 机器学习与游戏,不只让AI玩星际争霸那么简单!
  7. ASP.NET Core Razor官方文档踩坑
  8. 快递鸟电⼦⾯单批量打印流程与注意事项
  9. 微信小程序列表首字母排序并根据字母定位
  10. python如何捕获指定异常_如何捕获Python中的异常