评论文本挖掘

评论文本挖掘(Review Text Mining)是一种自然语言处理(NLP)技术,用于从在线评论、社交媒体帖子和其他文本数据中提取有用信息。这种技术可以帮助企业和研究人员了解消费者对产品、服务和品牌的看法,从而为市场营销策略、产品开发和客户服务提供有价值的见解。

评论文本挖掘的主要步骤:

  • 数据收集:从各种在线平台(如亚马逊、Yelp、Twitter等)收集评论数据。这些数据可以是结构化的(如评分、标签等)或非结构化的(如文本评论)。

  • 数据预处理:对收集到的文本数据进行清洗和预处理,以消除噪声和不相关的信息。这可能包括去除停用词、标点符号、特殊字符等,以及将文本转换为小写形式。

  • 特征提取:从预处理后的文本中提取有意义的特征,如关键词、短语、情感等。这可以通过词频统计、TF-IDF算法、词嵌入等方法实现。

  • 情感分析:对评论进行情感分析,以确定评论者对产品或服务的正面或负面看法。这可以通过基于词典的方法、机器学习算法(如支持向量机、朴素贝叶斯等)或深度学习模型(如卷积神经网络、循环神经网络等)实现。

  • 主题建模:通过对评论文本进行聚类或分类,发现评论中的主要主题和观点。这可以通过潜在狄利克雷分配(LDA)算法、非负矩阵分解(NMF)等方法实现。

  • 可视化和报告:将挖掘结果以图表、报告等形式呈现,以便用户更容易地理解和分析数据。

评论文本挖掘在各种应用场景中具有重要价值 

  • 市场调查:了解消费者对产品或服务的需求和期望,以便进行针对性的改进。
  • 竞争对手分析:比较竞争对手的产品或服务,发现自身优势和劣势。
  • 客户满意度评估:衡量客户对产品或服务的满意程度,以提高客户忠诚度。 

如何用数值来表示文本

机器不懂人类的自然语言,我们要将自然语言转换为机器易于理解的“语言”,NLP(Natural language processing)

NLP 里面,最细粒度的是词语,词语组成句子,句子再组成段落、篇章、文档。所以处理 NLP 的问题,首先要处理词语 。

词语处理的最终目标是用向量来表示词语,通过词向量,可以计算不同词语之间的相似度,这对于词语层面的任务非常重要。利用词向量可以找到语义上相近的词语,这有助于改善信息检索和文本分析的效果。词向量可以作为搜索引擎和信息检索系统中的一个重要工具,帮助提高检索的准确性。

获取原始文本 : Yes, Everjoys ukulele is the right Soprano Ukulele I have been looking for. It arrived earlier and very well packed, just the way I expected.

