웹 페이지에서 텍스트를 추출하고 단어별 빈도수를 세어보겠습니다. 불용어 등을 처리하지 않은 간단한 버전입니다.
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)가 설치된 주피터 노트북에서 작성되었습니다.