实战2 – 疫情背景下的周边游需求图谱分析(问题一)

来源于2022泰迪杯C题——疫情背景下的周边游需求图谱分析。

随着互联网和自媒体的繁荣,文本形式的在线旅游(Online Travel Agency,OTA)和游客的用户生成内容(User Generated Content,UGC)数据成为了解旅游市场现状的重要信息来源。OTA 和UGC 数据的内容较为分散和碎片化,要使用它们对某一特定旅游目的地进行研究时,迫切需要一种能够从文本中抽取相关的旅游要素,并挖掘要素之间的相关性和隐含的高层概念的可视化分析工具。

为此本赛题提出本地旅游图谱这一概念,它在通用知识图谱的基础上加入了更多针对 旅游行业的需求。本地旅游图谱采用图的形式直观全面地展示特定旅游目的地”吃住行娱 购游”等旅游要素,以及它们之间的关联。图 1 所示为我国西藏阿里地区的本地旅游图谱, 中心位置节点为旅游目的地”阿里”,它的下层要素包括该地区的重要景点如”冈仁波齐” 和”玛旁雍错”,以及”安全”、”住宿”等旅游要素。旅游要素分为多个等级,需要从 文本中挖掘出面对不同要素游客所关注的下一级要素。如阿里地区的”安全”要素下包括 “高反”、”天气”和”季节”等下一级要素,这个组合是西藏旅游所特有的。旅游要素 之间会存在关联关系,如”冈仁波齐”和”玛旁雍错”这两个景点通过”神山圣湖”这一 高层概念产生联系,在本地旅游图谱中使用连接两个节点的一条边来表示。

问题一:微信公众号文章分类

构建文本分类模型,对附件 1 提供的微信公众号的推送文章根据其内容与文旅的相关性分为” 相关” 和” 不相关” 两类, 并将分类结果以表 1 的形式保存为文件”result1.csv”。与文旅相关性较强的主题有旅游、活动、节庆、特产、交通、酒店、景 区、景点、文创、文化、乡村旅游、民宿、假日、假期、游客、采摘、赏花、春游、踏青、康养、公园、滨海游、度假、农家乐、剧本杀、旅行、徒步、工业旅游、线路、自驾游、 团队游、攻略、游记、包车、玻璃栈道、游艇、高尔夫、温泉等等。

经查阅matlab帮助文档,matlab自带的分词函数不支持中文(流汗),于是我只能用python编程,借助jieba分词,将文章分词后存入excel。
我是在jupyter notebook里实现的,首先导入需要的模块,

import jieba
import pandas as pd
import numpy as np
import xlsxwriter

将文件读取到内存中,

weixin_wz = pd.read_excel(r'微信文章.xlsx')

查看列名,

print(weixin_wz.columns)
Index(['文章ID', '公众号标题', '发布时间', '正文'], dtype='object')

将标题和正文合并成新的一列,

weixin_wz['公众号标题_正文'] = weixin_wz['公众号标题'] + '\n' + weixin_wz['正文']

将series转化为list,并进行jieba分词,

wenben=weixin_wz['公众号标题_正文']
fenci = []
list_wenben = [str(b) for b in wenben.to_list()]
for a in list_wenben:
    fenci.append(jieba.lcut(a))
fenci_array = np.array(fenci)

将结果存于’jieba分词.xlsx’中,

workbook = xlsxwriter.Workbook('jieba分词.xlsx')
worksheet = workbook.add_worksheet()
h=fenci_array.shape[0]
for i in range (h):
    row_data=fenci_array[i]
    l=(np.array(row_data)).shape[0]
    for j in range (l):
        worksheet.write(i,j,row_data[j])

workbook.close()

以下是使用matlab做的,因为excel中每一行的长短不一,所以使用的readcell函数读取 ‘jieba分词.xlsx’ ,但我发现该函数的读取速度很慢,读到内存里后,也特别占内存,

warning("off");
lujing='jieba分词.xlsx';
C = readcell(lujing);

matlab是使用函数tokenizedDocument对文档进行”标记化”,我的理解是可以对文档进行精细化分词,因为我已经提前使用python把词分好了,所以”TokenizeMethod”选的”none”。先对第一行进行试水操作,

CC=C(1,:);
CC_S=string(CC);
%去除各种标点符号
expression = '[(,)(!)(?)(。)(\n)(\r)(:)(、)(")(")(()())(【)(】)]';
replace = '';
newStr = regexprep(CC_S,expression,replace);
miss_in=ismissing(newStr);
newStr(miss_in)=[]; %去除缺失值
newStr(newStr=="")=[]; %去除空字符串
documents_out=tokenizedDocument(newStr,"TokenizeMethod","none");

然后对剩余其它行进行处理,

for i=2:size(C,1)
    CC=C(i,:);
    CC_S=string(CC);
    %去除各种标点符号
    expression = '[(,)(!)(?)(。)(\n)(\r)(:)(、)(")(")(()())(【)(】)]';
    replace = '';
    CC_S = regexprep(CC_S,expression,replace);
    miss_in=ismissing(CC_S);
    CC_S(miss_in)=[]; %去除缺失值
    CC_S(CC_S=="")=[]; %去除空字符串
    documents_out=[documents_out;tokenizedDocument(CC_S,"TokenizeMethod","none")];
end

将与文旅相关性较强的词存在wenlv_keywords中,然后求解documents_out的每一行与wenlv_keywords的余弦相似度,

queries = tokenizedDocument(wenlv_keywords,"TokenizeMethod","none");
similarities = cosineSimilarity(documents_out,queries);

计算相似度大于0的文章数量,

sum(similarities>0)

得出5665篇文章里共有3819篇文章与文旅相关,其余文章不相关。

Original: https://blog.csdn.net/qq_43301351/article/details/125154089
Author: 木星流火
Title: 实战2 – 疫情背景下的周边游需求图谱分析(问题一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/558441/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球