66class FormulaSplitter (BaseContentSplitter ):
77 """从文本中提取数学公式"""
88
9+ DEFAULT_LLM_PROMPT = '''任务:请从以下正则表达式提取的内容中,识别并保留真正的LaTeX数学公式,剔除货币形式的内容。
10+
11+ ### 识别规则
12+ **真正的数学公式**(保留):
13+ - 包含数学符号:+ - × ÷ = < > ≤ ≥ ± ∞ ∑ ∫ ∂ √ ^ _ { } 等
14+ - 包含希腊字母:α β γ δ θ λ μ π σ ω 等
15+ - 包含LaTeX命令:\\ frac \\ sum \\ int \\ sqrt \\ alpha \\ beta \\ sin \\ cos 等
16+ - 包含数学表达式:变量、函数、方程等
17+
18+ **货币形式内容**(剔除):
19+ - 仅包含数字、逗号、小数点的价格:如 1,150.00
20+ - 纯粹的金额数值:如 25.99、1,200、5.50
21+ - 不包含任何数学运算符或数学符号的数字
22+
23+ ### 处理要求
24+ 1. **严格区分**:只保留真正的数学公式,剔除所有货币价格
25+ 2. **格式标准化**:统一公式格式,确保LaTeX语法正确
26+ 3. **保持原意**:不修改数学公式内容
27+
28+ ### 输出格式
29+ - 每个有效的数学公式独占一行
30+ - 只输出公式内容,不包含$符号或其他包装
31+ - 如果输入不是有效的数学公式(如货币),则输出<空>
32+ - 按原顺序输出保留的公式
33+
34+ ### 示例 1 (剔除后有有效公式)
35+ 输入:1,150.00 → 剔除(货币)
36+ 输入:x^2 + y^2 = r^2 → 保留(数学公式)
37+ 输入:25.99 → 剔除(货币)
38+ 输入:\\ frac{a}{b} + c → 保留(数学公式)
39+
40+ ### 示例 2 (剔除后无有效公式)
41+ 输入:1,150.00 → 剔除(货币)
42+ 输入:25.99 → 剔除(货币)
43+
44+ 输出:<空>
45+
46+ 注意,输出结果中不要添加任何解释!。
47+ [输入内容列表开始]'''
48+
949 def extract (self , text : str , field_name : str = None ) -> str :
1050 """提取数学公式"""
1151 regex_formulas = self .extract_basic (text )
12-
1352 if self .should_use_llm (field_name ):
1453 print (f"[DEBUG] 使用LLM增强公式提取" )
1554 formula_parts = self .enhance_with_llm (regex_formulas )
1655 else :
1756 formula_parts = regex_formulas
18-
1957 return '\n ' .join (formula_parts )
2058
2159 def extract_basic (self , text : str ) -> List [str ]:
@@ -44,51 +82,11 @@ def _llm_enhance(self, basic_results: List[str]) -> List[str]:
4482
4583 formulas_text = '\n ' .join (basic_results )
4684
47- CORRECTION_PROMPT = '''任务:请从以下正则表达式提取的内容中,识别并保留真正的LaTeX数学公式,剔除货币形式的内容。
48-
49- ### 识别规则
50- **真正的数学公式**(保留):
51- - 包含数学符号:+ - × ÷ = < > ≤ ≥ ± ∞ ∑ ∫ ∂ √ ^ _ { } 等
52- - 包含希腊字母:α β γ δ θ λ μ π σ ω 等
53- - 包含LaTeX命令:\\ frac \\ sum \\ int \\ sqrt \\ alpha \\ beta \\ sin \\ cos 等
54- - 包含数学表达式:变量、函数、方程等
55-
56- **货币形式内容**(剔除):
57- - 仅包含数字、逗号、小数点的价格:如 1,150.00
58- - 纯粹的金额数值:如 25.99、1,200、5.50
59- - 不包含任何数学运算符或数学符号的数字
60-
61- ### 处理要求
62- 1. **严格区分**:只保留真正的数学公式,剔除所有货币价格
63- 2. **格式标准化**:统一公式格式,确保LaTeX语法正确
64- 3. **保持原意**:不修改数学公式内容
65-
66- ### 输出格式
67- - 每个有效的数学公式独占一行
68- - 只输出公式内容,不包含$符号或其他包装
69- - 如果输入不是有效的数学公式(如货币),则输出<空>
70- - 按原顺序输出保留的公式
71-
72- ### 示例 1 (剔除后有有效公式)
73- 输入:1,150.00 → 剔除(货币)
74- 输入:x^2 + y^2 = r^2 → 保留(数学公式)
75- 输入:25.99 → 剔除(货币)
76- 输入:\\ frac{a}{b} + c → 保留(数学公式)
77-
78- ### 示例 2 (剔除后无有效公式)
79- 输入:1,150.00 → 剔除(货币)
80- 输入:25.99 → 剔除(货币)
81-
82- 输出:<空>
83-
84- 注意,输出结果中不要添加任何解释!。
85- [输入内容列表开始]'''
86-
8785 response = self .client .chat .completions .create (
8886 model = self .config .get ('llm_model' , "deepseek-chat" ),
8987 temperature = 0 ,
9088 messages = [
91- {"role" : "user" , "content" : CORRECTION_PROMPT + f"\n { formulas_text } \n " + '''[输入内容列表结束]
89+ {"role" : "user" , "content" : self . DEFAULT_LLM_PROMPT + f"\n { formulas_text } \n " + '''[输入内容列表结束]
9290 ---
9391 请按要求识别并输出真正的数学公式,剔除货币形式的内容。
9492 ---''' }
@@ -102,4 +100,4 @@ def _llm_enhance(self, basic_results: List[str]) -> List[str]:
102100 elif not result_text :
103101 return []
104102 else :
105- return [line .strip () for line in result_text .split ('\n ' ) if line .strip ()]
103+ return [line .strip () for line in result_text .split ('\n ' ) if line .strip ()]
0 commit comments