Skip to content

Hi TN: Address, Electronic, Serial, and Cardinal FST Optimization and Bug Fix#461

Open
shrpawar-alt wants to merge 4 commits into
NVIDIA:staging/hi_tn_v3from
shrpawar-alt:hi-tn-bugfixv3
Open

Hi TN: Address, Electronic, Serial, and Cardinal FST Optimization and Bug Fix#461
shrpawar-alt wants to merge 4 commits into
NVIDIA:staging/hi_tn_v3from
shrpawar-alt:hi-tn-bugfixv3

Conversation

@shrpawar-alt

Copy link
Copy Markdown
Contributor

What does this PR do ?

  • Address (measure.py): Centralized TSV loading for faster compilation, stripped heavy FST weights to stop greedy over-matching, and streamlined special characters.
  • Electronic (electronic.py): Preserved English text and URLs natively for downstream TTS, added a dedicated chem: tag, and created letter-by-letter spelling rules for chemical formulas.
  • Serial (serial.py): Absorbed alphanumeric codes (A12, B-60, FY2024), applied the 1-3 vs 4+ digit cross-class rule, and added case-insensitive matching.
  • Cardinals (cardinal.py): Added support for (1,00,000) digit-group comma separators.

Before your PR is "Ready for review"

Pre checks:

  • Have you signed your commits? Use git commit -s to sign.
  • Do all unittests finish successfully before sending PR?
    1. pytest or (if your machine does not have GPU) pytest --cpu from the root folder (given you marked your test cases accordingly @pytest.mark.run_only_on('CPU')).
    2. Sparrowhawk tests bash tools/text_processing_deployment/export_grammars.sh --MODE=test ...
  • If you are adding a new feature: Have you added test cases for both pytest and Sparrowhawk here.
  • Have you added __init__.py for every folder and subfolder, including data folder which has .TSV files?
  • Have you followed codeQL results and removed unused variables and imports (report is at the bottom of the PR in github review box) ?
  • Have you added the correct license header Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. to all newly added Python files?
  • If you copied nemo_text_processing/text_normalization/en/graph_utils.py your header's second line should be Copyright 2015 and onwards Google, Inc.. See an example here.
  • Remove import guards (try import: ... except: ...) if not already done.
  • If you added a new language or a new feature please update the NeMo documentation (lives in different repo).
  • Have you added your language support to tools/text_processing_deployment/pynini_export.py.

PR Type:

  • New Feature
  • Bugfix
  • Documentation
  • Test

If you haven't finished some of the above items you can still open "Draft" PR.

shrpawar-alt and others added 2 commits July 24, 2026 17:02
@shrpawar-alt
shrpawar-alt marked this pull request as ready for review July 24, 2026 17:13
Comment thread nemo_text_processing/text_normalization/hi/verbalizers/electronic.py Outdated
Comment thread nemo_text_processing/text_normalization/hi/verbalizers/electronic.py Outdated
shrpawar-alt and others added 2 commits July 25, 2026 16:49
Signed-off-by: Shreyas Pawar <shrpawar@nvidia.com>
electronic { protocol: "https" domain: "google.com/" } -> "https कोलन फॉरवर्ड स्लैश फॉरवर्ड स्लैश google डॉट com फॉरवर्ड स्लैश"
electronic { path: "C:\\Users\\HP\\Desktop" } -> "C कोलन बैकवर्ड स्लैश Users बैकवर्ड स्लैश HP बैकवर्ड स्लैश Desktop"
electronic { domain: "192.168.1.1" } -> "एक नौ दो डॉट एक छह आठ डॉट एक डॉट एक"
electronic { chem: "C₂H₄" } -> "सी दो एच चार"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's make sure definition matches use and tag constraints

)
# International grouping: 1-3 leading digits, one or more groups of 3.
western_grouping = pynini.closure(NEMO_ALL_DIGIT, 1, 3) + pynini.closure(delete_separator + three_digits, 1)
strip_separators = (indian_grouping | western_grouping).optimize()

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what happens if we have mixed cases, like 1,23,456 vs 1,234,56?

"""
ordinal_graph = ordinal.graph
# Strip internal weights from ordinal graph so a small outer weight suffices
ordinal_graph = pynini.arcmap(ordinal.graph, map_type="rmweight").optimize()

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this change the behavior of ordinal?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants