본문 바로가기

카테고리 없음

웹 페이지 텍스트 추출해서 단어 빈도수 세기 예제

웹 페이지에서 텍스트를 추출하고 단어별 빈도수를 세어보겠습니다. 불용어 등을 처리하지 않은 간단한 버전입니다.

 

1. 웹 페이지에서 텍스트 추출하기

- 이번 예제에서 사용할 텍스트는 이란의 미사일 발사에 대한 트럼프 대통령의 연설문입니다. 

import requests
from bs4 import BeautifulSoup

url = 'https://www.voanews.com/middle-east/voa-news-iran/full-text-trumps-speech-iran'
html = requests.get(url)
soup = BeautifulSoup(html.text)
content = soup.select_one('.article__body  p:nth-child(2)').get_text()
print(content)

2. 전체 텍스트를 공백(space)을 기준으로 모두 나누고, 리스트 형태로 결과를 반환합니다.

word_list = content.lower().split()

 

3. 불필요한 기호(예: !@#$ 등)를 제거해줍니다.

def clean_wordlist(input_list):
    output_list = []
    for word in input_list:
        symbols = """!@#$%^&*()_-+={[}]|\;:"‘'·<>?/., """
        for i in range(len((symbols))):
            word = word.replace(symbols[i], '')      
        if len(word) > 0:
            output_list.append(word)
    return output_list
    
clean_list = clean_wordlist(word_list)

 

4. 반복문을 이용해서 리스트 요소의 빈도를 셉니다. 결과를 딕셔너리 형태로 저장합니다.

def counter(input_list):
    word_count = {}
    for word in clean_list:
        if word in  word_count:
            word_count[word] += 1
        else:
            word_count[word] = 1
    return word_count
    
word_count = counter(clean_list)
word_count
# >>> {'as': 6, 'long': 4, 'i': 4, ..., 'bless': 1}

 

5. 딕셔너리를 value 값을 기준으로 내림차순 정렬합니다.

word_count = sorted(word_count.items(), key=lambda x:x[1], reverse=True)
word_count

 

 

-이 글의 코드는 아나콘다(Anaconda3)가 설치된 주피터 노트북에서 작성되었습니다.