最后整体代码
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 = 0
for i in range(len(raw)):
if raw["head"][i] == "第" and raw["mid"][i] > 0 and raw["len"][i] < 30:
chap_num += 1
if chap_num >= 40 and raw["txt"][i] == "附录一:成吉思汗家族":
chap_num = 0
raw.loc[i, "chap"] = chap_num
del 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.index
paragraph = tmp_chap["txt"].values.tolist()
return paragraph
# 将每段进行分句
def cut(para):
# 相关规则
pattern = ["([。!??])([^”’])","(.{6})([^”’])","(…{2})([^”’])","([。!??][”’])([^,。!??])"]
for i in pattern:
para = re.sub(i, r"1
2", para)
para = para.rstrip()
return para.split("
")
# 将其中被错分的语句进行连接(主要是针对话语)
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 = False
sentence = sentence + i
if i.find("”") > 0:
list.append(sentence)
sentence = ""
FLAG = True
sentence_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()
两个符号均有,则该句直接就是一整句,直接就加入两个符号都没有,则该句直接就是一整句,直接就加入如果只有前面符号而无后面符号,则记录有前面符号那一句,依次往下拼接,直到遇到字符最后有“,将上面拼接好的语句作为一整句放入
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 = False
sentence = sentence + i
if i.find("”") > 0:
list.append(sentence)
sentence = ""
FLAG = True
sentence_after.append(list)
return sentence_after
实现对文本的分句,大致来说主要是以中文的句号、感叹、问号等符号进行分句。难点在于直接分句可能会造成人物说话的语句也被分开!
首先读取文本,文本读取后整体是一个字符串,每一个段之间是空白,所以分段之间按照空白分开来即可,最后存入一个paragraph_list,注意该list的下标就是段落的顺序号!其他的这里就不再多赘述!
import re
def cut_sent(para):
para = re.sub("([。!??])([^”’])", r"1
2", para)
para = re.sub("(.{6})([^”’])", r"1
2", para)
para = re.sub("(…{2})([^”’])", r"1
2", para)
para = re.sub("([。!??][”’])([^,。!??])", r"1
2", para)
para = para.rstrip()
return para.split("
")
# 这一段文字分句后应该有的结果
s = "今天天气好啊!"
"温度高吗?你好,很高兴遇见你,真不错。"
"小明遇见小红说:"你的衣服这好看!""
"小红说:"什么?衣服真好看?真的吗?""
"小明回答到:"嗯,真的!我也想买。""
for i in cut_sent(s):
print(i)
#结果将人物语句也分开
"""
今天天气好啊!
温度高吗?
你好,很高兴遇见你,真不错。
小明遇见小红说:"你的衣服这好看!
"小红说:"什么?
衣服真好看?
真的吗?
"小明回答到:"嗯,真的!
我也想买。
"
"""
????往期优质文章分享
早餐店不会开到晚上,想吃的人早就来了!????
步骤
你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!
问题
这里解决办法就是循环每一句,识别:"和"
最后的最后由本人水平所限,难免有错误以及不足之处,屏幕前的靓仔靓女们如有发现,恳请指出!
C++QT结合FFmpeg实战开发视频播放器-01环境的安装和项目部署解决QT问题:运行qmake:ProjectERROR:Cannotruncompiler‘cl‘.Output:解决安装QT后MSVC201564bit配置无编译器和调试器问题Qt中的套件提示nocompliersetinkit和nodebugger,出现黄色感叹号问题解决Python+selenium自动化-实现自动导入、上传外部文件
????如果感觉文章看完了不过瘾,可以来我的其他专栏看一下哦~????比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++QT实战类项目和算法学习专栏????可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
???? Python实战微信订餐小程序 ???? | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
????Python量化交易实战 ???? | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
❤️ C++ QT结合FFmpeg实战开发视频播放器❤️ | 难度偏高 | 分享学习QT成品的视频播放器源码,需要有扎实的C++知识! |
???? 游戏爱好者九万人社区???? | 互助/吹水 | 九万人游戏爱好者社区,聊天互助,白嫖奖品 |
???? Python零基础到入门 ???? | Python初学者 | 针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门 |
文章为作者独立观点,不代表股票配资公司观点