如果想要将关键词所在的句子重新保存在一个新的txt文件中,所在的句子指的是以句号"."开始,以句号"."结束的句子,而不是整片文章,应该如何修改?
import re
with open('keyword.txt', 'r') as file:
keyword = [word.strip() for word in file.readlines()]
with open('file.txt', 'r') as file:
article = file.read()
unmatched_keywords = []
for word in keyword:
pattern = re.compile(fr'\b{re.escape(word)}\b')
match = re.search(pattern, article)
if match:
article = re.sub(pattern, f"<b>{match.group()}</b>", article, count=1) #注意这里!!!
else:
unmatched_keywords.append(word)
print(article)
with open('unmatched_keywords.txt', 'w') as file:
for word in unmatched_keywords:
file.write(word + '\n')
你好,在吗?你这个问题有点问题,
不知道你这个问题是否已经解决, 如果还没有解决的话:在基于深度学习的目标检测任务中,往往需要将数据图片划分成训练集、验证集与测试集,在此记录一种笨办法,各位大佬可忽略。
训练集:日常学习
验证集:模拟考试
测试集:期末考试
# 将一个文件夹下数据按比例分在三个文件夹下
import os
import random
import shutil
from shutil import copy2
datadir_normal = "/****/*****/****/****/JPEGImages/labels"#更换为自己的路径
all_data = os.listdir(datadir_normal)#(图片文件夹)
num_all_data = len(all_data)
print( "总数量: " + str(num_all_data) )
index_list = list(range(num_all_data))
print(index_list)
#生成随机种子,使得每一次划分的数据一样,如果没有要求,可以删除本段代码
r=random.random
random.seed(2021)
random.shuffle(index_list,random=r)
print(index_list)
#生成随机种子,使得每一次划分的数据一样,如果没有要求,可以删除本段代码
num = 0
trainDir = "/****/*****/****/****/JPEGImages/train/"#(将训练集放在这个文件夹下)
if not os.path.exists(trainDir):
os.mkdir(trainDir)
validDir = '/****/*****/****/****/JPEGImages/valid/'#(将验证集放在这个文件夹下)
if not os.path.exists(validDir):
os.mkdir(validDir)
testDir = '/****/*****/****/****/JPEGImages/test/'#(将测试集放在这个文件夹下)
if not os.path.exists(testDir):
os.mkdir(testDir)
for i in index_list:
fileName = os.path.join(datadir_normal, all_data[i])
if num < num_all_data*0.6: #Train:0.6
print(str(fileName))
copy2(fileName, trainDir)
elif num>num_all_data*0.6 and num < num_all_data*0.8:#valid:0.2
print(str(fileName))
copy2(fileName, validDir)
else:#test:0.2
copy2(fileName, testDir)
num += 1
运行后,将在JPEGImages文件夹下看到多了train、test、valid3个文件夹,如下图:
文件夹内容就是根据上边的程序划分的标签txt文件。
find /*****/******/*****/****/JPEGImages/test -name "*.txt" > TEST.txt
find /*****/******/*****/****/JPEGImages/train -name "*.txt" > TRAIN.txt
find /*****/******/*****/****/JPEGImages/valid -name "*.txt" > VALID.txt
/home/outsider/其他/1/JPEGImages/valid/20210110113149061.txt
需要使用文档的查找与替换功能将3个txt文档内的名称修改为如下格式:
20210110113149061
文档的查找与修改如下:
替换后效果如下:
from PIL import Image
im_num = []
for line in open("/***/****/***/VALID.txt", "r"):
im_num.append(line)
print(im_num)
for a in im_num:
im_name = '/***/***/***/JPEGImages/images/{}'.format(a[:-1]) + '.jpg' #原始路径
print(im_name)
im = Image.open(im_name) # 打开指定路径下的图像
tar_name = '/***/***/***/JPEGImages/valid/{}'.format(a[:-1]) + '.jpg' #移动后的路径
print(tar_name)
im=im.convert('RGB')
im.save(tar_name) # 另存
im.close()
每次运行后,需要将文件名修改下,修改为相对应的txt文档,程序运行结束后,将在train、test、valid3个文件夹内看到程序已经将标签txt对应的图片复制过来了。
到此,数据集就已经划分好了,也可以根据图片名称将对应的txt文件复制到相应的文件夹内,方法比较老实,大佬们就不用看啦。
最后,我将两个py文件放在下方。
首先,根据题目描述,我们需要从原始文本中筛选以句号"."开始、以句号"."结束的句子,并将这些句子保存到一个新的txt文件中。以下是修改的代码实现该功能:
import re
def save_sentences_with_keyword(keyword, original_filename, new_filename):
with open(original_filename, 'r') as file:
content = file.read()
# 使用正则表达式匹配以句号"."开始、以句号"."结束的句子
sentences = re.findall(r'\.[^\.]+\.', content)
# 根据关键词筛选句子
keyword_sentences = [sentence for sentence in sentences if keyword in sentence]
# 将筛选出的句子保存到新的txt文件中
with open(new_filename, 'w') as file:
for sentence in keyword_sentences:
file.write(sentence + '\n')
save_sentences_with_keyword('关键词', '原始文本.txt', '新的文本文件.txt')
注意:在代码中,需要将关键词
替换为实际的关键词,原始文本.txt
替换为实际的原始文本文件名,新的文本文件.txt
替换为保存筛选出的句子的新的文本文件名。
这个代码会根据关键词从原始文本中提取出符合要求的句子,并将这些句子保存到新的文本文件中。请确保新的文本文件.txt
是一个不存在的文件,否则会覆盖原有内容。