블로그 글 품질을 숫자로 확인하는 5축 자동 채점 Python 구조

블로그 글을 올리고 나서 ‘이 글이 괜찮은 건지’ 확신이 서지 않는 경우가 많습니다. SEO는 챙겼는데 E-E-A-T는 빠졌고, 가독성은 신경 썼는데 AI 냄새가 나는지는 모르겠는 상태. 이 불확실함을 줄이기 위해 한국어 블로그 글을 5개 축으로 자동 채점하는 Python 구조를 정리했습니다.

5축 채점 구조란 무엇인가

블로그 글 5축 자동 채점

블로그 글의 품질을 단일 점수로 압축하면 어느 한 축이 취약해도 묻혀버립니다. 5축 구조는 글을 다섯 개의 독립된 관점으로 나눠서 각각 점수를 매기는 방식입니다. 한 축에서 낮은 점수가 나오면 어디를 고쳐야 하는지 바로 특정됩니다.

채점 대상이 되는 5개 축은 다음과 같습니다.

평가 항목 핵심 질문
① SEO 키프레이즈 밀도, 제목 포함 여부, 메타 설명 길이 검색엔진이 이 글을 읽을 수 있는가
② E-E-A-T 경험 서술, 전문성 표현, 출처 신호 구글이 신뢰할 수 있는 저자 신호가 있는가
③ AI 냄새 반복 패턴, 상투적 표현, 구조 획일성 AI가 생성한 것처럼 보이는 신호가 있는가
④ 가독성 문장 길이, 단락 구분, 소제목 밀도 독자가 끝까지 읽을 수 있는가
⑤ 정보 밀도 수치 포함 여부, 예시 수, 구체성 읽고 나서 얻어가는 것이 있는가

Python으로 구현하는 채점 로직 구조

전체 구조는 크게 세 부분으로 나뉩니다. 텍스트 파싱, 축별 점수 계산, 결과 출력입니다. 각 축은 독립된 함수로 분리해서 유지보수가 쉽게 만드는 것이 핵심입니다.

기본 뼈대

def score_seo(text, keyphrase):
    # 키프레이즈 밀도, 제목 포함, 메타 길이 체크
    pass

def score_eeat(text):
    # 경험 신호 키워드, 출처 패턴 감지
    pass

def score_ai_smell(text):
    # 상투적 표현 빈도, 문장 길이 편차 계산
    pass

def score_readability(text):
    # 평균 문장 길이, 단락 수, 소제목 간격
    pass

def score_info_density(text):
    # 숫자 포함 문장 비율, 예시 키워드 감지
    pass

def evaluate(text, keyphrase):
    return {
        "SEO": score_seo(text, keyphrase),
        "EEAT": score_eeat(text),
        "AI_smell": score_ai_smell(text),
        "Readability": score_readability(text),
        "Info_density": score_info_density(text),
    }

각 함수는 0~100 사이의 점수를 반환합니다. 최종적으로 evaluate() 함수 하나만 호출하면 딕셔너리 형태로 5개 점수가 한 번에 나오는 구조입니다.

축별 채점 기준 상세

SEO 점수 계산

SEO 축은 세 가지를 확인합니다. 키프레이즈가 본문에 몇 번 등장하는지, 첫 문단에 포함됐는지, H2 소제목에 한 번이라도 들어갔는지입니다. 키프레이즈 밀도는 전체 단어 수 대비 출현 횟수로 계산하며, 1~3% 범위를 기준점으로 삼습니다.

import re

def score_seo(text, keyphrase):
    words = text.split()
    total = len(words)
    count = text.count(keyphrase)
    density = (count / total) * 100 if total > 0 else 0

    score = 0
    if 1 <= density <= 3:
        score += 40
    elif density > 0:
        score += 20

    paragraphs = text.split('\n')
    if keyphrase in paragraphs[0]:
        score += 30

    h2_lines = [l for l in paragraphs if l.startswith('##')]
    if any(keyphrase in h for h in h2_lines):
        score += 30

    return score

AI 냄새(ai_smell) 점수 계산

AI 냄새 축은 역방향 점수 방식입니다. 상투적 표현이 많을수록 점수가 낮아집니다. 감지 대상은 “~에 대해 알아보겠습니다”, “중요합니다”, “효과적입니다”, “최적화” 같은 반복 출현 패턴입니다. 한국어 블로그에서 AI가 자주 쓰는 표현을 리스트로 관리하고 출현 횟수를 카운트합니다.

AI_SMELL_PATTERNS = [
    "알아보겠습니다",
    "중요합니다",
    "효과적입니다",
    "최적화",
    "살펴보겠습니다",
    "도움이 됩니다",
    "주목받고 있습니다",
]

