Topic Modeling - hier auch als “Themenanalyse” bezeichnet - beschreibt ein Verfahren des unüberwachten maschinellen Lernens, bei dem latente Themen auf Basis häufig gemeinsam auftretender Wörter explorativ identifiziert werden. Wir versuchen also durch das gemeinsame Auftreten von Wörtern auf latente Themen, die dieses Vorkommen erklären, zu schliessen.
Um Code in Jupyter Notebooks auszühren, müssen Sie auf Run klicken, das sich in der Menüleiste befindet. Klicken Sie dafür zunächst auf das Feld, das Sie ausführen möchten und anschließend auf Run. Sie können auch 'Shift' und 'Enter' verwenden. Wird das Feld gerade ausgeführt, erscheint links im Kästchen ein Sternchen. Dies bedeutet, dass das Programm gerade arbeitet. Wurde das Feld erfolgreich ausgeführt, erscheint eine Nummer im selben Kästchen. Gibt es einen Fehler, erscheint eine Fehlermeldung.
#languange processing imports
import gensim
from gensim.models import LdaModel
from gensim import models, corpora, similarities
import gensim, spacy, logging, warnings
import matplotlib.pyplot as plt
import nltk
from nltk.corpus import stopwords
import sys
import re, numpy as np, pandas as pd
from pprint import pprint
import spacy
from openpyxl import Workbook
#For the text overview
from nltk import FreqDist
#Word Cloud and Visualization
from wordcloud import WordCloud, STOPWORDS
from sklearn.feature_extraction.text import CountVectorizer
import matplotlib.ticker as mtick
import matplotlib.pyplot as plt
Hier sehen Sie die importierte Excel-Tabelle
df = pd.read_excel(('Data/spanische_grippe.xlsx'), engine='openpyxl',)
df.head()
Nun wird der Text gereinigt, das heißt, es werden Satzzeichen entfernt, alle Wörter werden einheitlich klein geschrieben und Stop-Wörter werden entfernt. Stop-Wörter sind Wörter, die häufig vorkommen und haben für gewöhnlich keine Relevanz für weitere Analysen. Hierzu gehören Wörter wie "und", "auf", "mit" usw.
#Functions to clean, tokenize, and stem the data
import nltk
nltk.download('stopwords')
nltk.download('punkt')
def initial_clean(text):
text = re.sub(r'[^\w\s]','',text)
text = text.lower()
text = nltk.word_tokenize(text, language = 'german')
return text
stop_words = stopwords.words('german')#change the language here
stop_words.extend([]) #add additional words here
def remove_stop_words(text):
return [word for word in text if word not in stop_words]
def apply_all(text):
return remove_stop_words(initial_clean(text))
df['tokenized'] = df['Text'].apply(apply_all)
df.head()
def process_words(texts):
texts_out = []
nlp = spacy.load('de_core_news_sm') #disable functions here
for sent in texts:
doc = nlp(" ".join(sent))
texts_out.append([token.lemma_ for token in doc])
return texts_out
df['final'] = process_words(df['tokenized'])
Die Gensim Bibliothek stellt eine Reihe an Parameter zur Verfügung. Um z. B. das Modell zu speichern, kann diese Funktion verwendet werden "random_state = 1". Probieren Sie weitere Funktionen aus, wie "per_word_topics=True" oder "chunksize = 300".
def train_lda(data):
num_topics = 20
dictionary = corpora.Dictionary(data)
corpus = [dictionary.doc2bow(doc) for doc in data]
lda = LdaModel(corpus=corpus, num_topics=num_topics, id2word=dictionary,
minimum_probability=0.0, passes=20, iterations=200)
return dictionary,corpus,lda
dictionary,corpus,lda = train_lda(df['final'])
lda.show_topic(topicid=1, topn=20)
import pyLDAvis
import pyLDAvis.gensim
import matplotlib.pyplot as plt
%matplotlib inline
pyLDAvis.enable_notebook()
vis = pyLDAvis.gensim.prepare(lda, corpus, dictionary)
vis
pd.set_option('display.max_colwidth', -1)
df_text = df['Text']
lines_ = ['unit']
for line in df_text:
if 'krank' in line: #insert here the word you are looking for
lines_.append(line)
lines_ = pd.DataFrame(lines_, columns =['Text'])
df_select = pd.DataFrame(lines_['Text'])
df_select[0:10]