# 웹 문서를 읽어 형태소 분석(konlpy) 후 단어 빈도 수 등을 출력
import urllib
from bs4 import BeautifulSoup
from konlpy.tag import Okt
from urllib import parse # 한글 인고딩
okt = Okt()
# searchPara = input('검색단어 : ') # 검색해서 사용 가능
searchPara = "이순신"
searchPara = parse.quote(searchPara)
# print(searchPara) # 웹에서 검색할 때는 인코딩을 해주어야 된다.
url = "https://ko.wikipedia.org/wiki/" + searchPara # 검색단어가 아닌 인코딩해서 받아야 된다.
# url = "https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%88%9C%EC%8B%A0" # 이 방법도 가능
page = urllib.request.urlopen(url).read().decode()
# print(page)
soup = BeautifulSoup(page, 'lxml')
# print(soup)
wordlist = [] # 명사만 추출해서 기억
for item in soup.select('#mw-content-text > div.mw-parser-output > p'):
# print(item.string)
if item.string != None:
# print(item.string) # none을 제외한 글 호출
wordlist += okt.nouns(item.string)
print('wordlist :', wordlist, ', 단어수 :', len(wordlist))
# {'당시':5, ...}
word_dict = {} # 단어의 발생 횟수를 dict로 저장
for i in wordlist:
if i in word_dict:
word_dict[i] += 1
else:
word_dict[i] = 1
print('발생 단어 수 : \n', word_dict)
print('발견된 단어 수(중복 제거) :' + str(len(set(wordlist))))
# 중복을 제거하기 위해 list 타입을 set 타입으로 변경했다.
print()
print('결과를 Series로 출력')
import pandas as pd
woList = pd.Series(wordlist)
print(woList[:3])
print(woList.value_counts()[:5]) # 숫가가 큰 순서대로 출력
print()
print('결과를 DataFrame으로 출력')
df1 = pd.DataFrame(wordlist, columns = ['단어'])
print(df1.head(5))
print()
df2 = pd.DataFrame([word_dict.keys(), word_dict.values()])
print(df2)
df2 = df2.T
df2.columns = ['단어', '빈도수']
print(df2.head(5))
#...
<console>
wordlist : ['당시', '조산', '만호', '이순신', '북방', '여진족', '약탈', '및', '침략', '예상', '수비', '위', '차례', '북', '병사', '이일', '추가', '병력', '요청', '모두', '거절', '이', '패전', '책임', '지게', '북', '병사', '이일', '이순신', '그', '책임', '이순신', '죄', '수금', '백의종군', '일본군', '조선', '군인', '꼴', '상한', '채', '음력', '말', '이순신', '함대', '전열', '정비', '부산', '출정', '당포', '경상우수사', '합류', '적', '동태', '대한', '보고', '입수', '그날', '전투', '시작', '음력', '아침', '화준', '구미', '일본군', '배', '척', '다대', '포', '앞바다', '배', '척', '서평', '포', '앞바다', '배', '척', '절영도', '배', '척', '부산', '앞바다', '적의', '소굴', '여', '척', '배', '중', '적선', '여', '척', '전투', '때', '배', '모두', '부수', '상륙', '일본군', '방법', '후일', '수륙', '공격', '위해', '함대', '원균', '대립', '각기', '정', '파적', '입장', '갈등', '심화', '선조', '실록', '선조', '수정', '실록', '두', '인물', '대한', '입장', '차이', '이', '대한', '논의', '당시', '뿐', '임진왜란', '논공', '행상', '자리', '진위', '및', '당부', '대한', '논란', '미국', '영국', '해군', '교과서', '책', '해전', '모든', '것', '휴먼', '앤', '북스', '이순신', '전설', '명장', '제독', '추앙', '반면', '원균', '조선', '수군', '산채', '매장', '최악', '제독', '평가', '적군', '배', '부', '것', '척', '그', '장수', '마다', '명량대첩비', '노량해전', '끝', '임진왜란', '선조', '실록', '사관', '당시', '사람', '모두', '이순신', '산', '왜놈', '격파', '말', '이순신', '용모', '대해', '이순신', '생전', '초상화', '그', '얼굴', '묘사', '기록', '남아', '뿐', '주화', '이순신', '제독', '복식', '이순신', '제독', '초상화', '중', '갑옷', '전립', '관복', '차림', '이순신', '초상화', '영의정', '예우', '실제', '이순신', '살아생전', '그', '복장', '현대', '서도', '충무공', '거의', '완전무결', '인물', '성자', '영웅', '것', '천관우', '등', '이순신', '대한', '평가', '아주', '이순신', '일기', '시조', '한시', '등', '여러', '편의', '작품'] , 단어수 : 240
발생 단어 수 :
{'당시': 3, '조산': 1, '만호': 1, '이순신': 14, '북방': 1, '여진족': 1, '약탈': 1, '및': 2, '침략': 1, '예상': 1, '수비': 1, '위': 1, '차례': 1, '북': 2, '병사': 2, '이일': 2, '추가': 1, '병력': 1, '요청': 1, '모두': 3, '거절': 1, '이': 2, '패전': 1, '책임': 2, '지게': 1, '그': 4, '죄': 1, '수금': 1, '백의종군': 1, '일본군': 3, '조선': 2, '군인': 1, '꼴': 1, '상한': 1, '채': 1, '음력': 2, '말': 2, '함대': 2, '전열': 1, '정비': 1, '부산': 2, '출정': 1, '당포': 1, '경상우수사': 1, '합류': 1, '적': 1, '동태': 1, '대한': 5, '보고': 1, '입수': 1, '그날': 1, '전투': 2, '시작': 1, '아침': 1, '화준': 1, '구미': 1, '배': 7, '척': 7, '다대': 1, '포': 2, '앞바다': 3, '서평': 1, '절영도': 1, '적의': 1, '소굴': 1, '여': 2, '중': 2, '적선': 1, '때': 1, '부수': 1, '상륙': 1, '방법': 1, '후일': 1, '수륙': 1, '공격': 1, '위해': 1, '원균': 2, '대립': 1, '각기': 1, '정': 1, '파적': 1, '입장': 2, '갈등': 1, '심화': 1, '선조': 3, '실록': 3, '수정': 1, '두': 1, '인물': 2, '차이': 1, '논의': 1, '뿐': 2, '임진왜란': 2, '논공': 1, '행상': 1, '자리': 1, '진위': 1, '당부': 1, '논란': 1, '미국': 1, '영국': 1, '해군': 1, '교과서': 1, '책': 1, '해전': 1, '모든': 1, '것': 3, '휴먼': 1, '앤': 1, '북스': 1, '전설': 1, '명장': 1, '제독': 4, '추앙': 1, '반면': 1, '수군': 1, '산채': 1, '매장': 1, '최악': 1, '평가': 2, '적군': 1, '부': 1, '장수': 1, '마다': 1, '명량대첩비': 1, '노량해전': 1, '끝': 1, '사관': 1, '사람': 1, '산': 1, '왜놈': 1, '격파': 1, '용모': 1, '대해': 1, '생전': 1, '초상화': 3, '얼굴': 1, '묘사': 1, '기록': 1, '남아': 1, '주화': 1, '복식': 1, '갑옷': 1, '전립': 1, '관복': 1, '차림': 1, '영의정': 1, '예우': 1, '실제': 1, '살아생전': 1, '복장': 1, '현대': 1, '서도': 1, '충무공': 1, '거의': 1, '완전무결': 1, '성자': 1, '영웅': 1, '천관우': 1, '등': 2, '아주': 1, '일기': 1, '시조': 1, '한시': 1, '여러': 1, '편의': 1, '작품': 1}
발견된 단어 수(중복 제거) :167
결과를 Series로 출력
0 당시
1 조산
2 만호
dtype: object
이순신 14
척 7
배 7
대한 5
그 4
dtype: int64
결과를 DataFrame으로 출력
단어
0 당시
1 조산
2 만호
3 이순신
4 북방
0 1 2 3 4 5 6 7 8 ... 158 159 160 161 162 163 164 165 166
0 당시 조산 만호 이순신 북방 여진족 약탈 및 침략 ... 천관우 등 아주 일기 시조 한시 여러 편의 작품
1 3 1 1 14 1 1 1 2 1 ... 1 2 1 1 1 1 1 1 1
[2 rows x 167 columns]
단어 빈도수
0 당시 3
1 조산 1
2 만호 1
3 이순신 14
4 북방 1