Skip to content

Name

name

Name similarity for Matching.

name_similarity(name1: str | None, name2: str | None) -> float

Return normalized name similarity in percent.

Source code in src/equities_classifier/matching/name.py
def name_similarity(
    name1: str | None,
    name2: str | None,
) -> float:
    """Return normalized name similarity in percent."""

    normalized1 = normalize_name(name1)
    normalized2 = normalize_name(name2)

    if not normalized1 or not normalized2:
        return 0.0

    return ratio(normalized1, normalized2)

names_are_similar(name1: str | None, name2: str | None, threshold: float = 85.0) -> bool

Return whether two names are sufficiently similar.

Source code in src/equities_classifier/matching/name.py
def names_are_similar(
    name1: str | None,
    name2: str | None,
    threshold: float = 85.0,
) -> bool:
    """Return whether two names are sufficiently similar."""

    return name_similarity(name1, name2) >= threshold

normalize_name(name: str | None) -> str

Normalize a security/company name for comparison.

Source code in src/equities_classifier/matching/name.py
def normalize_name(name: str | None) -> str:
    """Normalize a security/company name for comparison."""

    if not name:
        return ""

    value = name.casefold()
    value = re.sub(r"[^\w\s]", " ", value, flags=re.UNICODE)
    words = value.split()

    words = [
        word
        for word in words
        if word not in _LEGAL_SUFFIXES
    ]

    return " ".join(words)