ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TensorFlow 기초 32 - 형태소 분석 후 word2vec을 이용하여 단어 간 유사도 확인
    TensorFlow 2022. 12. 9. 16:24

     

    daum 사이트의 뉴스자료를 읽어 형태소 분석 후 word2vec을 이용하여 단어 간 유사도 확인

     

    # 네이버 뉴스 기사를 읽어 형태소 분석 후 word2vec을 이용하여 단어간 유사도 확인
    
    import pandas as pd
    from konlpy.tag import Okt
    
    okt = Okt()
    with open('daumnews.txt', mode='r', encoding='utf-8') as f:
        lines = f.read().split('\n')
    print(lines)
    print(len(lines))
    
    wordDic = {}  # 명사만 추출해 단어 수 확인 {'카카오': 7 ...
    for line in lines:
        datas = okt.pos(line)  # pos : 품사 태깅
        # print(datas) # 명사만 찾기 ('카카오', 'Noun')
        for word in datas:
            if word[1] == 'Noun': 
                if not(word[0] in wordDic):
                    wordDic[word[0]] = 1
                wordDic[word[0]] += 1
    
    print(wordDic)
    
    # 단어 건수별 내림차순 
    keys = sorted(wordDic.items(), key=lambda x:x[1], reverse=True)
    print(keys)
    
    # DataFrame에 담기
    wordList =[]
    countList = []
    
    for word, count in keys[:20]:
        wordList.append(word)
        countList.append(count)
    
    df = pd.DataFrame()
    df['word'] = wordList
    df['count'] = countList
    print(df.head(5))
    
    # 이 후 pandas의 다양한 기능들을 활용함
    print('***'*20)
    results = []
    with open('daumnews.txt', mode='r', encoding='utf-8') as f:
        lines = f.read().split('\n')
    
        for line in lines:
            datas = okt.pos(line, stem=True)  # 원형 어근으로 출력 한가한 -> 한가하다.
            # print(datas)
            imsi = []
            for word in datas:
                if not word[1] in ['Foreign', 'Number','Josa','Punctuation','Modifier','Suffix','Exclamation', 'Alpha']: 
                    if len(word[0]) >= 2:
                        imsi.append(word[0])
            
            imsi2 = (" ".join(imsi)).strip()  # 좌우 공백 자르기
            results.append(imsi2)
    print(results) # ['카카오 카카오 개인 프로필 영역 인스타그램 좋다 누르다 공감 스티커 지난 출시 하다 이용자 다양하다 반응 내놓다 있다', ...
    
    fn = 'naver_clean.txt'
    with open(fn, mode='w', encoding='utf-8') as fobj:
        fobj.write('\n'.join(results))
    print('성공')
    
    print('\n밀집벡터 생성 방법 중 word2vec 사용 ---  단어 간 유사도를 확인')
    from gensim.models import word2vec
    
    lineobj = word2vec.LineSentence(fn) # 객체로 나옴 
    print(lineobj)  # LineSentence object
    
    model = word2vec.Word2Vec(lineobj, min_count=1, vector_size=100, window=10, sg= 1)
    # sg = 0 : CBOW - 주변 단어로 중심 단어를 예측,/ sg = 1 : SkipGram - 중심 단어로 주변 단어를 예측
    print(model)
    
    print(model.wv.most_similar(positive=['아파트']))
    print(model.wv.most_similar(positive=['하락'], topn=3))
    print(model.wv.most_similar(positive=['아파트', '매수'], topn=3))
    print(model.wv.most_similar(negative=['지수']))
    
    
    
    <console>
    ['집 살 사람 어디 없나···전국 아파트 매수심리 또 역대 최저치 경신', '', '[서울경제]', '전국의 아파트 매매수급지수가 또 다시 역대 최저치를 경신했다. 기준금리 인상이 아직도 끝나지 않은 가운데 부동산 가격의 하락세도 가팔라지면서 매수 심리가 더 강하게 얼어붙고 있다.', '', '9일 한국부동산원에 따르면 12월 첫째 주(5일 기준) 전국 아파트 매매수급지수는 전주(74.4)보다 하락한 73.1를 기록했다. 이로써 전국 아파트 매매수급지수는 지난주에 이어 또 다시 역대 최저치를 경신했다. 이 지수는 기준선 100보다 낮으면 집을 사려는 사람보다 팔려는 사람이 많음을, 100보다 높으면 그 반대를 나타낸다.', '', '광고 서울주택도시공사 캠페인 입니다', "'사전예약'으로 청약하는 고덕강일3단지", 'SH서울주택도시공사', '', '광고 정보', '서울의 매매수급지수가 65.7으로 전주(66.7)보다 하락하며, 전주와 마찬가지로 통계 집계 첫 주인 2012년 7월 첫째 주(58.3) 이후 가장 낮은 수준을 보였다. 경기 매매수급지수는 69.2로 이어 처음으로 60선을 기록했다. 인천은 전주(69.6)보다 낮은 68.5를 기록하며, 2013년 9월 둘째주(66.1) 이후 가장 낮았다. 이로써 수도권의 매매수급지수는 전주(69.4)보다 낮은 68.0으로, 통계 집계 첫 주(61.5)에 이어 가장 낮았다. 지방의 매매수급지수는 77.8로 2019년 11월 둘째주(77.2) 이후 가장 낮았다.', '', '매수 심리가 얼어붙으면서 매매가도 연일 최대 하락폭을 경신하고 있다. 이번주 전국 아파트 매매가는 0.59% 하락하며 올 5월 둘째주부터 31주 연속 하락했다. 주간 하락폭도 전주(-0.56%)에 이어 또 다시 2012년 5월 통계 작성 이래 역대 최대를 기록했다. 아파트 매매가 하락폭은 수도권(-0.69%→-0.74%)과 지방(-0.43%→-0.45%) 모두에서 확대됐다. 시도별로는 세종(-1.02%)시의 하락 폭이 가장 컸으며, 인천(-0.98%)과 경기(-0.78%), 대구(-0.68%), 대전(-0.61%), 서울(-0.59%), 울산(-0.58%), 부산(-0.53%), 경남(-0.51%) 등이 뒤를 이었다. 서울의 아파트 매매가는 28주 연속 하락했으며, 전주(-0.52%)에 이어 역대 최대 하락폭도 경신했다.', '', '아파트 전세가격의 하락세도 더욱 가팔라졌다. 이번주 전국 아파트 전세가는 0.73% 하락하며 전주주(-0.69%) 대비 하락폭을 키웠다. 전세가 하락폭은 수도권(-0.95%→-1.00%)과 지방(-0.44%→-0.47%) 모두 확대됐으며, 시도별로는 인천(-1.11%), 경기(-1.00%), 서울(-0.96%), 대구(-0.85%), 세종(-0.81%), 울산(-0.68%), 대전(-0.62%), 부산(-0.60%), 광주(-0.46%)등의 순을 보였다. 이로써 전국 아파트 전세가는 31주 연속, 서울 아파트 전세가는 26주 연속 하락했다.', '', '매매가와 전세가가 상승 전환은커녕 연일 하락폭을 키우면서 부동산시장은 악순화의 굴레에서 벗어나지 못하고 있다. 매매가가 계속해서 하락하자 역전세를 우려하는 임차인들은 더 저렴한 전세매물을 찾고, 이는 다시 매매시장을 자극해 매매가를 더욱 끌어내리기 때문이다. 이 와중에 매도에 실패한 물량까지 전세시장으로 넘어오면서 전세매물은 늘어나고, 전세가는 물론 매매가까지 더욱 크게 하락하게 된다.']
    19
    {'집': 3, '살': 2, '사람': 4, '어디': 2, '전국': 8, '아파트': 12, '매수': 11, '심리': 4, '또': 5, '역대': 6, '최저': 4, '치': 2, '경신': 6, '서울': 7, '경제': 2, '지수': 9, '다시': 5, '기준금리': 2, '인상': 2, '가운데': 2, '부동산': 4, '가격': 3, '하락': 20, '세도': 3, '라지': 2, '면서': 2, '더': 3, '한국': 2, '첫째': 3, '주': 13, '기준': 3, '전주': 8, '를': 3, '기록': 5, '지난주': 2, '이': 3, '선': 3, '사려': 2, '음': 2, '그': 2, '반대': 2, '광고': 3, '주택': 3, '시공사': 3, '캠페인': 2, '사전예약': 2, '청약': 2, '고덕': 2, '강일': 2, '단지': 2, '정보': 2, '마찬가지': 2, '통계': 4, '집계': 3, '첫': 3, '주인': 2, '이후': 4, '가장': 6, '수준': 2, '경기': 4, '로': 3, '처음': 2, '인천': 4, '수도권': 4, '지방': 4, '매가': 7, '연일': 3, '최대': 4, '폭': 7, '이번': 3, '연속': 5, '주간': 2, '폭도': 3, '작성': 2, '매매': 4, '과': 4, '모두': 3, '확대': 3, '시도': 3, '별로': 3, '세종': 3, '시': 2, '대구': 3, '대전': 3, '울산': 3, '부산': 3, '경남': 2, '등': 3, '뒤': 2, '더욱': 4, '팔': 2, '전세': 7, '주주': 2, '대비': 2, '광주': 2, '순': 2, '가가': 3, '상승': 2, '전환': 2, '시장': 4, '악': 2, '화의': 2, '굴레': 2, '못': 2, '계속': 2, '우려': 2, '임차': 2, '은': 2, '매물': 3, '자극': 2, '때문': 2, '와중': 2, '매도': 2, '물량': 2, '크게': 2}
    [('하락', 20), ('주', 13), ('아파트', 12), ('매수', 11), ('지수', 9), ('전국', 8), ('전주', 8), ('서울', 7), ('매가', 7), ('폭', 7), ('전세', 7), ('역대', 6), ('경신', 6), ('가장', 6), ('또', 5), ('다시', 5), ('기록', 5), ('연속', 5), ('사람', 4), ('심리', 4), ('최저', 4), ('부동산', 4), ('통계', 4), ('이후', 4), ('경기', 4), ('인천', 4), ('수도권', 4), ('지방', 4), ('최대', 4), ('매매', 4), ('과', 4), ('더욱', 4), ('시장', 4), ('집', 3), ('가격', 3), ('세도', 3), ('더', 3), ('첫째', 3), ('기준', 3), ('를', 3), ('이', 3), ('선', 3), ('광고', 3), ('주택', 3), ('시공사', 3), ('집계', 3), ('첫', 3), ('로', 3), ('연일', 3), ('이번', 3), ('폭도', 3), ('모두', 3), ('확대', 3), ('시도', 3), ('별로', 3), ('세종', 3), ('대구', 3), ('대전', 3), ('울산', 3), ('부산', 3), ('등', 3), ('가가', 3), ('매물', 3), ('살', 2), ('어디', 2), ('치', 2), ('경제', 2), ('기준금리', 2), ('인상', 2), ('가운데', 2), ('라지', 2), ('면서', 2), ('한국', 2), ('지난주', 2), ('사려', 2), ('음', 2), ('그', 2), ('반대', 2), ('캠페인', 2), ('사전예약', 2), ('청약', 2), ('고덕', 2), ('강일', 2), ('단지', 2), ('정보', 2), ('마찬가지', 2), ('주인', 2), ('수준', 2), ('처음', 2), ('주간', 2), ('작성', 2), ('시', 2), ('경남', 2), ('뒤', 2), ('팔', 2), ('주주', 2), ('대비', 2), ('광주', 2), ('순', 2), ('상승', 2), ('전환', 2), ('악', 2), ('화의', 2), ('굴레', 2), ('못', 2), ('계속', 2), ('우려', 2), ('임차', 2), ('은', 2), ('자극', 2), ('때문', 2), ('와중', 2), ('매도', 2), ('물량', 2), ('크게', 2)]
      word  count
    0   하락     20
    1    주     13
    2  아파트     12
    3   매수     11
    4   지수      9
    ************************************************************
    ['사람 어디 없다 전국 아파트 매수 심리 역대 최저 경신', '', '서울 경제', '전국 아파트 매수 지수 다시 역대 최저 치르다 경신 하다 기준금리 인상 아직도 끝나다 않다 가운데 부동산 가격 하락 세도 가다 라지 면서 매수 심리 강하다 얼어붙다 있다', '', '한국 부동산 따르다 첫째 기준 전국 아파트 매수 지수 전주 보다 하락 기록 하다 이로써 전국 아파트 매수 지수 지난주 이다 다시 역대 최저 치르다 경신 하다 지수 기준 보다 낮다 사려 사람 팔다 사람 많다 보다 높다 반대 나타내다', '', '광고 주택 시공사 캠페인 이다', '사전예약 청약 하다 고덕 강일 단지', '주택 시공사', '', '광고 정보', '서울 매수 지수 전주 보다 하락 하다 전주 마찬가지 통계 집계 주인 첫째 이후 가장 낮다 수준 보이다 경기 매수 지수 이다 처음 기록 하다 인천 전주 보다 낮다 기록 하다 이후 가장 낮다 이로써 수도권 매수 지수 전주 보다 낮다 통계 집계 이다 가장 낮다 지방 매수 지수 이후 가장 낮다', '', '매수 심리 얼어붙다 매가 연일 최대 하락 경신 있다 이번 전국 아파트 매가 하락 하다 오다 연속 하락 하다 주간 하락 폭도 전주 이다 다시 통계 작성 이렇다 역대 최대 기록 하다 아파트 매매 하락 수도권 지방 모두 확대 돼다 시도 별로 세종 하락 가장 크다 인천 경기 대구 대전 서울 울산 부산 경남 이다 서울 아파트 매가 연속 하락 하다 전주 이다 역대 최대 하락 폭도 경신 하다', '', '아파트 가격 하락 세도 더욱 가다 지다 이번 전국 아파트 전세 가다 하락 하다 주주 대비 하락 키우다 전세 하락 수도권 지방 모두 확대 돼다 시도 별로 인천 경기 서울 대구 세종 울산 대전 부산 광주 보이다 이로써 전국 아파트 전세 가다 연속 서울 아파트 전세 가다 연속 하락 하다', '', '매가 전세 가가 상승 전환 연일 하락 키우다 부동산 시장 화의 굴레 벗어나다 있다 매매 가가 계속 하다 하락 하다 역다 우려 하다 임차 저렴하다 매물 찾다 이다 다시 매매 시장 자극 하다 매가 더욱 끌어내리다 때문 와중 매도 실패하다 물량 시장 넘어오다 매물 늘어나다 전세 가다 물론 매가 더욱 크게 하락 하다 되다']
    성공
    
    밀집벡터 생성 방법 중 word2vec 사용 ---  단어 간 유사도를 확인
    <gensim.models.word2vec.LineSentence object at 0x000001714F6AA340>
    Word2Vec(vocab=128, vector_size=100, alpha=0.025)
    [('강하다', 0.4281919598579407), ('전주', 0.3313598334789276), ('이다', 0.3252588212490082), ('기록', 0.31482964754104614), ('서울', 0.2869948744773865), ('치르다', 0.2837637960910797), ('경기', 0.27053067088127136), ('물론', 0.2665315270423889), ('매물', 0.2657448947429657), ('첫째', 0.26378658413887024)]
    [('하다', 0.6040388345718384), ('기록', 0.5566278696060181), ('수도권', 0.528916597366333)]
    [('전주', 0.4040432870388031), ('지수', 0.3857809603214264), ('강하다', 0.371420681476593)]
    [('캠페인', 0.22245515882968903), ('팔다', 0.15306268632411957), ('시공사', 0.1444135159254074), ('경제', 0.04697326570749283), ('정보', 0.026743752881884575), ('강일', -0.0014347853139042854), ('주택', -0.00337068154476583), ('경남', -0.003452986478805542), ('지방', -0.009114844724535942), ('없다', -0.017012573778629303)]

     

     

     

    댓글

Designed by Tistory.