文中基于的论文:《卷烟在线评论的文本情感分析》
杨春晓,张鹤馨,黄家雯,万江平.卷烟在线评论的文本情感分析.中国烟草学报. http://kns.cnki.net/kcms/detail/11.2985.ts.20200121.1622.018.html
美赛过去之后,2020年的B题即用到了这个知识,当时没有深入学习,现在从头学习一下NLP文本情感分析。(完全小白)
论文中基于卷烟的文本评论提炼出有效的消费者体验信息,来供卷烟工商企业改进产品。
首先构建了适用于烟草领域的卷烟在线评论情感词典,并据此建立了卷烟评价文本情感分析模型。然后选取评论较多两款卷烟产品作为研究对象,通过 Python 通用网络爬虫采集了2008 年至 2018 年两个产品的在线评论(但美赛中一般会给数据,所以就不用自己爬虫),经数据清洗处理后,得到有效在线评论数据。将评论数据输入卷烟评价文本情感分析模型,按照产品、时间、地区等维度分别计算出情感指数。通过情感指数变化和比较,可以洞察卷烟在线评论中的情感表达,并给出了相应的对策与建议。
原始文本会包含一些无用或者错误信息,因此我们进行清洗。
英文文本需要的数据清洗内容:
引用:https://blog.csdn.net/spring_willow/article/details/80721491
def clean_text(text):
"""
Clean text
:param text: the string of text
:return: text string after cleaning
"""
# 更正缩写
text = re.sub(r"can\'t", "can not", text)
text = re.sub(r"cannot", "can not ", text)
text = re.sub(r"what\'s", "what is", text)
text = re.sub(r"What\'s", "what is", text)
text = re.sub(r"\'ve ", " have ", text)
text = re.sub(r"n\'t", " not ", text)
text = re.sub(r"i\'m", "i am ", text)
text = re.sub(r"I\'m", "i am ", text)
text = re.sub(r"\'re", " are ", text)
text = re.sub(r"\'d", " would ", text)
text = re.sub(r"\'ll", " will ", text)
text = re.sub(r" e mail ", " email ", text)
text = re.sub(r" e \- mail ", " email ", text)
text = re.sub(r" e\-mail ", " email ", text)
# 拼写矫正
text = re.sub(r"ph\.d", "phd", text)
text = re.sub(r"PhD", "phd", text)
text = re.sub(r" e g ", " eg ", text)
text = re.sub(r" fb ", " facebook ", text)
text = re.sub(r"facebooks", " facebook ", text)
text = re.sub(r"facebooking", " facebook ", text)
text = re.sub(r" usa ", " america ", text)
text = re.sub(r" us ", " america ", text)
text = re.sub(r" u s ", " america ", text)
text = re.sub(r" U\.S\. ", " america ", text)
text = re.sub(r" US ", " america ", text)
text = re.sub(r" American ", " america ", text)
text = re.sub(r" America ", " america ", text)
text = re.sub(r" mbp ", " macbook-pro ", text)
text = re.sub(r" mac ", " macbook ", text)
text = re.sub(r"macbook pro", "macbook-pro", text)
text = re.sub(r"macbook-pros", "macbook-pro", text)
text = re.sub(r" 1 ", " one ", text)
text = re.sub(r" 2 ", " two ", text)
text = re.sub(r" 3 ", " three ", text)
text = re.sub(r" 4 ", " four ", text)
text = re.sub(r" 5 ", " five ", text)
text = re.sub(r" 6 ", " six ", text)
text = re.sub(r" 7 ", " seven ", text)
text = re.sub(r" 8 ", " eight ", text)
text = re.sub(r" 9 ", " nine ", text)
text = re.sub(r"googling", " google ", text)
text = re.sub(r"googled", " google ", text)
text = re.sub(r"googleable", " google ", text)
text = re.sub(r"googles", " google ", text)
text = re.sub(r"dollars", " dollar ", text)
# 标点符号
text = re.sub(r"\+", " + ", text)
text = re.sub(r"'", " ", text)
text = re.sub(r"-", " - ", text)
text = re.sub(r"/", " / ", text)
text = re.sub(r"\\", " \ ", text)
text = re.sub(r"=", " = ", text)
text = re.sub(r"\^", " ^ ", text)
text = re.sub(r":", " : ", text)
text = re.sub(r"\.", " . ", text)
text = re.sub(r",", " , ", text)
text = re.sub(r"\?", " ? ", text)
text = re.sub(r"!", " ! ", text)
text = re.sub(r"\"", " \" ", text)
text = re.sub(r"&", " & ", text)
text = re.sub(r"\|", " | ", text)
text = re.sub(r";", " ; ", text)
text = re.sub(r"\(", " ( ", text)
text = re.sub(r"\)", " ( ", text)
# 规范化符号
text = re.sub(r"&", " and ", text)
text = re.sub(r"\|", " or ", text)
text = re.sub(r"=", " equal ", text)
text = re.sub(r"\+", " plus ", text)
text = re.sub(r"\$", " dollar ", text)
return text
词性还原(lemmatization):does,done,doing,did 需要通过词性还原恢复成 do。
词干提取(stemming):cities,children,teeth 这些词,需要转换为 city,child,tooth”这些基本形态
NLTK(python的一个库,用来自然语言处理),支持词性还原
构造在线评论字典:
然后使用上述分词后得到的结果,人工筛选出常用的情感词汇,建立不同维度的积极和消极情感的词典。
结合构造出的词典,统计产品的情感词词频,然后用Python生成词云。得到高频的前十位情感词,看分别属于哪种维度,则可以看出消费者对产品最关心的维度。
由于我的学习不够深入,因此我的数据结果有一定局限性:
由于是建模手,所以对NLTK的详细使用不是很了解TT,后续会继续进行学习,到时候再进行更新。