Python-从txt中获取所有带有书名号的内容,并去除重复内容
- 文本预处理
- ~~方法一(建议看方法二)~~
- 1.读取文件+筛选出书名号内容
- 2.存入新文档
- 3.剔除重复内容+存文件
- 方法二 用正则的方法可以一步到位
文本预处理
我需要做的是:读取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)
for index in range(len(txtbuffer)):
if oldlist[index] == "《":
#这里range中的数字是根据书名号中内容的长度改变的,写最大的即可
#例如我的所有书名内容长度不超过50,我这里写的50
for j in range(50):
if oldlist[index+j] == "》":
#我这里的“/nw"是因为我做NLP任务的需要
#不需要的,删掉即可,更改为”》“
newlist.append("》/nw")
newlist.append("\n")
j=0
break
newlist.append(oldlist[index+j])
print(newlist)
可以看到我查找出来的内容,他是list类型,并且一个字一个字存放的,所以这个时候我没有做重复的剔除,是在稍后的步骤实现的。(因为是小白所以不太会,欢迎大佬指点更快捷的操作)
2.存入新文档
strlist = "".join(newlist) #strlist是str类型
txtnew = open("newtxt.txt","w")
txtnew.write(strlist)
txtnew.close()
TXTtemp.close()
print(strlist)
查看输出的内容,可以发现有很多重复的内容,所以接下来我要剔除重复的部分,现在strlist是str类型,稍后转成list可以一步到位剔除。
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()
参考:
- 6种在 Python 中从 List 中删除重复项的方法
- Python学习12_python3.4.3实现txt文本指定字符提取