def score_ai_smell(text):
    hit = sum(text.count(p) for p in AI_SMELL_PATTERNS)
    penalty = min(hit * 10, 80)
    return max(100 - penalty, 20)

패턴 리스트는 글을 쓰면서 계속 추가할 수 있습니다. 특정 표현이 반복해서 감지된다면 그 단어를 목록에 추가하는 방식으로 점진적으로 정교해집니다.

E-E-A-T 신호 감지

E-E-A-T(경험·전문성·권위·신뢰성)는 구글이 콘텐츠 품질을 판단하는 기준입니다. Python에서는 텍스트 내 경험 서술 키워드와 출처 패턴을 감지하는 방식으로 근사치를 계산합니다.

EEAT_SIGNALS = [
    "직접", "경험상", "써보니", "확인한 결과",
    "기준으로", "알려진 바로는", "출처", "참고"
]

def score_eeat(text):
    hit = sum(1 for s in EEAT_SIGNALS if s in text)
    return min(hit * 15, 100)

E-E-A-T는 텍스트 신호만으로 완전히 측정할 수 없다는 한계가 있습니다. 실제 구글 평가에는 사이트 권위, 저자 이력 등 외부 요소가 포함되므로 이 점수는 참고 지표로만 활용하는 것이 적합합니다.

결과 출력과 활용 방법

채점 결과는 딕셔너리로 반환되므로 그대로 출력하거나 JSON 파일로 저장할 수 있습니다. 점수가 낮은 축이 있으면 해당 섹션만 집중적으로 수정하면 됩니다.

import json

result = evaluate(blog_text, keyphrase="5축 자동 채점")
print(json.dumps(result, ensure_ascii=False, indent=2))

출력 예시는 다음과 같습니다.

{
  "SEO": 70,
  "EEAT": 45,
  "AI_smell": 60,
  "Readability": 80,
  "Info_density": 55
}

E-E-A-T가 45점이라면 경험 서술 키워드를 본문에 추가하거나, 출처 표기를 보완하는 방식으로 대응할 수 있습니다. 정보 밀도가 낮다면 수치나 구체적 예시가 부족하다는 신호입니다.

점수 범위 의미 권장 조치
80 이상 양호 유지
60~79 보통 해당 축 부분 보완
59 이하 미흡 해당 섹션 전면 재작성 검토

이 구조의 한계와 확장 방향

이 채점 구조는 텍스트 패턴 기반입니다. 키워드 출현 여부와 문장 길이 같은 표면적 신호를 감지하는 수준이므로, 실제 독자 반응이나 체류 시간 같은 행동 데이터는 반영되지 않습니다.

확장 방향은 크게 두 가지입니다.

  • LLM(대형 언어 모델) 연동 — 단순 패턴 감지 대신 GPT나 Claude API를 통해 문장 품질을 의미 수준에서 평가하는 방식으로 업그레이드 가능합니다.
  • 구글 Search Console 데이터 통합 — 실제 클릭률과 노출 수를 채점 기준에 반영하면 점수의 신뢰도가 높아집니다.

현재 구조는 글을 올리기 전에 빠르게 체크리스트를 확인하는 용도로 적합합니다. 완전한 품질 보증 도구가 아니라 수정 방향을 잡는 참고 도구로 활용하는 것이 현실적입니다.

자주 묻는 질문

Q. 키프레이즈 밀도 1~3%는 어디서 나온 기준인가요?
Rank Math를 비롯한 주요 SEO 플러그인에서 권장하는 일반적인 범위입니다. 절대 기준은 아니며, 콘텐츠 유형에 따라 다를 수 있습니다.

Q. AI 냄새 패턴 리스트는 어디서 구할 수 있나요?
별도로 공개된 표준 목록은 없습니다. 자신이 쓴 글이나 AI가 생성한 글을 비교하면서 반복 출현하는 표현을 직접 수집하는 방식이 현실적입니다.

Q. 이 스크립트를 WordPress와 연동할 수 있나요?
WordPress REST API를 통해 글 본문을 가져와서 채점 후 결과를 커스텀 필드에 저장하는 방식으로 연동할 수 있습니다. 별도의 구현이 필요하며, 이 글에서는 다루지 않습니다.

5축 자동 채점 구조의 핵심은 감으로 판단하던 글 품질을 수치로 바꾸는 것입니다. 점수 자체보다 어느 축이 낮은지 파악하는 데 의미가 있습니다. 구조를 갖추는 것만으로도 수정 방향이 명확해집니다.

썸네일: Markus Winkler on Unsplash

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