服务:Spring Boot 3.2 + docx4j 8.3.9,POST /api/v3/server_office_file/file/parse
接受 .docx,返回 HTML(公式 → LaTeX,图片 → RustFS 外链)
公式支持三类来源:
- OMML(Word 2007+ 公式) → Python omml_mathml2latex
- MathType OLE 对象 → Ruby mathtype2mathml → MathML → LaTeX
- Word EQ 域(老教辅主力) → EqToLatexUtil(本次新增)
本次改动:
1. 新增 java-svc/.../core/EqToLatexUtil.java:
移植自 jby backend-services office-core,EQ 语法 → LaTeX
(\f→\dfrac、\r→\sqrt、\i→\int/\sum/\prod、\s→^{}/_{}、\b→\left\right、
\a→array、\x→\boxed/\overline、\o\al 堆叠、圈码、化学符号、极限、连等式)
品牌标记 JBYU* → WPU*,与采集端一致
2. CtoMathFinder:接上 EQ 分支(原为 not-ported 桩),域代码经
EqToLatexUtil.convert 转 LaTeX 写入 eqLatexMap(WPEQNUM 占位符)
3. WordParseUtil.dealPlaceholder:EQ 的 LaTeX 同样加 \( \) 包裹
(原先因 WPEQNUM 例外不加包裹,前端/MathJax 不渲染)
修前症状:教辅 Word 里分式/方程组/上下标整段丢失(如 {−1/3, 1} 变成 {-,1})
修后实测:46 份教辅 2908 处 EQ 域全部还原,公式总数 2954 处、零未包裹残留
安全:application.yml(含 RustFS 密钥)不入库,提供 application.yml.example;
OssService 的 @Value 默认密钥已清空
96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
"""
|
|
Chemistry-related data for equation formatting.
|
|
|
|
This module contains chemical elements, groups, and variables used for
|
|
detecting and formatting chemistry equations.
|
|
"""
|
|
|
|
# Multi-character chemical elements (2 chars)
|
|
# These are STRONG indicators - their presence alone triggers chemistry detection
|
|
MULTI_CHAR_ELEMENTS = {
|
|
# Period 2
|
|
'He', 'Li', 'Be', 'Ne',
|
|
# Period 3
|
|
'Na', 'Mg', 'Al', 'Si', 'Cl', 'Ar',
|
|
# Period 4
|
|
'Ca', 'Sc', 'Ti', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn',
|
|
'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr',
|
|
# Period 5
|
|
'Rb', 'Sr', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd',
|
|
'In', 'Sn', 'Sb', 'Te', 'Xe',
|
|
# Period 6
|
|
'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy',
|
|
'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'Re', 'Os', 'Ir', 'Pt',
|
|
'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn',
|
|
# Period 7
|
|
'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf',
|
|
'Es', 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds',
|
|
'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og'
|
|
}
|
|
|
|
# Single-character chemical elements (1 char)
|
|
# These need CONTEXT - only formatted as chemistry when chemistry equation is detected
|
|
SINGLE_CHAR_ELEMENTS = {
|
|
'H', # Hydrogen
|
|
'B', # Boron
|
|
'C', # Carbon
|
|
'N', # Nitrogen
|
|
'O', # Oxygen
|
|
'F', # Fluorine
|
|
'P', # Phosphorus
|
|
'S', # Sulfur
|
|
'K', # Potassium (but also common variable)
|
|
'V', # Vanadium (but also common variable for volume)
|
|
'Y', # Yttrium
|
|
'I', # Iodine
|
|
'W', # Tungsten
|
|
'U', # Uranium
|
|
}
|
|
|
|
# All chemical elements (for formatting once chemistry is detected)
|
|
ALL_CHEMICAL_ELEMENTS = MULTI_CHAR_ELEMENTS | SINGLE_CHAR_ELEMENTS
|
|
|
|
# Chemical groups and radicals (strong indicators)
|
|
CHEMICAL_GROUPS = {
|
|
'OH', # Hydroxide
|
|
'SO', # Sulfite/Sulfate (partial)
|
|
'NO', # Nitrite/Nitrate (partial)
|
|
'CO', # Carbonyl/Carbonate (partial)
|
|
'NH', # Amine/Ammonium (partial)
|
|
'CH', # Methine/Hydrocarbon (partial)
|
|
'PO', # Phosphate (partial)
|
|
'ClO', # Chlorate (partial)
|
|
}
|
|
|
|
# Common chemistry variables (should stay italic even in chemistry equations)
|
|
# These are NOT chemical elements, they're variables used in chemistry
|
|
# NOTE: Keep this list minimal to avoid conflicts with fragmented elements
|
|
CHEMISTRY_VARIABLES = {
|
|
'c', # Concentration
|
|
# NOTE: 'n' removed - conflicts with fragmented Mn (Manganese)
|
|
# NOTE: 'M' removed - conflicts with fragmented Mn, Mg (Magnesium)
|
|
'p', # Pressure (but P is Phosphorus!)
|
|
'T', # Temperature
|
|
'm', # Mass
|
|
'R', # Gas constant
|
|
'E', # Energy (but E is also used in chemistry)
|
|
# NOTE: 'V' removed - conflicts with V (Vanadium)
|
|
# NOTE: 'K' removed - conflicts with K (Potassium)
|
|
# Generic math variables
|
|
'x', 'y', 'z',
|
|
'a', 'b', 'd', 'q',
|
|
}
|
|
|
|
# Chinese chemical conditions/terms
|
|
CHINESE_CHEMICAL_TERMS = {
|
|
'高温', # High temperature
|
|
'加热', # Heating
|
|
'催化剂', # Catalyst
|
|
'点燃', # Ignition
|
|
'电解', # Electrolysis
|
|
'控温', # Temperature control
|
|
'加压', # Pressurization
|
|
'光照', # Light
|
|
'通电', # Electrify
|
|
}
|