在文本文件中的特定单词之前和之后获取单词
我有一个包含一些其他文件夹的文件夹,每个文件夹都包含大量文本文件,大约32214个文件。我想在特定单词前后打印5个单词,我的代码应该读取所有这些文件。下面的代码工作正常,但大约需要8个小时才能阅读所有文件并提取语句。我如何更改代码以便在几分钟之内读取和打印句子? (语言为波斯语)在文本文件中的特定单词之前和之后获取单词
.
.
.
def extact_sentence():
f= open ("پاکت", "w", encoding = "utf-8")
y = "پاکت"
text= normal_text(folder_path) # the first function to normalize the files
for i in text:
for line in i:
split_line = line.split()
if y in split_line:
index = split_line.index(y)
d = (' '.join(split_line[max(0,index-5):min(index+6,len(split_line))]))
f.write(d + "\n")
f.close()
使用os.walk
访问所有文件。然后在每个文件上使用滚动窗口,并检查每个窗口的中间词:
import os
def getRollingWindow(seq, w):
win = [next(seq) for _ in range(window_size)]
yield win
for e in seq:
win[:-1] = win[1:]
win[-1] = e
yield win
def extractSentences(rootDir, searchWord):
with open("پاکت", "w", encoding="utf-8") as outfile:
for root, _dirs, fnames in os.walk(rootDir):
for fname in fnames:
print("Looking in", os.path.join(root, fname))
with open(os.path.join(root, fname)) as infile:
for window in getRollingWindow(word for line in infile for word in line.split(), 11):
if window[5] != searchWord: continue
outfile.write(' '.join(window))
NameError:name'infile'未定义 – sara
@sara:哎呀!现在修正了 – inspectorG4dget
对不起,但是又有一个错误:win = [seq.next()for cnt in range(11)] AttributeError:'generator'object has no attribute'next' – sara
什么让您认为每个文件可以在1/1000秒内处理? –
我不确定你能做些什么来加速代码本身,我认为瓶颈可能是硬盘驱动器访问,它可以加快asyncio的速度,但我怀疑它会大大提升速度 –
''normal_text'是否一次将所有文件加载到内存中?你写了'normal_text',那里的优化可能是可行的。 –