IT Diary/# Dev Diary

[ Dev Dairy ] 005. krwordrank 사용해보기

셜록호움즈 2021. 7. 28. 00:32
728x90
반응형

 

원래는.. 리뷰들을 모아서 그 리뷰에 대한 긍정적인 부분/ 부정적인 부분을 추려서 프로젝트를 하려고 했다.

기존에 나와있는 긍/부정 감성분석은 리뷰의 평점에 따라 좋은평점에서 긍정적인 단어를 추리고

나쁜평점에서는 부정적인 단어를 추리는 방식이었는데 내가 하고있던거는 미리 긍/부정도 단어사전을 만들고

단어 사전을 통해 긍정/부정을 추출하는 방식이었다.

 

암튼, 그 긍/부정도에 대해서는 못하게되어 다른 아이디어를 찾고있던 중 ..

발견하게 된거는 krwordrank 이다. text에서 핵심 문장/단어를 추출하는 알고리즘이다.

WordRank 알고리즘은 구글의 PageRank 나 HITS 같은 Graph Ranking을 자연어처리에 적용한 알고리즘 이다.

이거를 한국어의 어절 개념을 적용한게 KR-WordRank 라고 보면된다. 

 

사용방법은 아주 간단하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from krwordrank.word import KRWordRank
from krwordrank.hangle import normalize
 
min_count = 5   # 단어의 최소 출현 빈도수 (그래프 생성 시)
max_length = 10 # 단어의 최대 길이
verbose =True
wordrank_extractor = KRWordRank(min_count, max_length , verbose)
 
beta = 0.85    # PageRank의 decaying factor beta
max_iter = 10
 
with open('test.txt''r'as f:
    texts = []
    for line in f:
        texts.append(line)
 
texts = [normalize(text,english=False , number=Truefor text in texts ]
keywords, rank, graph = wordrank_extractor.extract(texts, beta, max_iter)
 
for word, r in sorted(keywords.items(), key=lambda x:x[1], reverse=True)[:30]:
        print('%8s:\t%.4f' % (word, r))
 
from krwordrank.word import summarize_with_keywords
 
stopwords ={'제거','할','단어'}
keywords = summarize_with_keywords(texts, min_count=5, max_length=10,
    beta=0.85, max_iter=10, stopwords=stopwords, verbose=True)
keywords = summarize_with_keywords(texts) # with default arguments
print(keywords)
cs

 

일단 분석할 샘플이 필요하고

해당 부분에서 한줄씩 읽어서 

나는 texts 라는 list에 담아줬다.

 

그 이후에 summeraize_with_sentences 라는 핵심문장을 추출하는 기능을 가지고 있는 부분을 적용시켜주면

원하는 값을 얻을 수 있다.

추출 원리는 랭킹이 매겨진 단어들로 백터를 생성하고 코사인 유사도를 적용하여 입력된 문장의 백터가 키워드 백터와 유사한 것을

선택하는 원리이다. 

 

도중에 빼고싶은 단어가 있다면 stopwoards 에 넣어주면 된다. 

추출한 결과값은.. 생각보다 잘 나온거 같다.

 

이제 이걸통해서 어떤식으로 보여줘야할지가 관건인 것 같다.

728x90
반응형