Python-Markdown에서 문서의 메타 데이터 추출하기

Python // 2024년 06월 10일 작성

마크다운 문서에 제목이나 실제로는 표시되지 않는 여러 정보를 표기하고 싶을 때 Meta-Data라는 확장을 이용해 볼 수 있다. 간단한 소개와 사용법을 알아보자.

Meta-Data

Python-Markdown의 Meta-Data 확장은 문서에 메타 데이터를 읽을 수 있게 지원하는 확장으로 MultiMarkdown에서 쓰이는 메타 데이터 표기 방식을 비슷하게 구현한 확장이다. 예를 들어 아래와 같은 마크다운 문서 예제를 보자.

Title: 문서의 제목
Description: 문서의 대략적인 설명
Date: 2024-06-07 12:34:56
-----

이 문서는 메타 정보가 포함된 마크다운 문서입니다.

여기서 상단에 Title, Description, Date 세 가지 정보를 적어놨는데 이게 메타 데이터다. 메타 데이터 구역 하단에 -----로 줄을 그어서 그 다음부터 본문이 이어진다는 것을 표시해 놨는데 이 줄은 꼭 그을 필요는 없지만 개인적으로는 이게 더 읽기에 쉬운 것 같아서 쓰고 있다.

참고로 메타 데이터 종류는 그냥 정의하기 나름이다. 위의 세 가지 필드도 개인적으로 정의해서 사용하는 것이지 원래 저렇게 쓰라고 정해진 건 하나도 없다.

메타 데이터 추출하기

메타 데이터는 마크다운 문서를 변환할 때 meta라는 확장을 명시해 주면 바로 추출할 수 있다. 다만 바로 변환하는 코드의 경우는 정보에 접근할 인터페이스가 없으니 별도로 Markdown 인스턴스를 생성해서 변환해 줘야 한다는 점에 주의하자. 아래와 같은 식이다.

import markdown

md = markdown.Markdown(extensions=["meta"])
html = md.convert(text)

이런 식으로 구현하면 변환(convert) 작업이 수행된 후 메타 데이터가 인스턴스의 Meta라는 사전형 프로퍼티로 저장되기 때문에 이 프로퍼티를 바로 액세스 할 수 있다.

print(f"title = {md.Meta['title']}")
print(f"description = {md.Meta['description']}")
print(f"date = {md.Meta['date']}")

필드 이름이 전부 소문자로 바뀐다는 점에 주의하자. 어쨌든 실제로 REPL에서 실행시켜 보면 아래와 같은 결과를 얻을 수 있다.

>>> md = markdown.Markdown(extensions=["meta"])
>>> html = md.convert(text)
>>>
>>> print(f"title = {md.Meta['title']}")
title = ['문서의 제목']
>>> print(f"description = {md.Meta['description']}")
description = ['문서의 대략적인 설명']
>>> print(f"date = {md.Meta['date']}")
date = ['2024-06-07 12:34:56']

좀 특이하게 리스트로 저장되어 있는데 굳이 사용에 어려울 건 없다. 이제 남은 일은 리스트의 첫 데이터를 끄집어내서 적절히 가공하는 일 뿐일 테니 말이다.

더 상세한 사용법은 공식 사이트의 레퍼런스 매뉴얼📎을 읽어볼 순 있겠지만 여기서 더 특수한 기능에 관한 정보는 없을 것 같다.