2023. 8. 6. 01:38ㆍ프로젝트/주식분석_기사제목
지금 형태소 분류로 하고 있는데, 우리 팀 팀원분들도 언급했던 이 문제.
형태소로 분류하니까 한국어같은 경우는 굉장히 잘게 쪼개지거나 되도 않는 형태소가 나오는 경우가 많다.
예를 들면 '빨간불'이라고 가정해보자.
지금 나는 주식을 하고 있으니까.. 일반적으로 맥락상 회사에 빨간불 이라고 하면 안좋은 의미이다.
근데 이 빨갛다 라는 단어 자체는 모호하다. 종목이 상승할 때는 빨간색이잖아.. 그러면 오히려 좋은 의미이다.
지금 이 구분에서 비상이 걸렸다. 어떻게 하면 좋을까? 하며 도입을 한게 n-grams다.
예를들면 '빨간 불이 들어왔다.' 라는 문장이 있고 n-grams을 써서 문장 분류를 2로 한다면 '빨간 불' 과 '불 이', '이 들어왔' 이런 식으로 2개씩 나뉘어져서 들어오는 것.
#df에서 전체 카운트 확인
import re
from collections import Counter
from nltk.util import ngrams
mecab = Mecab()
def text_preprocessing(df, column, mecab):
stopwords = ['그리고', '그런데', '그러나', '그래서', '그러므로', '하지만', '아니라', '등', '들', '때문에', '아직', '통해', '이런', '여러', '이미', '몇', '등등','은','과','한','게','에','의','는','위','는다','까지','장','찾','배','었','을','되','뭐','도','조','로', '있', '주', '만', '년', '대', '제', '재', '서', '일','이','가','하','아','']
morpheme_counts = Counter()
for text in df[column]:
txt = re.sub('[^가-힣a-z↓]', ' ', text)
tokens = mecab.morphs(txt)
tokens = [t for t in tokens if t not in stopwords]
n_grams = ngrams(tokens, 2)
n_grams = [' '.join(grams) for grams in n_grams]
morpheme_counts.update(n_grams + tokens)
return morpheme_counts
from nltk.util import ngrams를 사용한다.
ngrams을 초기화할 때 몇 토큰씩 묶을지 정해야 한다. 나는 일단 2로 설정했다.
그리고 join을 이용해서 두개를 합쳐보자. 공백으로 구분한다. 그다음 적용해보면
이런 식으로 분류가 됨. 2개씩 2개씩 들어오는 것이다. 이것도 한계가 있긴 하겠지... 근데 뭐 이것 저것 써보는거지 어쩌겠어? 아무튼 이런 식으로 슬슬 분류를 하고 있다.
지금 좀 어려운 점이 있는데,
지금 사실 기사를 그대로 가져와서 정답이라는게 없다. 트레이닝을 할 때는 이미 정해진 target값에 test를 하고 정확성만 돌리면 됐는데,
이거는 기사가 중립일 수도 있고 내 생각엔 좋은 기사인 것 같은데 내용이 그리 좋지 않은 것일 수도 있고 해서 어렵다.
계속 고민해 봐야할 문제일 것 같다.
아무튼 이런 식으로 분류를 진행해서 긍정어 부정어 사전을 계속 분류 해나가야 한다.
'프로젝트 > 주식분석_기사제목' 카테고리의 다른 글
예측 등락률을 classifier로 바꿔봤다. (2) | 2023.08.14 |
---|---|
주식 머신러닝. 테마주는 투자 조졌다. sns.heatmap까지 했는데 결과가 너무 안좋았다. (0) | 2023.08.10 |
방법이 잘 안떠오른다. 투자를 하면서... 생각을 좀 해보자. 태풍 관련주, 하이브 투자. (0) | 2023.08.09 |
기사를 통한 감성분석 분류해보기. (1) | 2023.08.05 |
anaconda에 konlpy 설치하기. windows 기준. (0) | 2023.08.03 |