카테고리 없음

뉴스분석 및 요약서비스(필터링 중복 선택기능 추가)

hearai 2025. 1. 10. 00:06

 

주요 기사 모아보기 창은 키워드에 오른 관련 기사들을 모아서 보여준다. 원하는 주제에 대한 검색을 원활히 도울 수 있도록 필터링 기능을 추가했고, 언론사는 3개까지, 키워드는 5개까지 선택할 수 있다. 이를 통해 키워드 주제에 대한 언론사의 관점을 비교할 수 있다. 향후 이것을 분석해주는 llm을 개발할 예정이다.

 

🥕 필터 초기화 버튼 문제

필터 초기화 버튼을 눌렀을 때 언론사 필터는 초기화되지만 키워드 필터의 선택 태그가 화면에 그대로 남아있었다. 실제 데이터는 초기화되었으나 UI가 업데이트되지 않는 문제였다. 확인해보니 초기화 함수에서 updateKeywordTags() 함수 호출이 누락되었고, 키워드 태그와 언론사 태그의 업데이트 로직이 분리되어 있어 동기화 문제 발생한 것이었다. 언론사 필터와 키워드 필터를 초기화하고, 모든 태그를 업데이트 하여 해결하였다.

if (resetButton) {
    resetButton.addEventListener('click', function() {
        // 1. 데이터 초기화
        selectedCompanyList.clear();
        selectedKeywordList.clear();
        
        // 2. select 옵션 초기화
        Array.from(companyFilter.options).forEach(option => {
            option.selected = false;
        });
        Array.from(keywordFilter.options).forEach(option => {
            option.selected = false;
        });
        
        // 3. UI 업데이트 함수 추가
        updateTags();
        updateKeywordTags();  // 이 부분이 누락되어 있었음
        
        filterArticles();
    });
}

 

🥕 필터링 순서 강제 문제

사용자가 키워드만 선택했을 때 아무런 결과가 표시되지 않고 빈 화면만 보였었다. 언론사를 먼저 선택해야 한다는 안내가 없어 사용자가 혼란을 겪을 수 있었다. 필터링 로직이 언론사 선택을 전제로 설계되어 사용자 안내 메시지를 넣어 보완했다.

window.filterArticles = function() {
    const selectedCompanies = Array.from(selectedCompanyList);
    const selectedKeywords = Array.from(selectedKeywordList);
    
    // 1. 키워드만 선택된 경우 체크 로직 추가
    if (selectedKeywords.length > 0 && selectedCompanies.length === 0) {
        filteredContainer.innerHTML = '<p class="text-gray-500 text-center py-4">언론사를 먼저 선택해주세요.</p>';
        return;
    }
    
    // 2. 기존 필터링 로직
    // ...
}

 

🥕 전체 선택 옵션 문제

전체 선택 옵션을 만들었는데, 너무 많은 기사가 선택되면 AI 분석 시 성능 저하가 우려되었고, 사용자에게 의미 있는 분석 결과를 제공하기 어려울 것 같았다. 초기 설계 시 전체 선택의 부작용을 미처 고려하지 못했으나 HTML에서 전체 선택 옵션 제거하고, 필터 개수 제한 추가하여 해결했다.

// 언론사 최대 3개로 제한
if (selectedCompanyList.size >= 3) {
    alert('최대 3개의 언론사만 선택할 수 있습니다.');
    return;
}

// 키워드 최대 5개로 제한
if (selectedKeywordList.size >= 5) {
    alert('최대 5개의 키워드만 선택할 수 있습니다.');
    return;
}

 

 

키워드 분석은 하루 반시간 정도 투자해 계속해 개선해가고 있다. 기사 간 중복도를 체크하고, 주요 키워드 아래 연관 키워드들을 그룹핑시켜 빈도수 기반으로 랭킹을 선정했다. 한 기사 안에 반복되는 키워드는 체크되지 않도록 했다.

 

keyword_rankings

[('박정훈', 52, {'훼손', '명예', '항명', '채상병', '상관', '선고', '박정훈', '대령', '무죄', '혐의'}), 

('체포', 36, {'신원', '저지', '경찰', '요청', '경호', '체포'}), 

('폭행', 17, {'징역', '폭행', '확정'}), 

('윤석열', 8, {'윤석열'}), 

('윤건영', 5, {'윤건영'}), 

('대통령', 5, {'대통령'}), 

('지지율', 4, {'지지율'}),

('내란', 3, {'내란'}),

('조국', 3, {'조국'}),

('민주당', 3, {'민주당'})]
filtered articles count: 53

 

이런 식으로 100개 기사 중 기사 간 중복도를 체크하여 그 중 가장 많이 나온 키워드를 선정하게 했다. 예를 들어, 박정훈 대령의 경우 채상병 사건의 혐의를 무죄 선고 받았는데, 기사 제목에서 키워드를 분석하여 가장 많이 언급된 키워드를 하나만 선택한 것을 알 수 있다. 현재 키워드 추출 및 그룹핑 로직이 안정적으로 작동하며, 복합어 분리나 동작어 추출은 실제로 문제되지 않는 것을 확인했다. 기사 수가 적은 경우에도 연관 키워드 그룹핑이 잘 되고 있다. 기능적으로 더 만족스러운 서비스를 개발하고자 지속해 노력해갈 것이다.