기사를 통한 감성분석 분류해보기.
2023. 8. 5. 19:46ㆍ프로젝트/주식분석_기사제목
반응형
여기 사이트에서 뉴스분석 엑셀 다운로드를 했다. 일단 테스트를 해봐야 해서, LG 화학을 검색해 가져왔다.
df = pd.read_excel('./LG화학.xlsx')
xlsx 파일이어서 이렇게 pd.read_excel로 가져왔다. 왜 여태 csv를 했지? csv만의 장점이 뭐지? 약간 무지성으로 따라한 느낌이다.
이런 식으로 데이터를 가져옴.
import re
def test_text_preprocessing(text, mecab):
stopwords = ['그리고', '그런데', '그러나', '그래서', '그러므로', '하지만', '아니라', '들', '때문에', '아직', '통해', '이런', '여러', '이미', '몇', '등등','은','과','한','게','에','의','는','위']
txt = re.sub('[^가-힣a-z]', ' ', text)
token = mecab.morphs(txt)
token = [t for t in token if t not in stopwords]
return token
ex_text = "단독입찰보다 복수입찰의 경우"
example_pre= test_text_preprocessing(ex_text, mecab)
print(example_pre)
그리고 이런 식으로 테스트를 진행했다. 이 stopword 나오는 양이... 형태소는 진짜 어마하다. 한글은 아직 100% 완벽하게 분류가 안되는 것 같다. 여러 블로그를 보니까 그래도 띄어쓰기로 하는 것보다 형태소 기준 분류가 더 정확도가 높다고 해서 일단 이렇게 하는 것이다.
positive_lexicon = ['러브', '콜', '만점', '만점', '상승', '회복', '적극', '정착', '세계최초','강세','보상','잘 만들다','정확하다','칭찬','응원','좋은','소중한','가능하다','강화하다','신뢰','민생안정','대응전략','극복방안','복원력','방도','안정화','규제','동참','안정','표심잡기','끝내기','MOU', '제휴', '주목', '호응', '돌파', '이목', '수상', '입점', '인기', '열풍', '진화', '대박', '순항', '유치', '1위', '출시', '선보여', '오픈', '팝업', '돌풍', '팝업스토어', '인싸', '줄서서', '인기', '대세', '트렌드', '불티', '진출', '부상', '체결', '증가', '봉사', '기부', '신메뉴', '신제품', '신상', '최고', '새로운', '편한', '미소', '맛집', '착한가게', '순항', '착한', '제작지원','성과' ,'키운다', '역발상', '기회', '잡']
negative_lexicon = ['쪼들리', '매각', '강등', '망신','괴담','노골적','가짜','날치기','터무니없다','실적악화','진퇴양난','경제침체','대재난','비상사태','내수시장','실직','황폐화','제살 깎아먹기','제식구 감싸기','말바꾸기','말맞추기','부풀리기','퍼나르기','버티기','수박겉핥기','겨자먹기','먼지털기','퍼주기','갑질', '논란', '폭리', '허위', '과징금', '눈물', '피해', '포화', '우롱', '위반', '리스크', '사퇴', '급락', '하락', '폐업', '불만', '산재', '닫아', '손배소', '구설수', '폐점', '적발', '침해', '빨간불', '취약', '불명예', '분신', '구형', '기소', '반토막', '호소', '불매', '냉담', '문제', '직격탄', '한숨', '불똥', '항의', '묵묵부담', '싸늘', '일탈', '파문', '게이트', '횡령', '사과문', '여파', '울상', '초토화', '급감', '우려', '중단', '퇴출', '해지', '일베', '이물질', '벌레', '엉망', '적발', '위생불량', '위생엉망', '소송', '하락', '매출하락', '반토막', '혐의', '불매', '부채', '적발', '폭리', '과징금', '오너리스크', '매각', '포기', '불만','깨졌' ,'손실' ,'부진']
def analyze_sentiment(morphemes, positive_lexicon, negative_lexicon):
positive_count = sum(word in positive_lexicon for word in morphemes)
negative_count = sum(word in negative_lexicon for word in morphemes)
if positive_count > negative_count:
return '1'
elif positive_count < negative_count:
return '0'
else:
return '-'
df['감성분류'] = [analyze_sentiment(test_text_preprocessing(title, mecab), positive_lexicon, negative_lexicon) for title in df['제목']]
df.head()
그다음은 긍정어와 부정어를 판별해서 긍정어면 1 부정어면 0 분류가 안되면 -로 분류하는 것을 만들어서 '감성분류' 라는 컬럼으로 분류했다.
하.... 이거 맞아..? 분류가 되지 않는게 무려 2200개... 더 공부좀 해야겠다.
728x90
'프로젝트 > 주식분석_기사제목' 카테고리의 다른 글
예측 등락률을 classifier로 바꿔봤다. (2) | 2023.08.14 |
---|---|
주식 머신러닝. 테마주는 투자 조졌다. sns.heatmap까지 했는데 결과가 너무 안좋았다. (0) | 2023.08.10 |
방법이 잘 안떠오른다. 투자를 하면서... 생각을 좀 해보자. 태풍 관련주, 하이브 투자. (0) | 2023.08.09 |
n-grams import 해서 활용하기. 슬슬 헷갈리는 부분. (1) | 2023.08.06 |
anaconda에 konlpy 설치하기. windows 기준. (0) | 2023.08.03 |