text = "" # 전체 텍스트를 하나로 묶기
for t in array_text:
text += " " + t
keyword_cv2 = keyword_one(text2, top_n=20, use_mmr=True, diversity=0.3)
# 상위 20개의 키워드 출력
print(keyword_cv2.groupby('keyword').agg('sum').sort_values('weight', ascending='False').head(20))
분명 2개 단어로 지정했는데.. 문장이 나왔다.
BERT embedding 과정에서 띄어쓰기 구분 없이 구문 통째로 임베딩 되는게 맞는 것 같다.
형태소 분석 후 명사형만 보내보자.
3-3. 형태소 분석 후 하나로 묶어서 분석
from kiwipiepy import Kiwi
def noun_extractor(text):
results = [[] for _ in range(len(text))]
kiwi = Kiwi()
# 문장 별로 형태소 분석 후, 명사만 하나의 텍스트로 만들기
for i, t in enumerate(text):
result = kiwi.analyze(t)
for token, pos, _, _ in list(result)[0][0][0]:
# 명사형만 남기기
if len(token) != 1 and pos.startswith('N') or pos.startswith('SL'):
results[i].append(token)
noun_results = ""
for t in results:
noun_results += " " + " ".join(t)
return noun_results
text = noun_extractor(array_text) # 형태소 분석하기
keyword_cv3 = keyword_one(text, top_n=20, use_mmr=True, diversity=0.2)
# 상위 20개의 키워드 출력
print(keyword_cv3.groupby('keyword').agg('sum').sort_values('weight', ascending='False').head(20))
kiwi 형태소 분석기를 사용해서 진행했는데, 훨씬 결과가 좋다.
현재는 단순히 명사형만 남긴 거라 Stemming 까지 한 뒤에 다시 실험해보자.
3-4. Stemming 후 하나로 묶어서 분석
from khaiii import KhaiiiApi
def stemming(sentence):
morphtags = morphs = [(morph.lex, morph.tag) for word in KhaiiiApi().analyze(sentence) for morph in word.morphs]
words = []
for lex, tag in morphtags :
if tag in ('NNP', 'NNG', 'SL') :
words.append(lex)
elif tag=='VA' or tag == 'VV':
words.append(lex+'다')
return words
array_text_new_5 = []
for text in array_text_new_4:
array_text_new_5.append( stemming(text) )
text_6 = ""
for t in array_text_new_6:
text += " " + " ".join(t)
keyword_cv5 = keyword_one(text_6)
print(keyword_cv5.groupby('keyword').agg('sum').sort_values('weight', ascending='False').head(20))