Files
wehub-resource-sync ba4be087d5
Create PR to main with cherry-pick from release / cherry-pick (push) Failing after 0s
CICD NeMo / pre-flight (push) Failing after 0s
CICD NeMo / configure (push) Has been skipped
Build, validate, and release Neural Modules / pre-flight (push) Failing after 1s
CICD NeMo / code-linting (push) Has been skipped
Build, validate, and release Neural Modules / release (push) Has been skipped
Build, validate, and release Neural Modules / release-summary (push) Has been cancelled
CICD NeMo / cicd-test-container-build (push) Has been cancelled
CICD NeMo / cicd-import-tests (push) Has been cancelled
CICD NeMo / L0_Setup_Test_Data_And_Models (push) Has been cancelled
CICD NeMo / cicd-main-unit-tests (push) Has been cancelled
CICD NeMo / cicd-main-speech (push) Has been cancelled
CICD NeMo / Nemo_CICD_Test (push) Has been cancelled
CICD NeMo / Coverage (e2e) (push) Has been cancelled
CICD NeMo / Coverage (unit-test) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
CICD NeMo / cicd-wait-in-queue (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:28:58 +08:00

89 lines
2.9 KiB
Python

# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re
from collections import OrderedDict
from nemo.collections.asr.inference.utils.constants import DEFAULT_SEMIOTIC_CLASS
# Compile regex pattern once at module level for better performance
TOKEN_PATTERN = re.compile(r'tokens \{.*?(?=tokens \{|$)', re.DOTALL)
def get_semiotic_class(tokens: list[OrderedDict]) -> str:
"""
Returns the semiotic class of the given tokens.
"""
return list(tokens[0]["tokens"].keys())[0]
def split_text(text: str, sep: str = " ") -> tuple[list, int]:
"""
Splits the text into words based on the separator.
Args:
text: (str) input text
sep: (str) separator to split the text
Returns:
words: (list) list of words
n_words: (int) number of words
"""
words = [w for w in text.split(sep) if w]
return words, len(words)
def find_tokens(text: str) -> list[str]:
"""
Find the start and end positions of token blocks in the given text.
Args:
text: (str) input text containing token blocks
Returns:
token_blocks: (list[str]) list of token blocks
"""
# Use compiled regex to find all token blocks in a single pass
token_blocks = TOKEN_PATTERN.findall(text)
# Strip whitespace from each block
return [block.strip() for block in token_blocks]
def get_trivial_alignment(N: int, i_shift: int = 0, o_shift: int = 0) -> list[tuple]:
"""
Returns a trivial word alignment for N input words.
Args:
N: (int) number of input words
i_shift: (int) input shift
o_shift: (int) output shift
Returns:
(list) Returns a trivial word alignment
"""
return [([i + i_shift], [i + o_shift], DEFAULT_SEMIOTIC_CLASS) for i in range(N)]
def fallback_to_trivial_alignment(
input_words: list[str], i_shift: int = 0, o_shift: int = 0
) -> tuple[list[str], list[str], list[tuple]]:
"""
Returns a trivial word alignment for the input words.
Args:
input_words: (list[str]) list of input words
i_shift: (int) input shift
o_shift: (int) output shift
Returns:
(tuple) Returns a tuple of input words, output words, and a trivial word alignment
"""
return input_words, input_words.copy(), get_trivial_alignment(N=len(input_words), i_shift=i_shift, o_shift=o_shift)