HTML 문자열에서 한글 텍스트 추출하기

시스템 내 공지사항이나 사용자 입력 콘텐츠를 관리할 때, 종종 HTML 태그가 포함된 문자열을 다뤄야 하는 경우가 있습니다. 예를 들어, 에디터를 통해 작성된 공지 내용은 다음과 같이 서식과 함께 저장될 수 있습니다.

<p class="ql-align-center"><strong>추석 연휴 안내</strong></p>
<p>매년 찾아오는 설날을 맞아, 직원 여러분의 일정 조기 준비를 돕기 위해 2024년 국가 규정 및 회사 복지 정책에 따라 연휴 일정을 아래와 같이 공지합니다.</p>
<p>1. 휴무 기간</p>
<p> 2월 8일 - 2월 9일: 회사 복지 유급 휴무</p>
<p> 2월 10일 - 2월 17일: 법정 설날 휴무</p>
<p> 총 10일간 휴무입니다.</p>

이러한 HTML 형식의 데이터를 목록 화면 등에서 간략히 미리보기로 표시할 때, 태그까지 그대로 노출되면 사용자에게 불필요한 정보가 보여지고 가독성이 떨어집니다. 따라서 실제 **한글 본문만 추출**하여 순수 텍스트 형태로 표현하는 것이 필요합니다.

의존성 추가

Java 환경에서 HTML 파싱을 위해 jsoup 라이브러리를 활용할 수 있습니다. Maven 기준으로 다음 의존성을 pom.xml에 추가하세요.

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.16.1</version>
</dependency>

텍스트 추출 유틸리티 클래스

다음은 HTML 문자열에서 순수 텍스트를 추출하는 도구 클래스입니다. jsoup을 이용해 태그를 제거하고, 필요한 형태로 텍스트를 반환합니다.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.util.List;
import java.util.stream.Collectors;

public class HtmlTextExtractor {

    /**
     * HTML 전체에서 순수 텍스트 추출 (모든 태그 제거)
     */
    public static String extractPlainText(String htmlContent) {
        if (htmlContent == null || htmlContent.isEmpty()) {
            return "";
        }
        Document document = Jsoup.parse(htmlContent);
        return document.text();
    }

    /**
     * 특정 태그(p 태그 등) 내 텍스트만 리스트로 추출
     */
    public static List<String> extractTextByTag(String htmlContent, String tagName) {
        if (htmlContent == null || htmlContent.isEmpty()) {
            return List.of();
        }
        Document document = Jsoup.parse(htmlContent);
        Elements elements = document.select(tagName);
        return elements.stream()
                       .map(Element::text)
                       .filter(text -> !text.trim().isEmpty())
                       .collect(Collectors.toList());
    }

    /**
     * 특정 클래스를 가진 요소의 텍스트 추출 (예: .ql-align-center)
     */
    public static String extractTextByClass(String htmlContent, String cssClass) {
        if (htmlContent == null || htmlContent.isEmpty()) {
            return "";
        }
        Document document = Jsoup.parse(htmlContent);
        return document.select("." + cssClass).text();
    }
}

사용 예시

String inputHtml = "<p><strong>중요 공지</strong></p><p>추석 연휴 기간 동안 업무가 중단됩니다.</p>";

System.out.println("전체 텍스트: " + HtmlTextExtractor.extractPlainText(inputHtml));
// 출력: 전체 텍스트: 중요 공지 추석 연휴 기간 동안 업무가 중단됩니다.

List<String> paragraphs = HtmlTextExtractor.extractTextByTag(inputHtml, "p");
System.out.println("각 단락: " + paragraphs);
// 출력: 각 단락: [중요 공지, 추석 연휴 기간 동안 업무가 중단됩니다.]

이처럼 jsoup을 활용하면 HTML 구조를 유지하지 않으면서도 의미 있는 텍스트 정보만 안정적으로 추출할 수 있어, 공지 사항 미리보기, 검색 인덱싱, 로깅 등 다양한 시나리오에 유용하게 적용할 수 있습니다.

태그: java jsoup html-parsing text-extraction string-processing

6월 17일 03:57에 게시됨