Цели | Примеры |
Понимание общественного мнения в отношении исследуемого вопроса | 1. Название: «Restoring reputation through digital diplomacy…» / «Восстановление репутации посредством цифровой дипломатии … Цель: выявить, какие нарративы появлялись в разные периоды кризиса Выборка: k=12 935 2. Название: «Would violent tactics cost a democratic movement its international support…» / «Могут ли насильственные тактики стоить демократическому движению его международной поддержки? …» Цель: выявить последствия насильственных тактик в поведении протестующих Выборка: k=9 659 770 |
Выявление преобладающих тем в обсуждениях исследуемого вопроса | 1. Название: «Analytical framework for evaluating digital diplomacy using network analysis and topic modeling: comparing South Korea and Japan» / «Аналитическая структура для оценки цифровой дипломатии с использованием сетевого анализа и тематического моделирования: сравнение Южной Кореи и Японии» Цель: выявить отношение фанатов/туристов к Корее и Выборка: публикации KOCIS (k=16 962) и JNTO (k=8 278) о выбранных странах |
dictionary.filter_extremes(no_below=5, no_above=0.5)
# Создание биграмм
bigram_model = Phrases(data['cleaned_abstract'], min_count=5, threshold=10)
data['bigrams'] = data['cleaned_abstract'].apply(lambda tokens: bigram_model[tokens])
# Создание словаря и корпуса
dictionary = corpora.Dictionary(data['bigrams'])
corpus = [dictionary.doc2bow(text) for text in data['bigrams']]
# Вычисление TF-IDF
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
limit=10, start=2, step=1
# Функция для вычисления когерентности perplexity и log_likelihood модели LDA
def compute_metrics(dictionary, corpus, texts, limit=10, start=2, step=1):
coherence_values = []
perplexity_values = []
log_likelihood_values = []
model_list = []
num_topics_range = []
for num_topics in range(start, limit, step):
model = models.LdaModel(corpus, num_topics=num_topics, id2word=dictionary, passes=150)
model_list.append(model)
coherencemodel = CoherenceModel(model=model, texts=texts, dictionary=dictionary, coherence='c_v')
coherence_values.append(coherencemodel.get_coherence())
perplexity_values.append(-model.log_perplexity(corpus))
log_likelihood_values.append(model.bound(corpus))
num_topics_range.append(num_topics)
return model_list, coherence_values, perplexity_values, log_likelihood_values, num_topics_range
# Параметры для подбора количества тем
start = 2
limit = 6 # максимальное количество тем, которое вы хотите проверить
step = 1
if limit < start:
print("Ошибка: limit должно быть больше или равно start")
exit()
if step <= 0:
print("Ошибка: step должно быть больше 0")
exit()
# Вычисление метрик для различных значений num_topics
model_list, coherence_values, perplexity_values, log_likelihood_values, num_topics_range = compute_metrics(dictionary, corpus_tfidf, data['bigrams'], limit, start, step)
# Создание таблицы с результатами
metrics_df = pd.DataFrame({
'Num Topics': num_topics_range,
'Coherence': coherence_values,
'Perplexity': perplexity_values,
'Log Likelihood': log_likelihood_values
})
print(metrics_df)
# Отображение результатов
plt.figure(figsize=(12, 6))
plt.subplot(1, 3, 1)
plt.plot(num_topics_range, coherence_values)
plt.xlabel("Количество тем")
plt.ylabel("Coherence")
plt.legend(("Coherence"), loc='best')
plt.subplot(1, 3, 2)
plt.plot(num_topics_range, perplexity_values)
plt.xlabel("Количество тем")
plt.ylabel("Perplexity")
plt.legend(("Perplexity"), loc='best')
plt.subplot(1, 3, 3)
plt.plot(num_topics_range, log_likelihood_values)
plt.xlabel("Количество тем")
plt.ylabel("Log Likelihood")
plt.legend(("Log Likelihood"), loc='best')
plt.tight_layout()
plt.show()
# Вывод оптимальных количеств тем по всем метрикам
optimal_num_topics_coherence = num_topics_range[coherence_values.index(max(coherence_values))]
optimal_num_topics_perplexity = num_topics_range[perplexity_values.index(max(perplexity_values))]
optimal_num_topics_log_likelihood = num_topics_range[log_likelihood_values.index(max(log_likelihood_values))]
print(f'Оптимальное количество тем по когерентности: {optimal_num_topics_coherence}')
print(f'Оптимальное количество тем по perplexity: {optimal_num_topics_perplexity}')
print(f'Оптимальное количество тем по log likelihood: {optimal_num_topics_log_likelihood}')
# Установим необходимые библиотеки import nltk fromnltk.tokenize importword_tokenize# Импортируем функцию для токенизации nltk.download('punkt_tab') # Загрузим данные для токенизации # Исходный текст – замените на свой raw = "Куда выйдешь, туда и попадешь" # Токенизация слов tokens = word_tokenize(raw, language='russian') # Указываем 'russian' для русского языка print("\nТокенизированные слова:") print(tokens) |
import string # Исходный текст text = "Куда выйдешь, туда и попадешь" # Удаление знаков препинания с помощью генератора cleaned_text = "".join(l for l in text if l not in string.punctuation) print(cleaned_text) # Удаление знаков препинания с помощью регулярных выражений import re cleaned_text_regex = re.sub("[^\w\s]", "", text) print(cleaned_text_regex) |
!pip install pymorphy2 from pymorphy2 import MorphAnalyzer !pip install pymystem3 from pymystem3 import Mystem # Пример токенов (замените на ваши токены) tokens = ["Куда", "выйдешь", "туда", "и", "попадешь"] # Создание экземпляра анализатора для pymorphy2 morph = MorphAnalyzer() # Приведение токенов к нормальной форме с помощью pymorphy2 lemmas_pymorphy = [morph.parse(token)[0].normal_form for token in tokens] print("Нормализованные формы (pymorphy2):", lemmas_pymorphy) # Создание экземпляра анализатора для Mystem mystem = Mystem() # Приведение токенов к нормальной форме с помощью Mystem lemmas_mystem = [mystem.lemmatize(token)[0] for token in tokens] print("Нормализованные формы (Mystem):", lemmas_mystem) |