分词:[‘Yes’,’,', 'Everjoys', 'ukulele', 'is', 'the', 'right', 'Soprano', 'Ukulele', 'I', 'have', 'been', 'looking', 'for.', 'It', 'arrived', 'earlier', 'and', 'very', 'well', 'packed,', 'just', 'the', 'way', 'I', 'expected.']  

向量化编码:[1,0,1,0,1,0,1,0……]  

  • 首先将一句话拆分成一个一个单词,英文分词很简单,直接通过空格就可以,中文分词可以借助jieba这样的三方库  

词干提取 – Stemming  

词干提取是自然语言处理中的一个步骤,主要是针对英文语料进行的处理。它的目的是通过去除单词的前后缀来得到词根,这有助于标准化词汇,便于后续的处理和分析。 

  1. Running -> Run
  2. Cats -> Cat
  3. Walked -> Walk
  4. Swimming -> Swim
  5. Cooking -> Cook
  6. Played -> Play
  7. Flying -> Fly
  8. Working -> Work
  9. Talking -> Talk
  10. Dancing -> Dance

这些例子展示了通过去除单词的后缀来得到它们的词干。词干提取的目标是将单词还原到它们的基本形式,以便进行进一步的文本处理和分析。 

词形还原 – Lemmatisation

将单词的各种形态转换回它们的基本形态或词典形式。与词干提取不同,词形还原考虑了单词的语法和语义信息,以确保还原后的单词在语境中是正确的。

  1. Running -> Run

    • "Running" 转换为 "Run",因为 "Run" 是这个动词的基本形式。
  2. Cats -> Cat

    • "Cats" 转换为 "Cat",因为 "Cat" 是这个名词的单数基本形式。
  3. Better -> Good

    • "Better" 转换为 "Good",因为 "Good" 是形容词 "better" 的基本形式。

 

nltk是一个用于自然语言处理的Python库,它提供了各种文本处理功能。在给定的代码中,from nltk.stem.wordnet import WordNetLemmatizer这行代码导入了WordNetLemmatizer类,该类是nltk库中的一个工具,用于进行词形还原(lemmatization)。

from nltk.stem.wordnet import WordNetLemmatizer

# 创建词形还原器对象
lemmatizer = WordNetLemmatizer()

# 要进行词形还原的单词列表
words = ['running', 'dogs', 'better']

# 对每个单词进行词形还原
lemmatized_words = [lemmatizer.lemmatize(word) for word in words]

# 打印词形还原后的结果
for word, lemma in zip(words, lemmatized_words):
    print(f"{word} -> {lemma}")

 running -> run

dogs -> dog

better -> good

EG 

import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('fivethirtyeight')
import warnings

warnings.filterwarnings('ignore')
%matplotlib inline

import pandas as pd
# nltk:文本处理的包
from nltk.stem.wordnet import WordNetLemmatizer 
from collections import Counter

import matplotlib.pyplot as plt
from nltk.corpus import wordnet as wn

import pyecharts.options as opts
from pyecharts.charts import WordCloud
def stars_cat(n):
    
    if n<=2:
        return '差评'  
    elif n ==3:
        return '中评' 
    else:
        return '好评'

# 获取评论中的日期信息,转换成日期时间格式
def get_date(x):
    
    x = x.split('on ')[1] # 把数据拆分成两部分 ['Reviewed in the United States on ','June 24, 2020']
    x = x.split(', ') 
    y= x[1]
    x = x[0].split(' ')
    m,d = x[0],x[1]
    if m=='January' or m=='Jan':
        on_date='01-'+d+'-'+y
    elif m=='February' or m=='Feb':
        on_date='02-'+d+'-'+y
    elif m=='March' or m=='Mar':
        on_date='03-'+d+'-'+y
    elif  m=='April' or m=='Apr':
        on_date='04-'+d+'-'+y
    elif  m=='May':
        on_date='05-'+d+'-'+y
    elif  m=='June' or m=='Jun':
        on_date='06-'+d+'-'+y
    elif  m=='July' or m=='Jul':
        on_date='07-'+d+'-'+y
    elif m=='August' or m=='Aug':
        on_date='08-'+d+'-'+y
    elif m=='September' or m=='Sep':
        on_date='09-'+d+'-'+y
    elif m=='October' or m=='Oct':
        on_date='10-'+d+'-'+y
    elif m=='November' or m=='Nov':
        on_date='11-'+d+'-'+y
    elif m=='December' or m=='Dec':
        on_date='12-'+d+'-'+y    
    on_date=datetime.datetime.strptime(on_date, '%m-%d-%Y').strftime('%Y-%m-%d')
    return on_date
def replace_abbreviations(text):
    new_text = text
    #则表达式过滤特殊符号用空格符占位,双引号、单引号、句点、逗号
    new_text = re.sub(r'[^a-zA-Z.,?! \']+',' ', text).strip().lower()
    # 还原常见缩写单词还原,i'm i'd he's
    new_text = re.sub(r"(it|he|she|that|this|there|here)(\'s)",r"\1 is", new_text,re.I)
    # (?<=pattern)xxx,就是捕获以pattern开头的内容xxx
    new_text = re.sub(r"(?<=[a-zA-Z])n\'t"," not", new_text) # not的缩写 aren't-- are not
    new_text = re.sub(r"(?<=[a-zA-Z])\'d"," would", new_text) # would的缩写i'd -->i would--> 'i' 'would'
    new_text = re.sub(r"(?<=[a-zA-Z])\'ll"," will", new_text) # will的缩写
    new_text = re.sub(r"(?<=[I|i])\'m"," am", new_text) # am的缩写
    new_text = re.sub(r"(?<=[a-zA-Z])\'re"," are", new_text) # are的缩写
    new_text = re.sub(r"(?<=[a-zA-Z])\'ve"," have", new_text) # have的缩写
    new_text = new_text.replace('\'', ' ').replace('.', '. ')
    return new_text
创建词云图
def get_words(clean_text):
    words_all = [] 
    for words in clean_text:
        for word in words:
            words_all.append(word) 
    total_words = list(set(words_all)) 
    all_words = Counter(words_all) 
    content_mean = len(words_all)/len(clean_text)  
    words_cap =  len(total_words)/len(words_all) 
    return all_words,content_mean,total_words,words_cap
    
(WordCloud()
    .add(series_name="好评词云",
         data_pair=positive_words_wordcloud,  #传入绘制词云图的数据
         word_size_range=[16, 80])  #word_size_range 字号大小取值范围
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="好评词云", 
            title_textstyle_opts=opts.TextStyleOpts(font_size=23) # 设置标题字号
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True),  # 设置为True 鼠标滑过文字会弹出提示框
    )
    .render_notebook()
)
  • render(path): 将词云图保存为图片文件。参数path是保存图片的路径和文件名。

  • render_embed(): 将词云图嵌入到HTML页面中。返回一个包含词云图的HTML代码字符串。

  • render_json(): 将词云图转换为JSON格式的数据。返回一个包含词云图数据的字典。

  • repr_html_(): 返回一个包含词云图的HTML代码字符串。这个方法主要用于Jupyter Notebook中的交互式显示。

  • to_image(): 将词云图转换为PIL.Image对象。可以使用此方法将词云图保存为其他格式的图片文件。 

相关推荐

  1. 评论文本挖掘

    2024-03-12 23:24:03       51 阅读
  2. 【期末复习向】文本理解与数据挖掘-名词解释

    2024-03-12 23:24:03       61 阅读
  3. 基于Python的商品评论文本情感分析

    2024-03-12 23:24:03       37 阅读
  4. 《管理评论文本分析技术最新进展总结盘点

    2024-03-12 23:24:03       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-12 23:24:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-12 23:24:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-12 23:24:03       87 阅读
  4. Python语言-面向对象

    2024-03-12 23:24:03       96 阅读

热门阅读

  1. MacOS终端命令行死循环

    2024-03-12 23:24:03       43 阅读
  2. 计算机网络概论01

    2024-03-12 23:24:03       47 阅读
  3. 单元测试框架unittest D15

    2024-03-12 23:24:03       40 阅读
  4. docker搭建odoo16开发环境

    2024-03-12 23:24:03       44 阅读
  5. Vue的table组件合并行方法

    2024-03-12 23:24:03       47 阅读
  6. mysql笔记:10. 日志

    2024-03-12 23:24:03       47 阅读
  7. 为什么要使用ElasticSearch?

    2024-03-12 23:24:03       46 阅读
  8. Ansible

    Ansible

    2024-03-12 23:24:03      35 阅读
  9. ZZU天梯选拔赛复盘

    2024-03-12 23:24:03       36 阅读
  10. 2015-2023_个人工作总结

    2024-03-12 23:24:03       40 阅读