728x90
반응형
글에서 1개의 문장에서 명사만 뽑아서 Diagram을 그려보려고 합니다.
KoNLPy Package를 사용해서 한글 품사를 처리합니다.
d += (A := flow.State().label(tmp1[0][0]).at((0, 6))) # at : X, Y
에서 X, Y 좌표값을 좌하를 기점으로 시작하고 약 1.5 FlowState 크기로 보입니다.
여기서는 Diagram을 지정해서 그리지만 나중에는 자동으로 그려보려고 합니다.
from konlpy.tag import Kkma, Twitter
import schemdraw
from schemdraw import flow
import schemdraw.elements as elm
kkma = Kkma()
twt = Twitter()
text = '전기냉장고의 냉각작용은 압축기·방열기(放熱器)·모세관·냉각기로 된 냉동사이클에 의해 이루어진다. \
냉동사이클 속에는 \'프레온12\'라는 휘발성이 강한 냉매가 봉입(封入)되어 있다.[2] 압축기로 고압이 된 냉매 가스는 \
방열기의 가느다란 파이프를 지나는 동안에 열을 방출한다. 다시 말하면 바깥 공기로 냉각되어 액체 상태가 되어 \
모세관을 지나서 냉각기에 오면 주위에서 열을 빼앗으면서 갑자기 증발하는데, 이 때 냉각작용을 일으킨다. \
냉장고 속의 온도는 증발기의 온도로 작동하는 온도조절기(thermostat)의 스위치로 압축기를 작동시키거나 정지시키면서 \
조절한다.[3]‘냉동실’은 냉동기로 둘러싸인 작은 칸을 특별히 별개의 문으로 차단시킨 것으로서 -20°C 정도까지 내려가게 \
할 수 있다. 냉동기에 생기는 서리는 히터로 녹이거나 전환(轉換)코크로 온도가 높은 고압냉매를 응축기를 통과시키지 않고 \
직접 냉동기로 흘려서 자동적으로 제거할 수 있는데, 이 기구를 ‘자동 서리 제거 장치’라고 한다.'
sts = kkma.sentences(text) # 문장 구분
tag1 = twt.pos(sts[0]) # 품사 구분, 1번째 문장만 사용
tmp1 = [] # 명사만
tmp1_p = [] # 명사,동사,조사까지
nng_flag = 0 # 합성명사 작업 중 Flag
for i in range(len(tag1)-1):
if tag1[i][1] == 'Noun' and tag1[i+1][1] == 'Noun': # 합성명사는 하나로 한다.
tmp1.append([tag1[i][0] + tag1[i+1][0], 'Noun'])
tmp1_p.append(tmp1[-1])
nng_flag = 1
continue
# if nng_flag == 0 and (tag1[i][1] == 'Noun' or tag1[i][1] == 'Verb' or tag1[i][1] == 'Josa' or tag1[i][1] == 'Adjection'):
if nng_flag == 0 and (tag1[i][1] == 'Noun' or tag1[i][1] == 'Josa'):
tmp1_p.append([tag1[i][0], tag1[i][1]])
if nng_flag == 0 and tag1[i][1] == 'Noun':
tmp1.append([tag1[i][0], tag1[i][1]])
if nng_flag == 1:
nng_flag = 0
schemdraw.config(lw=1, font='NanumGothic', fontsize=10) # 한글 사용
with schemdraw.Drawing() as d:
d += (A := flow.State().label(tmp1[0][0]).at((0, 6))) # at : X, Y
d += (B := flow.State().label(tmp1[1][0]).at((3, 7.5)))
d += (C := flow.State().label(tmp1[2][0]).at((6, 9)))
d += (D := flow.State().label(tmp1[3][0]).at((7, 6)))
d += (E := flow.State().label(tmp1[4][0]).at((6, 3)))
d += (F := flow.State().label(tmp1[5][0]).at((7, 0)))
d += elm.ArcN(arrow='>').at(A.E).to(B.W).color('red')
d += elm.ArcN(arrow='>').at(B.E).to(C.W).color('orange').label(tmp1[-1][0])
d += elm.ArcN(arrow='>').at(C.S).to(D.N).color('blue')
d += elm.ArcN(arrow='>').at(D.S).to(E.N).color('blue')
d += elm.ArcN(arrow='>').at(E.S).to(F.N).color('blue')
728x90
반응형
'프로그램' 카테고리의 다른 글
[파이썬] 주식 캔들차트(candlestick) (0) | 2022.08.17 |
---|---|
[파이썬] 주식 골든크로스/데드크로스 (0) | 2022.08.17 |
[파이썬] 프로우차트 등(schemdraw) 폰트 크기 (0) | 2022.08.16 |
[파이썬] 프로우차트 등(schemdraw) 한글 사용 (0) | 2022.08.16 |
[파이썬] Anaconda재설치, 가상환경에서 tensorflow 설치 (0) | 2022.08.16 |
댓글