Kristian Rickert created OPENNLP-1876:
-----------------------------------------

             Summary: Remove regex over cursors TwitterCharSequenceNormalizer, 
UrlCharSequenceNormalizer, ShrinkCharSequenceNormalizer, and 
NumberCharSequenceNormalizer 
                 Key: OPENNLP-1876
                 URL: https://issues.apache.org/jira/browse/OPENNLP-1876
             Project: OpenNLP
          Issue Type: Improvement
    Affects Versions: 3.0.0-M4
            Reporter: Kristian Rickert
            Assignee: Kristian Rickert
             Fix For: 3.0.0-M5


h2. Summary

The legacy normalizers {{TwitterCharSequenceNormalizer}}, 
{{UrlCharSequenceNormalizer}}, {{ShrinkCharSequenceNormalizer}}, and 
{{NumberCharSequenceNormalizer}} apply regular expressions to user text, which 
runs against the OPENNLP-1850 design goal of cursor-based text transforms (a 
single forward code-point scan on user text, with regex reserved for config 
parsing). This ticket replaces those regex passes with cursor scans on the 
{{CharClass}} engine where they operate on user text, and audits the spellcheck 
and extension normalizers for the same pattern. These are pre-1850 rungs and 
are not in the blessed default chain, so the change is low-risk and 
output-preserving rather than a redesign.

h2. Scope

* Replace regex-on-text with a cursor scan (on the 
{{CharClass}}/{{CodePointSet}} primitives from OPENNLP-1850) in 
{{TwitterCharSequenceNormalizer}}, {{UrlCharSequenceNormalizer}}, 
{{ShrinkCharSequenceNormalizer}}, and {{NumberCharSequenceNormalizer}}.
* Where a normalizer's behavior is subtle, add characterization tests that pin 
the pre-change output first, then refactor, so the output is preserved byte for 
byte.
* Audit the spellcheck and extension normalizers for regex-on-text paths; 
convert the clear cases and file follow-ups for anything larger.

h2. Acceptance criteria

* The four normalizers use cursor scans on the text path; no regex is applied 
to user text in them.
* Output-preserving: characterization tests capture the prior behavior and pass 
unchanged after the refactor.
* The spellcheck and extension audit is complete, with conversions applied or 
follow-ups filed.

h2. Out of scope

* Making these rungs offset-aware. They are not in the blessed chain, and 
offset-safety for them is a separate concern.
* The {{StringUtil}} whitespace migration, which is a separate ticket.
* Regex in config parsing and non-user-text utilities.
* Adding or removing any of these rungs from a default chain.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to