250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
Tags
- pytorch
- RESFUL
- Gmarket
- (깃)git bash
- lda
- db
- spring MVC(모델2)방식
- 지마켓
- 게시판 만들기
- 크롤링
- Python
- Topics
- 이력서
- 네이버뉴스
- 자바
- word2vec
- r
- 幼稚园杀手(유치원킬러)
- oracle
- 파이썬
- 토픽추출
- java
- mysql
- 방식으로 텍스트
- jsp 파일 설정
- Websocket
- 코사인 유사도
- 과학백과사전
- tomoto
- test
Archives
- Today
- Total
무회blog
python: 200607- python 토픽추출 , nltk, tomoto, test->for_topics-004 본문
for_topics-004
# %pip install tomotopy
# %pip install nltk
# nltk.download()
# %pip install --upgrade kiwipiepy # 한국어 전처리
# %pip install KoNLP
import tomotopy as tp
import nltk.stem, nltk.corpus, nltk.tokenize, re
from kiwipiepy import Kiwi
# model = tp.LDAModel(k=20)
model = tp.LDAModel(k=20, alpha=0.1, eta=0.01, min_cf=5) # k 토픽 개수
for i, line in enumerate(open('./corpos/newsSogBo_test003_001.txt')):# 파일 불러오기 , 한줄씩 읽어와서 모델에 추가
model.add_doc(line.strip().split()) # 공백 기준으로 단어를 나누어 model에 추가합니다.
if i % 10 == 0: print('Document #{} has been loaded'.format(i))
############################ # # 영어 전처리
# # model = tp.LDAModel(k=20, alpha=0.1, eta=0.01, min_cf=5)
# # for i, line in enumerate(open('./corpos/newsSogBo_test003_001.txt')):
# # model.add_doc(tokenize(line)) # tokenize함수를 이용해 전처리한 결과를 add_doc에 넣습니다.
# # if i % 10 == 0: print('Document #{} has been loaded'.format(i))
# # model.train(0)
# # print('Total docs:', len(model.docs))
# # print('Total words:', model.num_words)
# # print('Vocab size:', model.num_vocabs)
# # for i in range(200):
# # print('Iteration {}\tLL per word: {}'.format(i, model.ll_per_word))
# # model.train(1)
# # for i in range(model.k):
# # res = model.get_topic_words(i, top_n=10)
# # print('Topic #{}'.format(i), end='\t')
# # print(', '.join(w for w, p in res))
# # tokenize 처리
# model = tp.LDAModel(k=20, alpha=0.1, eta=0.01, min_cf=5)
# for i, line in enumerate(open('./corpos/newsSogBo_test003_001.txt')):
# model.add_doc(tokenize(line)) # tokenize함수를 이용해 전처리한 결과를 add_doc에 넣습니다.
# if i % 10 == 0: print('Document #{} has been loaded'.format(i))
# model.train(0)
# print('Total docs:', len(model.docs))
# print('Total words:', model.num_words)
# print('Vocab size:', model.num_vocabs)
######################## # # # 한국어 전처리
kiwi = Kiwi()
kiwi.prepare()
stemmer = nltk.stem.porter.PorterStemmer()
stopwords = set(nltk.corpus.stopwords.words('korean'))
# stopwords = set(["사람", "것"])
# (추가) 불용어를 지정하여 제거하고 싶은경우 아래와 같이 조건을 하나 더 추가할 수도 있겠습니다.
# tokenize 함수를 정의합니다. 한국어 문장을 입력하면 형태소 단위로 분리하고,
# 불용어 및 특수 문자 등을 제거한 뒤, list로 반환합니다.
def tokenize(sent):
res, score = kiwi.analyze(sent)[0] # 첫번째 결과를 사용
return [word + ('다' if tag.startswith('V') else '') # 동사에는 '다'를 붙여줌
for word, tag, _, _ in res
if not tag.startswith('E') and not tag.startswith('J') and not tag.startswith('S') and word not in stopwords] # 조사, 어미, 특수기호 및 stopwords에 포함된 단어는 제거
###########################
# 불용어 제거가 어려운 경우, 용어 가중치를 변경하자
# model = tp.LDAModel(k=20, alpha=0.2, eta=0.01, min_cf=5, tw=tp.TermWeight.IDF)
# tw에 tp.TermWeight의 항목 중 하나를 선택하여 입력할 수 있습니다.
# 기본값은 tp.TermWeight.ONE이며, 이는 모든 단어를 동등하게 보겠다는 것입니다.
# 다른 선택지로는 tp.TermWeight.IDF나 tp.TermWeight.PMI가 있습니다.
###########################
# tokenize 처리
# model = tp.LDAModel(k=20, alpha=0.1, eta=0.01, min_cf=5)
model = tp.LDAModel(k=10, alpha=0.1, eta=0.01, min_cf=5)
for i, line in enumerate(open('./corpos/newsSogBo_test003_001.txt')):
model.add_doc(tokenize(line)) # tokenize함수를 이용해 전처리한 결과를 add_doc에 넣습니다.
if i % 10 == 0: print('Document #{} has been loaded'.format(i))
# # 혹은 단순히 model.train(200)으로 200회 반복도 가능합니다.
# for i in range(200):
# print('Iteration {}\tLL per word: {}'.format(i, model.ll_per_word))
# model.train(1)
model.train(200)
for i in range(model.k):
res = model.get_topic_words(i, top_n=10)
print('Topic #{}'.format(i), end='\t')
print(', '.join(w for w, p in res))
'Python' 카테고리의 다른 글
python: 200608-python, LDA 토픽추출 테스트 001_success, tomoto (0) | 2020.06.08 |
---|---|
python: python_ jsonToExcel, json (0) | 2020.06.08 |
python: tomotopy API 문서, 토픽추출시 참고 (0) | 2020.06.06 |
200602-word2vec test001 (0) | 2020.06.02 |
200601-파이썬 LDAmodel 적용하기 ,토픽추출 (topik) 하기 (0) | 2020.06.01 |
Comments