3v324v23 commited on
Commit
14a7d00
1 Parent(s): 94e75d2

移动函数到调用模组

Browse files
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, clean_text
 
 
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