위기 기간을 식별하기 위해 뉴스 스 니펫을 분석하려고합니다. 그렇게하기 위해, 나는 지난 7 년 동안 이미 뉴스 기사를 다운로드하여 제공했습니다. 이제이 데이터 세트에 LDA (Latent Dirichlet Allocation) 모델을 적용하여 경제 위기의 징후를 보이는 국가를 확인합니다. 나는 요르단 이발사에 의해 블로그 포스트 (https://rstudio-pubs-static.s3.amazonaws.com/79360_850b2a69980c4488b1db95987a24867a.html)에 내 코드를 기반으로 작성LDA 모델의 "Good /"Bad "사례 규정 (Python에서 gensim 사용)
- 여기에 지금까지 내 코드입니다 :
import os, csv
#create list with text blocks in rows, based on csv file
list=[]
with open('Testfile.csv', 'r') as csvfile:
emails = csv.reader(csvfile)
for row in emails:
list.append(row)
#create doc_set
doc_set=[]
for row in list:
doc_set.append(row[0])
#import plugins - need to install gensim and stop_words manually for fresh python install
from nltk.tokenize import RegexpTokenizer
from stop_words import get_stop_words
from nltk.stem.porter import PorterStemmer
from gensim import corpora, models
import gensim
tokenizer = RegexpTokenizer(r'\w+')
# create English stop words list
en_stop = get_stop_words('en')
# Create p_stemmer of class PorterStemmer
p_stemmer = PorterStemmer()
# list for tokenized documents in loop
texts = []
# loop through document list
for i in doc_set:
# clean and tokenize document string
raw = i.lower()
tokens = tokenizer.tokenize(raw)
# remove stop words from tokens
stopped_tokens = [i for i in tokens if not i in en_stop]
# stem tokens
stemmed_tokens = [p_stemmer.stem(i) for i in stopped_tokens]
# add tokens to list
texts.append(stemmed_tokens)
# turn our tokenized documents into a id <-> term dictionary
dictionary = corpora.Dictionary(texts)
# convert tokenized documents into a document-term matrix
corpus = [dictionary.doc2bow(text) for text in texts]
# generate LDA model
ldamodel = gensim.models.ldamodel.LdaModel(corpus, num_topics=5, id2word = dictionary, passes=10)
print(ldamodel.print_topics(num_topics=5, num_words=5))
# map topics to documents
doc_lda=ldamodel[corpus]
with open('doc_lda.csv', 'w') as outfile:
writer = csv.writer(outfile)
for row in doc_lda:
writer.writerow(row)
기본적으로, 나는 위의 코드에서 주제의 수 (5 식별 -에 확인), 마지막 줄을 사용하여 각 뉴스 기사에 이러한 주제 중 하나와 관련된 기사의 확률을 나타내는 점수를 지정합니다. 이제는 주어진 주제가 위기와 관련이 있는지 여부를 조금씩 수동으로 만 질의 할 수 있습니다. 이는 약간 불행한 일입니다. 내가하고 싶은 일은 위기 상황에서 기사가 게시되었는지 여부를 알고리즘에 알리고이 추가 정보를 사용하여 내 "위기 년"과 "비 위기 년"에 대한 두 가지 주제를 모두 식별하는 것입니다. . 내 데이터 세트를 단순히 분할하여 내 "나쁜"(즉, 위기 년만) 주제를 내 의견으로는 생각하지 않을 것입니다. 실제로 어떤 주제가 실제로 위기와 관련이 있으며 수동으로 어떤 주제가 표시 될지 선택해야합니다. 어쨌든 (스포츠 뉴스, ...).
따라서 "위기"대 "비 위기"정보를 통합하고 b) 최적의 주제/단어 수를 자동으로 선택하여 코드의 예측력을 최적화하는 코드가 있습니다. 모델?
미리 감사드립니다. 특정 질문에 대한 몇 가지 제안을 먼저
이 SO에 완전히 적합하지 않습니다 , 데이터 분석 질문과 같이 프로그래밍 문제가 아니기 때문에 어디에서 더 잘 맞는지는 잘 모르겠지만 ... – drevicko