前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于python的旅游城市关键词分析系统
设计思路
一、课题背景与意义
随着旅游业的迅速发展,了解和分析旅游城市的关键词变得越来越重要。在互联网时代,人们通过搜索引擎和社交媒体平台获取旅游信息,关键词的选择和使用对于旅游城市的宣传和推广具有重要影响。可以帮助旅游从业者和决策者了解旅游城市受欢迎的关键词,分析用户需求和偏好,优化旅游城市的推广策略,提升旅游业的竞争力。
二、算法理论原理
2.1 情感分析
SO-PMI算法是一种基于共现关系和语义倾向性的方法,用于计算词语情感极性得分。通过比较词语在正面和负面文本中的PMI值差异,SO-PMI可以衡量词语的情感倾向。较高的SO-PMI值表示正面情感倾向,较低的值表示负面情感倾向,接近于0的值表示情感中性或不确定。SO-PMI算法的应用可以提供词语的情感极性评估,对情感分析和情感词典构建具有重要意义。
通过使用SO-PMI算法和分析贵州旅游景点评论中的词语共现情况,我们可以完成词典的扩充和构建工作。SO-PMI算法利用词语在语料库中的共现关系和语义倾向性,计算词语的情感极性得分,并将其添加到词典中,以丰富情感分析的词汇库。
# 计算词语的PMI值
def calculate_pmi(word, word_frequency, corpus):
word_count = word_frequency[word]
total_count = sum(word_frequency.values())
p_word = word_count / total_count
bigram_measures = BigramAssocMeasures()
finder = BigramCollocationFinder.from_words(corpus.words())
pmi = []
for bigram, freq in finder.ngram_fd.items():
if word in bigram:
p_bigram = freq / total_count
pmi_value = nltk.metrics.BigramAssocMeasures.pmi(p_word, p_bigram, freq, total_count)
pmi.append(pmi_value)
if pmi:
avg_pmi = sum(pmi) / len(pmi)
return avg_pmi
else:
return 0
最终,我们可以利用这个扩充的词典来计算用户对旅游景点的情感倾向。通过对评论中的词语进行情感计算,并综合考虑词语的权重和情感极性,可以得出用户对景点的整体情感评价。这些情感得分可以通过多维度的展示方式进行呈现,如词云、情感分布图或情感倾向的统计分析,为后续的满意度分析提供数据支持。
# 构建情感词典
def build_sentiment_dictionary(positive_corpus, negative_corpus, min_pmi_threshold):
positive_word_frequency = build_word_frequency(positive_corpus)
negative_word_frequency = build_word_frequency(negative_corpus)
sentiment_dictionary = {}
for word, freq in positive_word_frequency.items():
pmi_pos = calculate_pmi(word, positive_word_frequency, positive_corpus)
pmi_neg = calculate_pmi(word, negative_word_frequency, negative_corpus)
sentiment_score = pmi_pos - pmi_neg
if sentiment_score >= min_pmi_threshold:
sentiment_dictionary[word] = sentiment_score
for word, freq in negative_word_frequency.items():
pmi_pos = calculate_pmi(word, positive_word_frequency, positive_corpus)
pmi_neg = calculate_pmi(word, negative_word_frequency, negative_corpus)
sentiment_score = pmi_pos - pmi_neg
if sentiment_score <= -min_pmi_threshold:
sentiment_dictionary[word] = sentiment_score
return sentiment_dictionary
通过构建语法规则,我们可以对旅游景点评论进行情感得分的计算和基础词典的扩充。具体的计算步骤如下:
- 预处理和词性标注:对旅游景点评论进行分词,并进行词性标注。根据实际情况,剔除没有情感倾向的词语。
- 读取相关词典和表格:加载基础词典、否定词表、副词表以及相应的权重值。这些词典和表格将用于后续的情感计算。
- 匹配情感词语:将预处理后的分词结果与情感词典进行匹配,并标记匹配到的情感词的位置。
- 分析否定词和程度副词:确定标记的情感词之间的否定词和程度副词的数量、位置和权重。根据具体的词汇信息和权重计算方法,计算情感得分。如果没有否定词和程度副词,直接计算情感得分。
2.2 LDA模型
LDA模型是一种用于文本数据的主题挖掘方法,通过分析关键词频率和相关性来揭示隐藏主题。在旅游景点评论数据的分析中,我们采取了以下步骤:首先,使用Python读取了旅游景点评论数据并进行了中文分词处理。然后,利用TF-IDF函数计算了关键词的特征值,并设置了主题词数量和停用词等参数。接着,运用LDA模型进行了主题聚类分析,并通过调试主题数和阈值范围选择了最佳的主题数量。最后,利用pyLDAvis可视化工具展示了主题聚类结果,以便更好地理解和分析旅游服务的优劣势。通过这些步骤,我们能够深入挖掘评论数据中的主题信息,为进一步的旅游服务分析提供了有力支持。
基于LDA模型的主题挖掘在文本数据分析中具有以下优势特点:通过计算关键词的频率和相关性,LDA模型能够从大量文本数据中挖掘出隐藏的主题。它不仅能够自动识别主题,还能够对主题进行聚类和分析,帮助我们理解文本数据的内在结构和内容。此外,LDA模型的可解释性较强,其结果能够以可视化的方式呈现,使得用户能够直观地理解和解释主题聚类的结果。同时,LDA模型还可以应用于大规模文本数据,并具有较好的扩展性和灵活性。
# 中文分词处理
seg_comments = []
for comment in comments:
seg_comment = jieba.cut(comment) # 使用jieba分词库进行中文分词
seg_comments.append(" ".join(seg_comment)) # 将分词结果拼接为字符串
# TF-IDF计算关键词的特征值
tfidf_vectorizer = TfidfVectorizer(stop_words=["这个", "很", "不"]) # 设置停用词
tfidf_matrix = tfidf_vectorizer.fit_transform(seg_comments)
# 获取特征词列表
feature_names = tfidf_vectorizer.get_feature_names()
# 设置主题词数量
num_topics = 5
三、检测的实现
3.1 数据集
由于网络上没有现有的合适的数据集,我决定自己收集并制作一个全新的数据集。首先,我收集了多个旅游城市的相关文本数据,包括游记、评论、推荐和广告等。然后,我使用网络爬虫技术从旅游网站、社交媒体和搜索引擎中抓取了大量的文本数据。这些数据涵盖了不同旅游城市的各个方面,包括景点介绍、餐饮推荐、住宿体验等。接下来,我对这些数据进行了清洗、去重和预处理,以确保数据的质量和一致性。通过这些步骤,我得到了一个真实、多样化且适用于旅游城市关键词分析的数据集。
3.2 实验环境搭建
系统采用了Gephi和Python等软件和计算机语言技术,结合可视化技术,对旅游景点评论数据进行了分析和挖掘。首先,通过Python实现了数据的读取和预处理,包括中文分词处理和计算关键词的特征值。然后,利用Gephi等可视化工具,将分析结果以直观的图形方式展示出来,使用户能够更好地理解和解释主题聚类的结果。
3.3 实验及结果分析
满意度分析方法在保留传统满意度理论核心的基础上,加强了消费者反馈的影响程度,以游客的积极情感倾向占比作为衡量满意度的媒介。通过量化形式直观地反映游客对旅游体验的满意程度,方便各景区和地市州之间的比较分析。从消费者的角度来看,评论是表达交易感受并给出评分的方式,而积极、消极和中性感受的区分相对较难,但分值是具体的量化分析,能够直接反映产品的好坏,旅游评论也是如此。因此,本实验以游客需求为核心,通过计算积极情感得分占比来评估满意度水平,以反映各地市州之间的差距。这种方法使满意度分析更加客观、可量化,并提供了一个有效的比较标准。
相关代码示例:
# 定义积极、消极和中性情感词列表
positive_words = ["美", "优美", "值得"]
negative_words = ["差", "不推荐", "不便利", "难走"]
# 初始化积极和消极情感得分
positive_score = 0
negative_score = 0
# 遍历评论列表,计算积极和消极情感得分
for comment in comments:
for word in positive_words:
if word in comment:
positive_score += 1
break
for word in negative_words:
if word in comment:
negative_score += 1
break
# 计算积极情感得分占比
total_score = positive_score + negative_score
positive_ratio = positive_score / total_score * 100
# 输出积极情感得分占比
print("积极情感得分占比: %.2f%%" % positive_ratio)
实现效果图样例:
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!