目录
1.找到分隔符的index
我们写个测试一下
输出值为
匹配到的:,有一个span 就是找到的标点符号的起始位置和结束位置
为了展示的更清楚一些span所表示的东西 我们再写个测试
可以看到在第一个输出中span[0]就是,的下标 span[1]是后面的‘预’的下标
后面就表示为m.span[0] (在循环中)
2.过滤特殊字符串 同时也是将文本分割为长短句
考虑多种不能作为分隔符的特殊情况
为了判断标点符号前有\t换行符 是否应该断开我们写一个测试
if __name__ == '__main__':
files = os.listdir(train_dir)
files = set([file.split('.')[0] for file in files])
for file in files:
path=os.path.join(train_dir,file+'.txt')
with open(path,'r',encoding='utf8') as f:
text = f.read()
pattern1 = '。|,|,|;|;|\.|\?'
for m in re.finditer(pattern1, text):
idx = m.span()[0] # 就是标点符号的下标 然后根据各个情况判断是否要断开 就是根据标点符号后面的内容决定的
if text[idx - 1] == '\n':
print(file, text[idx-10:idx+10]) # 如果前面是换行符 就打印出当前文章的file 然后打印出前后的内容 idx+-10
然后就要找到文档中找到对应的文段 判断能不能分 后面也可以依照这个是否断开看对整个模型的性能有没有提升
在我们查看相关文档后判断为 不作为分割点 所以直接continue就行了
同样的 我们继续找特殊情况
files = os.listdir(train_dir)
files = set([file.split('.')[0] for file in files])
for file in files:
path=os.path.join(train_dir,file+'.txt')
with open(path,'r',encoding='utf8') as f:
text = f.read()
pattern1 = '。|,|,|;|;|\.|\?'
for m in re.finditer(pattern1, text):
idx = m.span()[0] # 就是标点符号的下标 然后根据各个情况判断是否要断开 就是根据标点符号后面的内容决定的
if text[idx-1].isdigit() and text[idx+1].isdigit() :
print(file, text[idx-20:idx+20])
如果标点符号前后都是数字 再输出一下
很容易看出 这种情况也不应该split
同样的 数字加空格加数字的类型 也不能断开
完整过滤特殊字符代码:
def split_text(text):
split_index = []
pattern1 = '。|,|,|;|;|\.|\?'
for m in re.finditer(pattern1, text):
idx = m.span()[0] # 就是标点符号的下标 然后根据各个情况判断是否要断开 就是根据标点符号后面的内容决定的
if text[idx-1]=='\n':
continu