Spaces:
Runtime error
Runtime error
移动函数到调用模组
Browse files- crazy_functions/批量总结PDF文档.py +55 -1
- toolbox.py +0 -56
crazy_functions/批量总结PDF文档.py
CHANGED
|
@@ -1,7 +1,61 @@
|
|
| 1 |
from predict import predict_no_ui
|
| 2 |
-
from toolbox import CatchException, report_execption, write_results_to_file, predict_no_ui_but_counting_down
|
|
|
|
|
|
|
| 3 |
fast_debug = False
|
| 4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
def 解析PDF(file_manifest, project_folder, top_p, temperature, chatbot, history, systemPromptTxt):
|
| 7 |
import time, glob, os, fitz
|
|
|
|
| 1 |
from predict import predict_no_ui
|
| 2 |
+
from toolbox import CatchException, report_execption, write_results_to_file, predict_no_ui_but_counting_down
|
| 3 |
+
import re
|
| 4 |
+
import unicodedata
|
| 5 |
fast_debug = False
|
| 6 |
|
| 7 |
+
def is_paragraph_break(match):
|
| 8 |
+
"""
|
| 9 |
+
根据给定的匹配结果来判断换行符是否表示段落分隔。
|
| 10 |
+
如果换行符前为句子结束标志(句号,感叹号,问号),且下一个字符为大写字母,则换行符更有可能表示段落分隔。
|
| 11 |
+
也可以根据之前的内容长度来判断段落是否已经足够长。
|
| 12 |
+
"""
|
| 13 |
+
prev_char, next_char = match.groups()
|
| 14 |
+
|
| 15 |
+
# 句子结束标志
|
| 16 |
+
sentence_endings = ".!?"
|
| 17 |
+
|
| 18 |
+
# 设定一个最小段落长度阈值
|
| 19 |
+
min_paragraph_length = 140
|
| 20 |
+
|
| 21 |
+
if prev_char in sentence_endings and next_char.isupper() and len(match.string[:match.start(1)]) > min_paragraph_length:
|
| 22 |
+
return "\n\n"
|
| 23 |
+
else:
|
| 24 |
+
return " "
|
| 25 |
+
|
| 26 |
+
def normalize_text(text):
|
| 27 |
+
"""
|
| 28 |
+
通过把连字(ligatures)等文本特殊符号转换为其基本形式来对文本进行归一化处理。
|
| 29 |
+
例如,将连字 "fi" 转换为 "f" 和 "i"。
|
| 30 |
+
"""
|
| 31 |
+
# 对文本进行归一化处理,分解连字
|
| 32 |
+
normalized_text = unicodedata.normalize("NFKD", text)
|
| 33 |
+
|
| 34 |
+
# 替换其他特殊字符
|
| 35 |
+
cleaned_text = re.sub(r'[^\x00-\x7F]+', '', normalized_text)
|
| 36 |
+
|
| 37 |
+
return cleaned_text
|
| 38 |
+
|
| 39 |
+
def clean_text(raw_text):
|
| 40 |
+
"""
|
| 41 |
+
对从 PDF 提取出的原始文本进行清洗和格式化处理。
|
| 42 |
+
1. 对原始文本进行归一化处理。
|
| 43 |
+
2. 替换跨行的连词,例如 “Espe-\ncially” 转换为 “Especially”。
|
| 44 |
+
3. 根据 heuristic 规则判断换行符是否是段落分隔,并相应地进行替换。
|
| 45 |
+
"""
|
| 46 |
+
# 对文本进行归一化处理
|
| 47 |
+
normalized_text = normalize_text(raw_text)
|
| 48 |
+
|
| 49 |
+
# 替换跨行的连词
|
| 50 |
+
text = re.sub(r'(\w+-\n\w+)', lambda m: m.group(1).replace('-\n', ''), normalized_text)
|
| 51 |
+
|
| 52 |
+
# 根据前后相邻字符的特点,找到原文本中的换行符
|
| 53 |
+
newlines = re.compile(r'(\S)\n(\S)')
|
| 54 |
+
|
| 55 |
+
# 根据 heuristic 规则,用空格或段落分隔符替换原换行符
|
| 56 |
+
final_text = re.sub(newlines, lambda m: m.group(1) + is_paragraph_break(m) + m.group(2), text)
|
| 57 |
+
|
| 58 |
+
return final_text.strip()
|
| 59 |
|
| 60 |
def 解析PDF(file_manifest, project_folder, top_p, temperature, chatbot, history, systemPromptTxt):
|
| 61 |
import time, glob, os, fitz
|
toolbox.py
CHANGED
|
@@ -280,59 +280,3 @@ def clear_line_break(txt):
|
|
| 280 |
txt = txt.replace(' ', ' ')
|
| 281 |
txt = txt.replace(' ', ' ')
|
| 282 |
return txt
|
| 283 |
-
|
| 284 |
-
import re
|
| 285 |
-
import unicodedata
|
| 286 |
-
|
| 287 |
-
def is_paragraph_break(match):
|
| 288 |
-
"""
|
| 289 |
-
根据给定的匹配结果来判断换行符是否表示段落分隔。
|
| 290 |
-
如果换行符前为句子结束标志(句号,感叹号,问号),且下一个字符为大写字母,则换行符更有可能表示段落分隔。
|
| 291 |
-
也可以根据之前的内容长度来判断段落是否已经足够长。
|
| 292 |
-
"""
|
| 293 |
-
prev_char, next_char = match.groups()
|
| 294 |
-
|
| 295 |
-
# 句子结束标志
|
| 296 |
-
sentence_endings = ".!?"
|
| 297 |
-
|
| 298 |
-
# 设定一个最小段落长度阈值
|
| 299 |
-
min_paragraph_length = 140
|
| 300 |
-
|
| 301 |
-
if prev_char in sentence_endings and next_char.isupper() and len(match.string[:match.start(1)]) > min_paragraph_length:
|
| 302 |
-
return "\n\n"
|
| 303 |
-
else:
|
| 304 |
-
return " "
|
| 305 |
-
|
| 306 |
-
def normalize_text(text):
|
| 307 |
-
"""
|
| 308 |
-
通过把连字(ligatures)等文本特殊符号转换为其基本形式来对文本进行归一化处理。
|
| 309 |
-
例如,将连字 "fi" 转换为 "f" 和 "i"。
|
| 310 |
-
"""
|
| 311 |
-
# 对文本进行归一化处理,分解连字
|
| 312 |
-
normalized_text = unicodedata.normalize("NFKD", text)
|
| 313 |
-
|
| 314 |
-
# 替换其他特殊字符
|
| 315 |
-
cleaned_text = re.sub(r'[^\x00-\x7F]+', '', normalized_text)
|
| 316 |
-
|
| 317 |
-
return cleaned_text
|
| 318 |
-
|
| 319 |
-
def clean_text(raw_text):
|
| 320 |
-
"""
|
| 321 |
-
对从 PDF 提取出的原始文本进行清洗和格式化处理。
|
| 322 |
-
1. 对原始文本进行归一化处理。
|
| 323 |
-
2. 替换跨行的连词,例如 “Espe-\ncially” 转换为 “Especially”。
|
| 324 |
-
3. 根据 heuristic 规则判断换行符是否是段落分隔,并相应地进行替换。
|
| 325 |
-
"""
|
| 326 |
-
# 对文本进行归一化处理
|
| 327 |
-
normalized_text = normalize_text(raw_text)
|
| 328 |
-
|
| 329 |
-
# 替换跨行的连词
|
| 330 |
-
text = re.sub(r'(\w+-\n\w+)', lambda m: m.group(1).replace('-\n', ''), normalized_text)
|
| 331 |
-
|
| 332 |
-
# 根据前后相邻字符的特点,找到原文本中的换行符
|
| 333 |
-
newlines = re.compile(r'(\S)\n(\S)')
|
| 334 |
-
|
| 335 |
-
# 根据 heuristic 规则,用空格或段落分隔符替换原换行符
|
| 336 |
-
final_text = re.sub(newlines, lambda m: m.group(1) + is_paragraph_break(m) + m.group(2), text)
|
| 337 |
-
|
| 338 |
-
return final_text.strip()
|
|
|
|
| 280 |
txt = txt.replace(' ', ' ')
|
| 281 |
txt = txt.replace(' ', ' ')
|
| 282 |
return txt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|