AI에게 던져줄 블로그 아티클 본문 추출하기

AI 관련 워크로드를 구현하는 코드를 작성할 때, RAG에 앞서 전처리를 수행하는 것을 많이 고민하게 됩니다. 이 때, 블로그 아티클이나 포털 뉴스 기사처럼 본문이 아닌 다른 영역이나 주변부 콘텐츠들이 섞여있어 골라내기 쉽지 않은 종류의 페이지들을 처리하는 것이 무척 중요합니다.

이런 부분을 파이썬 측 라이브러리나 AI의 추가 도움 없이 빠르게 추출할 수 있는 방법을 간단히 구현해보았습니다. ReverseMarkdownSmartReader nuget 패키지 2개면 충분합니다.

var url = "https://n.news.naver.com/mnews/article/003/0013545358";
var parseResult = await SmartReader.Reader.ParseArticleAsync(url);
var converter = new ReverseMarkdown.Converter(new ReverseMarkdown.Config()
{
	CleanupUnnecessarySpaces = true,
	GithubFlavored = true,
	SmartHrefHandling = true,
	UnknownTags = ReverseMarkdown.Config.UnknownTagsOption.Bypass,
});

var contentTitle = converter.Convert($"<h1>{parseResult.Title}</h1>");
Console.WriteLine(contentTitle);

var contentMarkdown = converter.Convert(parseResult.Content);
Console.WriteLine(contentMarkdown);

그러면 아래와 같이 마크다운 문서를 본문에서 정확히 추출할 수 있습니다.

만약 LINQPad에서 실제로 마크다운을 렌더링해보고 싶으시다면, 아래처럼 코드를 작성하면 렌더링된 모습도 볼 수 있습니다. (단 이것은 Chromium 렌더링 엔진을 사용하는 LINQPad 8 이상이 필요합니다.)

Util.RawHtml($"<script src=\"https://cdn.jsdelivr.net/gh/MarketingPipeline/Markdown-Tag/markdown-tag.js\"></script><md>{contentMarkdown}</md>").Dump();

3개의 좋아요

저도 html 크롤링할때 웹페이지의 쓸모없는 메뉴 등의 데이터들 때문에 이 방법도 적용해봤었는데, SmartReader로 못가져 오는 사이트들이 몇몇 있더라구요. 몇몇 경우, 예를 들어 내부 ajax로 리다이렉팅 되어서 콘텐츠가 나온다던지, html 좀 이상하다던지 하는 경우 데이터를 요걸로 가져오는게 어려워서.. 물론 수정하거나 방법을 찾을 수야 있겠지만, 의외로 웹페이지 중에 콘텐츠 로딩부와 콘텐츠가 분리된 경우도 많아서요. 그래도 대부분의 경우, 쓸만하더라구요.ㅎㅎㅎ

2개의 좋아요