在日常工作中有时候会遇到这样的情况,一些中文句子需要通过标点符号将它们断开,效果如下图。
如果想通过标点符号将句子断开应该怎么实现呢?如上图,如果想要得到“Python基础教程”,和“Python入门教程(非常详细)”这两个句子,就需要让整句通过“,”断开。如何利用python实现呢?
思路:将全文的想要切开的标点符号替换成固定的符号,例如:“-”,然后通过“-”前后获取不同的句子,实现标点符号断句。
考察知识点:重点考察python的re模块的使用,对正则表达式的运用,以及文件操作。
代码如下:
from pathlib import Path
import re #导入需要的模块
p1=Path(‘1.txt’) #原始文件路径,建议与程序目录相同的相对路径
with p1.open(‘r’) as file: #打开原始文件
article=file.read() #获取原始文件的文字
mark=[‘?’,‘,’,‘-‘,‘|’,‘_’,‘–’,‘\n‘] #这里存放想要切开的标点符号
for m in mark: #遍历文件并将想要切开的标点符号统一替换成“-”
for n in article:
if m==n:
article=article.replace(m,‘-‘)
regex=re.compile(‘[^-]+(?=-|\n)’) #正则表达式匹配句子,并通过“-”符号将句子断开
r=regex.findall(article)
t=set(r) #将得到的句子存放在一个集合中,去除其中的重复项
with open(‘2.txt’,‘w’) as newfile: #新建一个txt文件用于存放新的句子
a = (i for i in t)
for x in a:
newfile.write(x+‘\n‘)
通过上面的代码就能实现利用标点符号将句子断开的目的,具体效果如下图。
改进点:有时候像“百度百科”、“菜鸟教程”、“知乎”等这样的短句子不是我们想要的。这个可以在正则表达式中固定匹配句子的长度,实现过滤掉字数较少的句子。