Repository navigation
Expand file tree
/
Copy pathgrammar_check.py
More file actions
86 lines (73 loc) · 3.23 KB
/
Copy pathgrammar_check.py
File metadata and controls
86 lines (73 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from llm.model import get_grammar_check_chain
from filereader.reader import extract_text_from_pdf, extract_text_from_docx, chunking
import argparse
import os
import logging
import json
def parse_args():
parser = argparse.ArgumentParser(description="Consistency Check Model")
parser.add_argument("--model_name", type=str, default="qwen-plus", help="Model name")
parser.add_argument("--base_url", type=str, default="https://dashscope.aliyuncs.com/compatible-mode/v1", help="Base URL")
parser.add_argument("--docx_data", type=str, default="./dataset/test.docx", help="Docs Dataset path")
#parser.add_argument("--pdf_data", type=str, default="./dataset/test.pdf", help="PDF Dataset path")
parser.add_argument("--log_dir", type=str, default="./logs", help="Output path")
args = parser.parse_args()
return args
def logging_config(args):
# 日志文件路径
log_dir = args.log_dir
os.makedirs(log_dir, exist_ok=True)
log_file = os.path.join(log_dir, "consistency_check.log")
# 配置 logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG) # 可设置为 DEBUG/INFO 等
# 控制台 Handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_formatter = logging.Formatter("[%(levelname)s] %(message)s")
console_handler.setFormatter(console_formatter)
# 文件 Handler
file_handler = logging.FileHandler(log_file, encoding="utf-8")
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter(
"%(asctime)s [%(levelname)s] %(filename)s:%(lineno)d - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
file_handler.setFormatter(file_formatter)
# 添加 Handler
logger.addHandler(console_handler)
logger.addHandler(file_handler)
return logger
def check_grammar(args, **kwargs):
'''
检查文档中的语法错误
返回语法错误检测结果列表
'''
logger = kwargs.get("logger")
# chain获取
grammar_check_chain = get_grammar_check_chain(args.model_name, args.base_url)
# 文档读取与chunking
logger.info(f"读取文档 {args.docx_data} ")
text = extract_text_from_docx(args.docx_data)
chunks = chunking(text, chunk_size=128)
# 对每个chunk进行语法检查
logger.info(f"开始对 {len(chunks)} 个chunk进行语法检查")
grammar_results = []
for chunk in chunks:
result = grammar_check_chain.invoke({"new_message": chunk}).content
result_dict = json.loads(result)
result_dict["original_text"] = chunk
grammar_results.append(result_dict)
logger.info(f"语法检查结果: {result_dict}")
logger.info(f"语法检查完成,共检查 {len(chunks)} 个chunk")
# 保存语法检查结果
save_dir = os.path.join(args.log_dir, os.path.basename(args.docx_data).split(".")[0])
os.makedirs(save_dir, exist_ok=True)
logger.info(f"保存语法检查结果到 {save_dir}")
with open(os.path.join(save_dir, "grammar_check_results.json"), "w", encoding="utf-8") as f:
json.dump(grammar_results, f, ensure_ascii=False, indent=4)
return grammar_results
if __name__ == "__main__":
args = parse_args()
logger = logging_config(args)
check_grammar(args, logger=logger)