文本预处理

我需要做的是:读取txt文件,提取文本中所有带有书名号的内容,并存在一个txt文件里,做我的专有名词词典
1.读取txt文件
2.找出所有带有书名号的内容
3.提出所有重复的内容
4.存在新的txt文件中
更新了方法二,建议直接跳到方法二

方法一(建议看方法二)

1.读取文件+筛选出书名号内容

这个方法比较繁琐,可以看下一个代码块

TXTtemp = open("old_sentence.txt",encoding="utf-8")
txtbuffer = TXTtemp.read()oldlist=['']#list型newlist=['']#list型#oldlist存放txt文档中的内容oldlist=list(txtbuffer)forindexin range(len(txtbuffer)):
    if oldlist[index]=="《":#这里range中的数字是根据书名号中内容的长度改变的,写最大的即可#例如我的所有书名内容长度不超过50,我这里写的50forjin range(50):
            if oldlist[index+j]=="》":#我这里的“/nw"是因为我做NLP任务的需要#不需要的,删掉即可,更改为”》“
                newlist.append("》/nw")
                newlist.append("\n")j=0break
            newlist.append(oldlist[index+j])            
print(newlist)

2.存入新文档

strlist ="".join(newlist)#strlist是str类型
txtnew = open("newtxt.txt","w")
txtnew.write(strlist)
txtnew.close()
TXTtemp.close()
print(strlist)

3.剔除重复内容+存文件

#打开新的文件
TXTtemp = open("newtxt.txt")#readlines() 将读取的内容转成list型
txtbuffer = TXTtemp.readlines()#list类型#set()可以直接剔除重复内容,但是处理后的文档顺序可能有变化,因为我不在意顺序,所以没有关注后续处理
txtbuffer = list(set(txtbuffer))
print(txtbuffer)#重新存入原来的新文档
strlist ="".join(txtbuffer)
txtnew = open("newtxt.txt","w")
txtnew.write(strlist)
txtnew.close()
TXTtemp.close()#完成!

  • 文档地址;
  • 第1部分,range()括号中的数,取决于你书名号内容的最大长度;(这部分还有“》”后边的内容)
  • 有的可能还需要修改读取文件时解码的类型,encoding=“ ”

方法二 用正则的方法可以一步到位

import re
#读取文件
TXTtemp = open("old_sentence.txt",encoding="utf-8")
txtbuffer = TXTtemp.read()#使用findall(),用正则找到所有的带书名号的内容
temp = re.findall("《.*?》",txtbuffer)#剔除重复的
result = set(temp)
print(result)#存入新文件
strlist ="".join(txtbuffer)
txtnew = open("newtxt.txt","w")
txtnew.write(strlist)
txtnew.close()
TXTtemp.close()

参考: