마을관련자료

[신문기사]구글 스프레드시트 이용하여 기사 추출 후 워드 클라우드 만들기

48 2024.08.20 11:32

본문

정말 워드클라우드 만들기 예측하지 못한 타이밍에 갑자기 아마존 쇼핑 리스트의 데이터를 받아와야 할 처지에 놓였다. 처음에는 그냥 beautifulsoup4 쓰면 어찌어찌 되지 않겠나 하고 생각했다가, 생각지도 못한 위기상황에 놓인 것도 있고 그걸 해결하는 과정들을 조금 적어 두면 후에 도움이 되지 않을까 해서 조금 길게 적어볼까 한다.1. 아마존 웹 페이지도 bs4(beautifulsoup4)로 가져올 수 있나요?​아마 잘 되지 않을 것이다. 아마존 웹 워드클라우드 만들기 페이지를 bs4로 가져오려고 하면 에러 메시지를 받을 것이다. 에러 메시지를 조금 자세히 읽어보면 아마존에서 활용하는 API를 사용하라고 되어 있는 듯 한데 그 과정이 조금 더 복잡해 보였다. 다른 사람들이 같은 주제로 풀어 낸 후기들을 보아하니 bs4와 selenium을 병행해서 쓰는 것을 추천받았다.​그런데 selenium이 뭐지?​selenium은 bs4가 제공해주지 못하는 '버튼을 클릭했을 때 얻을 수 있는 데이터', '자바스크립트 조건에 워드클라우드 만들기 충족되어야만 얻을 수 있는 데이터'등등을 얻게 해 줄 수 있는 테스팅 프레임워크다. selenium은 직접적으로 웹 사이트에 접근해서 자동화 과정을 수행해 주기 때문에 조금 더 다양한 유형을 활용해 볼 수 있다. 이런 selenium을 활용하기 위해서는 webdriver가 필요하다. 나는 주로 chrome을 쓰기 때문에, chrome webdriver를 구글링하니 쉽게 얻을 수 있었다. 이 웹드라이버를 다운받아 /usr/local/bin에 옮겨넣었고 아래와 같은 워드클라우드 만들기 코드를 입력한 뒤 네이버가 잘 켜지는지 테스트를 해 보았다.제대로 설치했다면 갑자기 내가 실행하지도 않았는데 크롬창이 켜지더니, 네이버로 이동하는 모습이 보일 것이다. 그럼 이제 selenium을 쓸 준비가 어느 정도 된 것이다. get( )안에 들어갈 url을 우리가 검색할 아마존 물품의 링크로 이동시키자.2. 아마존 리뷰를 전부 가져오려는데... 조금 이상하다?​원래대로면 약 2,600개 정도의 리뷰를 모두 다 크롤링하려고 했었는데, 하다 워드클라우드 만들기 보니까 왠지 600개 정도만 가져오는 걸 확인했다. 이게 대체 무슨 일인가 했는데, 참고했던 코드에서 regex를 활용해서 댓글을 가져오던 것이 ,가 있게 되면 ,이후의 숫자만 가져오게 하는 것이었다.​1차적으로 이 문제를 해결(?)하는 방법은 전체 리뷰 갯수를 우리가 직접 파악해서 값을 입력하는 것이지만 솔직히 이건 프로그래밍으로 해결하는 게 아니라 완전 꼼수기 때문에... 결국 시간을 들여 직접 해결하는 방식으로 워드클라우드 만들기 진행했다. 우선 위와 같은 댓글 데이터 갯수를 html 태그에서 찾은 뒤, 이를 split( )한 값의 첫 값을 가져온다. 위 사진처럼 , 없이 단순 숫자로 되어 있는 경우에는 받아온 값을 곧바로 int로 형변환하면 되겠지만, 만약 이런 경우면 어떨까.2,602에 해당하는 정수 값은 존재하지 않는다. 우리가 생각한 건 아마 2602였겠지만 말이다. 따라서 우리는 ,를 제외한 값을 받아와야 한다. 워드클라우드 만들기 다만 어떤 물건의 경우 리뷰가 1,000,000건이 될 수도 있으니 나는 일단 ,를 기준으로 각 숫자를 분리한 뒤 이를 join으로 다시 묶고, 묶은 문자를 int로 형변환하는 방식을 택했다.3. 리뷰 데이터로 워드클라우드를 만들어야 하는데... I my me mine이 너무 많다!​이런 유형의 단어들을 보고 불용어 라고 말한다. 불용어는 분석에 큰 의미가 없는 단어로, 문장을 구성하는 데에는 필수 요소이지만 워드클라우드 만들기 문맥적으로는 큰 의미가 없다. 다만 이런 단어는 문장 내에서 굉장히 빈번하게 사용되기 때문에 이는 문장을 분석하는 데 큰 걸림돌이 될 수 있어서 제거해 주어야 한다.​nltk에서 정의하는 영문 불용어 리스트는 다음과 같다.이 불용어를 각 문장에서 제거한 값을 바탕으로 워드클라우드를 만든 코드의 일부는 다음과 같다.물론 nltk에서 download로 stop_words를 불러올 수 도 있지만 내 경우에는 경로 문제인지 제대로 워드클라우드 만들기 호출이 되지 않아 이런 미봉책?을 사용했다.

댓글목록

등록된 댓글이 없습니다.