Kkma
morphs: 형태소 list를 반환한다.
nouns: 명사 list를 반환한다.
pos: (형태소, 종류)) tuple의 list를 반환한다.
sentences: 글을 문장단위로 쪼개어 list로 반환한다.
Hannanum
analyze: 문장에서 가능한 의미 덩이들의 list를 반환한다.
morphs: 형태소 list를 반환한다.
nouns: 명사 list를 반환한다.
pos: (형태소, 종류) tuple의 list를 반환한다.
Mecab
morphs: 형태소 list를 반환한다.
nouns: 명사 list를 반환한다.
pos: (형태소, 종류)) tuple의 list를 반환한다
--- 형태소 라이브러리 사용 시 참고 ---
아래의 내용은 절대적이지는 않다. 대체적으로 이렇게 평가받고 있을 뿐.
pip install --upgrade pip
pip install jpype1
pip install konlpy
#한글 데이터에 대한 형태소 분석 라이브러리 사용
#형태소 분석 : 품사 분류를 통해 언어적 속성을 파악
from konlpy.tag import Kkma
kkma = Kkma()
# 문장 단위
print(kkma.sentences('한글 데이터 형태소 분석을 위한 라이브러리 설치를 합니다'))
#명사만
print(kkma.nouns('한글데이터형태소분석을위한라이브러리설치를합니다'))
#품사 태깅.stem: 원형 어근으로 출력
print(kkma.pos('한글데이터형태소분석을위한라이브러리설치를합니다',stem=True))
#모든 품사
print(kkma.morphs('한글데이터형태소분석을위한라이브러리설치를합니다'))
okt = Okt()
#명사만
print(okt.nouns('한글데이터형태소분석을위한라이브러리설치를합니다'))
#품사 태깅
print(okt.pos('한글데이터형태소분석을위한라이브러리설치를합니다'))
#어절 추출
print(okt.phrases('한글데이터형태소분석을위한라이브러리설치를합니다'))
komo = Komoran()
print(komo.nouns('문자열입니다'))
print(komo.pos('문자열입니다'))
WEB scrap+KoNLpy
www.donga.com의 검색창에서 웹스크래핑을 이용해 워드클라우드를 구현해보자
#특정 신문사 사이트에서 검색단어에 의한 검색결과를 읽은 후 명사를 추출해
#워드 클라우드를 그리기
#pip install pytagcloud
#pip install simplejson
import urllib.request
from bs4 import BeautifulSoup
from konlpy.tag import Okt
import pytagcloud
#검색어는 인코딩을 하고 넘겨야한다.(quote)
from urllib.parse import quote
# input("검색어: ")
keyword = '미국'
url = 'https://www.donga.com/news/search?query=' + quote(keyword)
source_code = urllib.request.urlopen(url)
soup = BeautifulSoup(source_code,'lxml',from_encoding='utf-8')
msg = ''
#검색결과 리스트 중 url을 전부얻고,
#다시 urlopen으로 각 기사들의 내용 txt를 받는다.
for title in soup.select('div.rightList>span.tit'):
article_url = title.find('a')['href'] #링크
try:
source_article = urllib.request.urlopen(article_url)
soup = BeautifulSoup(source_article,'lxml',from_encoding='utf-8')
contents = soup.select('div.article_txt') #txt
for con in contents:
item = str(con.find_all(text=True))
msg += item #각 tag의 text누적
except:
pass
from collections import Counter #단어 수를 count
okt = Okt()
nouns = okt.nouns(msg) #형태소 분석. 명사별로 분할
result = []
for n in nouns:
if len(n) > 1:
result.append(n) #2글자 이상의 단어들만 리스트로
count = Counter(result)
print(count)
웹상에서 검색어 처리를 할때는 입력단어를 인코딩을 하고 넘겨야한다
이때 사용하는 라이브러리인from urllib.parse import quote
.
입력 변수에 quote()를 추가하자
Counter의 결과
Counter({'기사': 32, '피켓': 30, '생각': 24, '이미지': 19, ....
반환
워드클라우드 작성
tag = count.most_common(50) #상위 50개 단어
taglist = pytagcloud.make_tags(tag, maxsize=100)
#[{'color': (157, 92, 52), 'size': 117, 'tag': '기사'}, ...
#image 생성 후 저장
pytagcloud.create_tag_image\
(taglist,"word.png",size=(1000,600),background=(0,0,0),fontname="korean",rectangular=False)
이미지 읽기
# 이미지 읽기
import matplotlib.pyplot as plt
import matplotlib.image as pltimg
img = pltimg.imread("word.png")
plt.imshow(img)
plt.show()
#브라우저로 읽기
import webbrowser
webbrowser.open("word.png")
워드클라우드는 기본적으로 영어만 지원한다.
그래서 pytagcloud 라이브러리에 한글 폰트파일을 넣어줘야 한다.
AppData\Roaming\Python\Python310\site-packages\pytagcloud
pytagcloud 라이브러리 경로속 fonts 폴더에 한글을 지원하는 폰트.ttf를 넣어주고.
fonts.json
파일에서 추가한 폰트파일에 대한 정보를 추가한다.
{
"name": "korean",
"ttf": "malgun.ttf",
"web": "http://fonts.googleapis.com/css?family=Nobile"
},
이제 pytagcloud.create_tag_image
생성시 fontname 옵션을 위에 정한 name으로 맞춰주면 끝.