Skip to content

고유어 수사 11 이상을 등가로 인정하기 (예: '스물세 곳' ↔ '23곳') #8

Description

@needsbuilder

배경

쉬운 글에서는 숫자를 고유어로 풀어 쓰는 일이 흔합니다 — 3가구세 가구.
또박의 Fidelity 게이트는 이 둘을 같은 값으로 인정합니다. 그래야 왜곡이 아닌 표기
변형을 재교정으로 잘못 돌려보내지 않습니다.

그런데 지금은 1~10까지만 인정합니다.

ttobak/fidelity/normalize.py

_NATIVE_NUMERALS: dict[str, int] = {
    "한": 1, "두": 2, "세": 3, "네": 4, "다섯": 5,
    "여섯": 6, "일곱": 7, "여덟": 8, "아홉": 9, "열": 10,
}

그래서 원문 23곳 → 쉬운본 스물세 곳 은 값이 보존됐는데도 불일치로 잡혀
사람 검수로 회부됩니다. 안전한 방향의 오류(왜곡을 통과시키지는 않음)지만,
쓰는 사람에게는 거짓 경보라 불편합니다.

할 일

11 이상 고유어 수사를 인정하도록 넓힙니다.

  • _NATIVE_NUMERALS 에 십 단위(열·스물·서른·마흔·쉰·예순·일흔·여든·아흔) 추가
  • 복합 수사 처리 — 스물세(23), 열한(11) 처럼 십 단위 + 낱 단위가 붙는 형태
  • NATIVE_COUNT_RE 정규식을 복합 수사에 맞게 확장

단위 목록은 같은 파일의 COUNT_UNITS 입니다: 명·건·회·개·가구·세대·곳·세.

주의할 점

  • 관대화 방향으로만 동작해야 합니다. 이 정규화는 쉬운본 매칭 전용이고,
    왜곡을 통과시키는 쪽으로 작동하면 안 됩니다.
  • (?<![가-힣]) 룩비하인드가 왜 있는지 보고 유지해 주세요 — 동네 곳
    네 곳 을 4곳으로 오인하는 것을 막습니다. 복합 수사를 넣을 때 같은 종류의
    오인이 늘어날 수 있습니다.
  • 개(?!월) 도 마찬가지입니다 — 6개월6개 로 읽지 않기 위한 장치입니다.

테스트

tests/fidelity/test_normalize_number.py 에 기존 패턴이 있습니다. 실패하는
테스트를 먼저 쓰고 구현하는 흐름을 이 저장소가 따릅니다.

python -m pytest tests/fidelity/test_normalize_number.py -q

관련 파일

  • ttobak/fidelity/normalize.py (183~221행)
  • tests/fidelity/test_normalize_number.py

EN — Native Korean numerals are only recognized up to 10, so 23곳스물세 곳
is flagged as a mismatch even though the value is preserved. Extend
_NATIVE_NUMERALS and NATIVE_COUNT_RE to cover tens and compound numerals.
Must stay leniency-only: it must never let a real distortion through.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions