LiveJournal рд▓реЗрдЦ + рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ LDA

рдПрдХ рдмрд╛рд░ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдПрд▓рдбреАрдП "рдбреНрдпреВрд░рд┐рдЪрд▓реЗрдЯ рдХреЗ рдЕрд╡реНрдпрдХреНрдд рдкреНрд▓реЗрд╕рдореЗрдВрдЯ" рдХреЗ рдХреМрди рд╕реЗ рд╡рд┐рд╖рдп "рд▓рд╛рдЗрд╡ рдЬрд░реНрдирд▓" рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓реЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдмреНрдпрд╛рдЬ рд╣реИ - рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВред

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдПрд▓рдбреАрдП рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛, рд╣рдо рдЧрдгрд┐рддреАрдп рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ (рдХреЛрдИ рднреА рд░реБрдЪрд┐ - рдкрдврд╝рддрд╛ рд╣реИ)ред рддреЛ, рдПрд▓рдбреАрдП - рдореЙрдбрд▓рд┐рдВрдЧ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (рдпрд╣ рдПрдХ рд▓реЗрдЦ, рдПрдХ рдкреБрд╕реНрддрдХ, рдпрд╛ рдкрд╛рда рдбреЗрдЯрд╛ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕реНрд░реЛрдд рд╣реЛ) рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдПрдХ рдорд┐рд╢реНрд░рдг рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╖рдп рд╢рдмреНрджреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИред


рдЪрд┐рддреНрд░ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрд▓рдбреАрдП рдХрд╛ рдХрд╛рд░реНрдп рдЙрди рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╡рд┐рд╖рдп рдмрдирд╛рддреЗ рд╣реИрдВред рдлрд┐рд░, рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рдХреАрд╡рд░реНрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

LifeJournal рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд▓рдЧрднрдЧ 1800 рд▓реЗрдЦ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП, рдЙрди рд╕рднреА рдХреЛ jsonl рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛
ред рдореИрдВ рдпреИрдВрдбреЗрдХреНрд╕ рдбрд┐рд╕реНрдХ рдкрд░ рдЕрд╢реБрджреНрдз рд▓реЗрдЦ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ ред рд╣рдо рдбреЗрдЯрд╛ рдХреА рдХреБрдЫ рд╕рдлрд╛рдИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░реЗрдВрдЧреЗ: рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХреЗрдВ, рд╕реНрдЯреЙрдк рд╢рдмреНрдж рд╣рдЯрд╛рдПрдВ (рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдЧрд┐рддреБрдм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ), рд╣рдо рд╡рд░реНрддрдиреА рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╢рдмреНрдж рд▓рд╛рдПрдВрдЧреЗ, рд╣рдо 3 рдЕрдХреНрд╖рд░ рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо рд╡рд╛рд▓реЗ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдФрд░ рд╢рдмреНрдж рд╣рдЯрд╛ рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдкреВрд░реНрд╡-рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ: рдЕрдХреНрд╕рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЗрд╡рд▓ рд╕реНрдЯреЙрдк рд╢рдмреНрджреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рддрдХ рд╕реАрдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рд▓рдЧрднрдЧ рд╕рднреА рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЪреБрдирдирд╛ рдЖрдкрдХреЛ рд╣реИред

stop=open('stop.txt')
stop_words=[]
for line in stop:
    stop_words.append(line)
for i in range(0,len(stop_words)):
    stop_words[i]=stop_words[i][:-1]
# specific regular expresion for this texts 
texts=[re.split( r' [\w\.\&\?!,_\-#)(:;*%$тДЦ"\@]* ' ,texts[i])[0].replace("\n","") for i in range(0,len(texts))]   
    # remove punctuation
texts=[test_re(line) for line in texts]
texts=[t.lower() for t in texts]
# remove stop words
texts = [[word for word in document.split() if word not in stop_words] for document in texts]
texts=[[word for word in document if len(word)>=3]for document in texts]

рдЕрдЧрд▓рд╛, рд╣рдо рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ: рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо pymorphy2 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

morph = pymorphy2.MorphAnalyzer()
for i in range(0,len(texts)):
    for j in range(0,len(texts[i])):
        texts[i][j] =  morph.parse(texts[i][j])[0].normal_form

рд╣рд╛рдВ, рд╣рдо рд╢рдмреНрджреЛрдВ рдХреЗ рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЧрддрддрд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдПрд▓рдбреАрдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдЙрдкрд░реНрдпреБрдХреНрдд рдмрд┐рдВрджреБ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдЕрдзрд┐рдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рдлрд┐рд░ рд╕реЗ, рдХреНрдпрд╛ рд╕реАрдорд╛ рд╣реЛрдЧреА, рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдФрд╕рдд рд▓рдВрдмрд╛рдИ рдФрд░ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ :

counter = collections.Counter()
for t in texts:
    for r in t:
        counter[r]+=1
limit = len(texts)/5
too_common = [w for w in counter if counter[w] > limit]
too_common=set(too_common)
texts = [[word for word in document if word not in too_common] for document in texts]

рдЖрдЗрдП рд╕реАрдзреЗ рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ gensim рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдВрдд рдмрдиреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╢рдмреНрджрдХреЛрд╢ рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд░реЗрдЧрд╛, рдлрд┐рд░ рд╣рдо рд╢рдмреНрджреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдВрдЧреЗред рдПрд▓рдбреАрдП рдХреЙрд▓ рдХрд╛ рдЯрд┐рдкреНрдкрдгреА-рдЖрдЙрдЯ рд╕рдВрд╕реНрдХрд░рдг рд▓рдВрдмрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

texts=preposition_text_for_lda(my_r)
dictionary = gensim.corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
#lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=10, update_every=1, chunksize=1, passes=1)
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=10)

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рдж, рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

lda.show_topic(i,topn=30)

, рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд┐рд╖рдп рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ рдЯреЙрдкрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╖рдп рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред
рдЕрдм рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд┐рдВрдЧ рдереАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдмреЛрдирд╕, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд░реНрдбрдХреНрд▓рд╛рдЙрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ, рд╕рдорд╛рди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рднреА matplotlib рдореЗрдВ)ред рдпрд╣ рдХреЛрдб рдереАрдо рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдЪрд╛рддрд╛ рд╣реИред

from wordcloud import WordCloud, STOPWORDS
for i in range(0,10):
    a=lda.show_topic(i,topn=30)
    wordcloud = WordCloud(
                          relative_scaling = 1.0,
                          stopwords = too_common # set or space-separated string
                          ).generate_from_frequencies(dict(a))
    wordcloud.to_file('society'+str(i)+'.png') 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:





рдкреНрд░рдпреЛрдЧ рдФрд░ рдЖрдк рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

All Articles