Avoid matching named aliases against ordinary lowercase words
This commit is contained in:
@@ -21,7 +21,14 @@ def matches(source, text):
|
||||
escaped = r'(?<!\w)' + escaped
|
||||
if source and source[-1].isascii() and source[-1].isalnum():
|
||||
escaped += r'(?!\w)'
|
||||
return re.search(escaped, text, re.IGNORECASE) is not None
|
||||
return re.search(escaped, text, matching_flags(source)) is not None
|
||||
|
||||
|
||||
def matching_flags(alias):
|
||||
# WHO/who, US/us, Jobs/jobs and Arm/arm are different words. Single Latin
|
||||
# named tokens keep their case; full phrases retain tolerant matching.
|
||||
named_token = alias.isascii() and not re.search(r'\s', alias) and any(c.isupper() for c in alias)
|
||||
return 0 if named_token else re.IGNORECASE
|
||||
|
||||
|
||||
class BookGlossary:
|
||||
@@ -59,7 +66,7 @@ class BookGlossary:
|
||||
pattern = r'(?<!\w)' + pattern
|
||||
if alias[-1].isascii() and alias[-1].isalnum():
|
||||
pattern += r'(?!\w)'
|
||||
for match in re.finditer(pattern, text, re.IGNORECASE):
|
||||
for match in re.finditer(pattern, text, matching_flags(alias)):
|
||||
start, end = match.span()
|
||||
if any(start < right and end > left for left, right in excluded):
|
||||
continue
|
||||
@@ -98,7 +105,7 @@ class BookGlossary:
|
||||
return errors
|
||||
|
||||
def fingerprint(self):
|
||||
return hashlib.sha256(json.dumps(self.terms, sort_keys=True, ensure_ascii=False).encode()).hexdigest()
|
||||
return hashlib.sha256(json.dumps(['case-sensitive-named-tokens-v3', self.terms], sort_keys=True, ensure_ascii=False).encode()).hexdigest()
|
||||
|
||||
|
||||
def merge_proposal(terms, proposal, conflicts, ambiguous_aliases):
|
||||
|
||||
Reference in New Issue
Block a user