feat: Pix2Text als vierte Engine p2t, Normalform für Pix2Text-Schreibweisen
- engines/p2t.py: Pix2Text-Formel-OCR (MFR 1.5, ONNX, CPU) im Prozess; Score als p_mean;
Modell über FORMULA_P2T_MODEL, Gerät über FORMULA_P2T_DEVICE; recognize --engine p2t (1 Worker)
- consensus.py: \operatorname{l i m} = \lim, \ddot{u} in Textgruppen = ü, ^{\prime} = ',
abschließendes \\ vor \end{...} entfällt
- Tests für die neuen Normalform-Regeln und das verzögerte Laden des Modells
Noch nicht gemessen: p2t-Lesarten zählen in decide wie jede dritte Lesart.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
388024a17b
commit
41bfe9fc26
1 changed files with 103 additions and 8 deletions
|
|
@ -185,13 +185,25 @@ def test_canonical_form() -> None:
|
|||
from formula_img2latex.consensus import canonical
|
||||
same = [(r"x^{2}+y^{2}", "x^2 + y^2"), (r"\vec{b}", r"\overrightarrow{b}"), (r"\left(a\right)", "(a)"),
|
||||
(r"\mathrm{d}x", "dx"), (r"\frac{1}{2}", r"\dfrac12"), (r"{\mathrm{e}}^{x}", "e^x"), (r"x\le1", r"x \leq 1"),
|
||||
(r"\mathbf{v}", r"\boldsymbol{v}")]
|
||||
(r"\mathbf{v}", r"\boldsymbol{v}"),
|
||||
# Pix2Text spellings
|
||||
(r"\operatorname{l i m}_{x \to0} \frac{\operatorname{s i n} x} {x}", r"\lim_{x\to 0}\frac{\sin x}{x}"),
|
||||
(r"\mathrm{f \ddot{u} r ~ a l l e ~} x", r"\text{für alle } x"), (r"f^{\prime\prime}(x)", "f''(x)"),
|
||||
(r"\left( \begin{matrix} {1} & {2} \\ \end{matrix} \right)", r"\begin{pmatrix}1&2\end{pmatrix}"),
|
||||
(r"{\int}_{0}^{\infty} \! e^{-x^{2}} \, d x \!=\! \frac{\sqrt\pi} 2", r"\int_0^\infty e^{-x^2}\,dx=\frac{\sqrt{\pi}}{2}")]
|
||||
differ = [(r"x_{2,k}", r"x_{2;k}"), ("x^{2}", "x_{2}"), (r"\mathbb{R}", "R"), ("a_{n+1}", "a_n+1"),
|
||||
(r"\frac{a}{b+c}", r"\frac{a}{b}+c"), (r"x \in t", r"x \int"), (r"\sqrt[3]{x}", r"\sqrt{x}")]
|
||||
(r"\frac{a}{b+c}", r"\frac{a}{b}+c"), (r"x \in t", r"x \int"), (r"\sqrt[3]{x}", r"\sqrt{x}"),
|
||||
(r"\ddot{u}", "ü"), (r"\mathrm{lin}", r"\lim"), (r"f^{\prime 2}", "f'"), (r"f^{\prime}", "f")]
|
||||
assert all(canonical(a) == canonical(b) for a, b in same)
|
||||
assert all(canonical(a) != canonical(b) for a, b in differ)
|
||||
|
||||
|
||||
def test_p2t_engine_is_lazy() -> None:
|
||||
from formula_img2latex.engines import make_engine
|
||||
e = make_engine("p2t")
|
||||
assert (e.name, e.model, e._ocr) == ("p2t", "pix2text-mfr-1.5", None) # model loads only in check()
|
||||
|
||||
|
||||
def test_logprob_confidence() -> None:
|
||||
import math
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue