parent
57a2ed2788
commit
35d113b86f
@ -1,6 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import docx
|
import docx
|
||||||
from docx.oxml.ns import nsmap
|
|
||||||
|
|
||||||
|
|
||||||
def read_word_content(docx_path):
|
def read_word_content(docx_path):
|
@ -0,0 +1,99 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from Util.SplitDocxUtil import SplitDocxUtil
|
||||||
|
|
||||||
|
|
||||||
|
def split_into_blocks(text):
|
||||||
|
"""按行遍历文本,发现'问题X'或'话题X'时开始分割,只移除前缀但保留整行内容"""
|
||||||
|
blocks = []
|
||||||
|
current_block = []
|
||||||
|
in_block = False
|
||||||
|
|
||||||
|
for line in text.splitlines():
|
||||||
|
if line.startswith(('问题', '话题')) and any(c.isdigit() for c in line[:5]):
|
||||||
|
if in_block:
|
||||||
|
blocks.append('\n'.join(current_block))
|
||||||
|
current_block = []
|
||||||
|
in_block = True
|
||||||
|
# 循环移除问题和话题前缀后的数字
|
||||||
|
while line and (line.startswith(('问题', '话题')) or (line and line and line[0].isdigit())):
|
||||||
|
if line.startswith(('问题', '话题')):
|
||||||
|
line = line[2:] if len(line) > 2 else line
|
||||||
|
elif line and line[0].isdigit():
|
||||||
|
line = line[1:] if len(line) > 1 else line
|
||||||
|
line = line.strip()
|
||||||
|
if in_block and line: # 只添加非空行
|
||||||
|
current_block.append(line)
|
||||||
|
|
||||||
|
if current_block:
|
||||||
|
blocks.append('\n'.join(current_block))
|
||||||
|
|
||||||
|
return [(i+1, block) for i, block in enumerate(blocks)]
|
||||||
|
|
||||||
|
def process_document(input_path, output_dir):
|
||||||
|
"""处理文档主函数"""
|
||||||
|
text = SplitDocxUtil.read_docx(input_path)
|
||||||
|
if not text:
|
||||||
|
print("无法读取输入文件内容")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# 清空目录操作已移到process_directory函数中
|
||||||
|
|
||||||
|
chunks = split_into_blocks(text)
|
||||||
|
print(f"共分割出{len(chunks)}个段落块")
|
||||||
|
|
||||||
|
saved_count = 0
|
||||||
|
# 从输入文件名中提取MATH_1部分
|
||||||
|
file_prefix = os.path.basename(input_path).split('.')[0].split('_')[-2] + '_' + os.path.basename(input_path).split('.')[0].split('_')[-1]
|
||||||
|
|
||||||
|
for chunk_num, chunk in chunks:
|
||||||
|
chunk = chunk.strip() # 确保去除空白字符
|
||||||
|
output_file = os.path.join(output_dir, f"{file_prefix}_{chunk_num}.txt")
|
||||||
|
if save_to_txt(chunk, output_file, mode='w'):
|
||||||
|
saved_count += 1
|
||||||
|
|
||||||
|
print(f"处理完成,共保存{saved_count}个文件到目录: {output_dir}")
|
||||||
|
return saved_count > 0
|
||||||
|
|
||||||
|
# 保留原有的save_to_txt函数
|
||||||
|
def save_to_txt(content, file_path, mode='w'):
|
||||||
|
"""将内容保存到文本文件"""
|
||||||
|
try:
|
||||||
|
with open(file_path, mode, encoding='utf-8') as f:
|
||||||
|
f.write(content)
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
print(f"保存文件{file_path}时出错: {str(e)}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
def process_directory(input_dir, output_dir):
|
||||||
|
"""处理目录下所有docx文件"""
|
||||||
|
if not os.path.exists(input_dir):
|
||||||
|
print(f"输入目录不存在: {input_dir}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# 确保输出目录存在并清空目录(只需一次)
|
||||||
|
if os.path.exists(output_dir):
|
||||||
|
for file in os.listdir(output_dir):
|
||||||
|
os.remove(os.path.join(output_dir, file))
|
||||||
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
|
||||||
|
docx_files = [f for f in os.listdir(input_dir) if f.lower().endswith('.docx')]
|
||||||
|
if not docx_files:
|
||||||
|
print(f"目录中没有找到docx文件: {input_dir}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
success_count = 0
|
||||||
|
for docx_file in docx_files:
|
||||||
|
input_path = os.path.join(input_dir, docx_file)
|
||||||
|
print(f"正在处理文件: {docx_file}")
|
||||||
|
if process_document(input_path, output_dir):
|
||||||
|
success_count += 1
|
||||||
|
|
||||||
|
print(f"处理完成,共处理{success_count}/{len(docx_files)}个文件")
|
||||||
|
return success_count > 0
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
input_dir = '../static/Txt'
|
||||||
|
output_dir = '../Txt'
|
||||||
|
process_directory(input_dir, output_dir)
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 62 KiB |
Binary file not shown.
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 120 KiB |
Loading…
Reference in new issue