精华内容
参与话题
问答
  • NLP情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分) 输出结果 1、测试对象 data1= '今天上海的天气真好!我的心情非常高兴!如果去旅游的话我会非常兴奋!和你一起去旅游我会更加...

    NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)

     

     

     

     

    目录

    输出结果

    设计思路

    相关资料

    1、关于代码

    2、关于数据集

    关于留言

    1、留言内容的注意事项

    2、如何留言?

    2.1、第一种方法——在对应的博客下留言

    2.2、备用第二种方法——论坛发帖

    后续补充发放资料的说明

    主要部分代码实现


     

     

    输出结果

    1、测试对象
    data1= '今天上海的天气真好!我的心情非常高兴!如果去旅游的话我会非常兴奋!和你一起去旅游我会更加幸福!'
    data2= '今天上海天气真差,非常讨厌下雨,把我冻坏了,心情太不高兴了,不高兴,我真的很生气!'
    data3= '美国华裔科学家,祖籍江苏扬州市高邮县,生于上海,斯坦福大学物理系,电子工程系和应用物理系终身教授!'

    2、输出结果
    很明显,data1情感更加积极!data2情感消极!data3情感中等!

    [[240.0, 104.0, 8.3, 3.6, 8.0, 2.4]]
    [[0.0, 134.0, 0.0, 4.8, 0.0, 3.2]]
    [[2, 66, 0.1, 3.3, 0.4, 1.7]]
    [[2, 2, 0.1, 0.1, 0.4, 0.4]]

     

    设计思路

    后期更新……

     

     

    相关资料

    1、关于代码

    NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码
     

    2、关于数据集

    如需数据集,请留言向博主索取。
    :当前为学生身份的网友,可留言向博主索取。非学生身份的社会人士,请靠积分下载!

     

     

    关于留言

    1、留言内容的注意事项

    • 1、请新增评论,不要直接回复,折叠后,我容易看不到,会漏掉。
    • 2、请在前缀加一个索取资料的当天日期。
    • 3、切记要留下邮箱!!!

    比如留言:“20200307,早上10.11,你好,博主,我的邮箱是,我想索取……”

     


    2、如何留言?

    2.1、第一种方法——在对应的博客下留言

    即在本博客下直接留言即可!

     

    2.2、备用第二种方法——论坛发帖

    在我的论坛中发帖即可,我会及时回复。
    地址:https://bbs.csdn.net/topics/395531480

     

     

    后续补充发放资料的说明

    此类网友,太伤人心,这位网友,一定不是大学生,当代大学生的素质肯定比这位网友高的多。

     

    主要部分代码实现

    import jieba
    import numpy as np
    
    ……
    
    
    def sentiment_score_list(dataset):
        seg_sentence = dataset.split('。')
    
        count1 = []
        count2 = []
        for sen in seg_sentence: #循环遍历每一个评论
            segtmp = jieba.lcut(sen, cut_all=False)  #把句子进行分词,以列表的形式返回
            i = 0 #记录扫描到的词的位置
            a = 0 #记录情感词的位置
            poscount = 0 #积极词的第一次分值
            poscount2 = 0 #积极词反转后的分值
            poscount3 = 0 #积极词的最后分值(包括叹号的分值)
            negcount = 0
            negcount2 = 0
            negcount3 = 0
            for word in segtmp:
                if word in posdict:  # 判断词语是否是情感词
                    poscount += 1
                    c = 0
                    for w in segtmp[a:i]:  # 扫描情感词前的程度词
                        if w in mostdict:
                            poscount *= 4.0
                        elif w in verydict:
                            poscount *= 3.0
                        elif w in moredict:
                            poscount *= 2.0
                        elif w in ishdict:
                            poscount *= 0.5
                        elif w in deny_word:
                            c += 1
                    if judgeodd(c) == 'odd':  # 扫描情感词前的否定词数
                        poscount *= -1.0
                        poscount2 += poscount
                        poscount = 0
                        poscount3 = poscount + poscount2 + poscount3
                        poscount2 = 0
                    else:
                        poscount3 = poscount + poscount2 + poscount3
                        poscount = 0
                    a = i + 1  # 情感词的位置变化
    
                elif word in negdict:  # 消极情感的分析,与上面一致
                    negcount += 1
                    d = 0
                    for w in segtmp[a:i]:
                        if w in mostdict:
                            negcount *= 4.0
                        elif w in verydict:
                            negcount *= 3.0
                        elif w in moredict:
                            negcount *= 2.0
                        elif w in ishdict:
                            negcount *= 0.5
                        elif w in degree_word:
                            d += 1
                    if judgeodd(d) == 'odd':
                        negcount *= -1.0
                        negcount2 += negcount
                        negcount = 0
                        negcount3 = negcount + negcount2 + negcount3
                        negcount2 = 0
                    else:
                        negcount3 = negcount + negcount2 + negcount3
                        negcount = 0
                    a = i + 1
                elif word == '!' or word == '!':  ##判断句子是否有感叹号
                    for w2 in segtmp[::-1]:  # 扫描感叹号前的情感词,发现后权值+2,然后退出循环
                        if w2 in posdict or negdict:
                            poscount3 += 2
                            negcount3 += 2
                            break
                i += 1 # 扫描词位置前移
    
    
                # 以下是防止出现负数的情况
                pos_count = 0
                neg_count = 0
                if poscount3 < 0 and negcount3 > 0:
                    neg_count += negcount3 - poscount3
                    pos_count = 0
                elif negcount3 < 0 and poscount3 > 0:
                    pos_count = poscount3 - negcount3
                    neg_count = 0
                elif poscount3 < 0 and negcount3 < 0:
                    neg_count = -poscount3
                    pos_count = -negcount3
                else:
                    pos_count = poscount3
                    neg_count = negcount3
    
                count1.append([pos_count, neg_count])
            count2.append(count1)
            count1 = []
    
        return count2
    
    def sentiment_score(senti_score_list):
        score = []
        for review in senti_score_list:
            score_array = np.array(review)
            Pos = np.sum(score_array[:, 0])
            Neg = np.sum(score_array[:, 1])
            AvgPos = np.mean(score_array[:, 0])
            AvgPos = float('%.1f'%AvgPos)
            AvgNeg = np.mean(score_array[:, 1])
            AvgNeg = float('%.1f'%AvgNeg)
            StdPos = np.std(score_array[:, 0])
            StdPos = float('%.1f'%StdPos)
            StdNeg = np.std(score_array[:, 1])
            StdNeg = float('%.1f'%StdNeg)
            score.append([Pos, Neg, AvgPos, AvgNeg, StdPos, StdNeg])
        return score
    
    
    
    data1= '今天上海的天气真好!我的心情非常高兴!如果去旅游的话我会非常兴奋!和你一起去旅游我会更加幸福!'
    data2= '今天上海天气真差,非常讨厌下雨,把我冻坏了,心情太不高兴了,不高兴,我真的很生气!'
    data3= '美国华裔科学家,祖籍江苏扬州市高邮县,生于上海,斯坦福大学物理系,电子工程系和应用物理系终身教授!'
    print(sentiment_score(sentiment_score_list(data1)))
    print(sentiment_score(sentiment_score_list(data2)))
    print(sentiment_score(sentiment_score_list(data3)))

     

    展开全文
  • 情感倾向分析

    2011-12-27 11:52:58
    资源介绍了网络舆情监控中的情感倾向分析技术
  • 用户评论情感分析 nlp 自然语言处理 (Natural Language Processing) A few days ago, I published an article that uses this same machine learning module to perform a sentiment analysis on a dataset of ...

    用户评论情感分析 nlp

    自然语言处理 (Natural Language Processing)

    A few days ago, I published an article that uses this same machine learning module to perform a sentiment analysis on a dataset of tweets reaching 96% accuracy. It is now time to increase complexity and approach more complicated problems. One perfect dataset for this experiment is the movie review dataset that you can download on Kaggle (see the link above).

    几天前,我发表了一篇文章,该文章使用相同的机器学习模块对达到96%准确性的推文数据集执行情感分析 。 现在该增加复杂性并解决更复杂的问题了。 该实验的一个理想数据集是电影评论数据集,您可以在Kaggle上下载它(请参见上面的链接)。

    机器学习与深度学习 (Machine Learning vs. Deep Learning)

    Why am I not using deep learning for these tasks? If I had to use Tensorflow, I would use an Embedding neural network. Unfortunately, this dataset only contains 2000 reviews. Compared with the standard movie reviews in Keras, which contains 50,000 reviews, there might not be enough data for the neural net to perform at its top. Deep Learning only outperforms machine learning when there is a sufficient volume of data.

    为什么我不将深度学习用于这些任务? 如果必须使用Tensorflow,则可以使用嵌入神经网络。 不幸的是,该数据集仅包含2000条评论。 与Keras中包含50,000条评论的标准电影评论相比,可能没有足够的数据供神经网络在其顶部执行。 深度学习仅在有足够数据量时才胜过机器学习。

    nltk模块 (nltk module)

    I will be using a machine learning library specialized for NLP, called nltk. I prefer using scikit-learn for creating machine learning models, but it is a library specialized for tabular data, rather than natural language processing.

    我将使用专门用于NLP的机器学习库,称为nltk。 我更喜欢使用scikit-learn创建机器学习模型,但是它是专门用于表格数据而不是自然语言处理的库。

    脚步 (Steps)

    In this article, I will follow the following steps. Compared with the Twitter Sentiment analysis in the previous article, the preprocessing of data will be much more troubling.

    在本文中,我将遵循以下步骤。 与上一篇文章中的Twitter Sentiment分析相比,数据的预处理将更加麻烦。

    1. Importing Modules

      导入模块
    2. Looking at the data

      看数据
    3. Creating Features and Labels (encoding)

      创建特征和标签(编码)
    4. Creating train and test (splitting)

      创建训练和测试(拆分)
    5. Using the model: Naive Bayes Classifier

      使用模型:朴素贝叶斯分类器
    6. Performance Evaluation

      绩效评估

    I will be using a particular kind of encoding: instead of converting words to numbers, I will store them into a dictionary. I will then feed this dictionary to the model.

    我将使用一种特殊的编码方式:将单词存储为字典,而不是将单词转换为数字。 然后,我将此字典输入模型。

    1.导入模块 (1. Importing Modules)

    !pip install nltk
    import nltk
    #per risolvere un bug, altrimenti da errore
    nltk.download('punkt')

    In addition to the main module I will be using (not only for machine learning but also to set up the tokenizer), I will also have to create my tool for tokenization. This function will break every sentence of the reviews in individual strings and will put every word into a python dictionary.

    除了我将要使用的主要模块(不仅用于机器学习,还用于设置令牌生成器)之外,我还必须创建用于令牌化的工具。 此功能将每个评论的句子分解成单个字符串,并将每个单词放入python字典中。

    #tokenizer
    def format_sentence(sent):
    return({word: True for word in nltk.word_tokenize(sent)})#example
    format_sentence('how are you')
    {'are': True, 'how': True, 'you': True}

    2.查看数据 (2. Looking at the data)

    import pandas as pd
    total = pd.read_csv('/content/drive/My Drive/Colab Notebooks/Projects/20200602_Twitter_Sentiment_Analysis/movie_review.csv')
    total

    As we can immediately see after having imported our dataset, we have a big problem. The reviews have been stored by sentence, and many chunks of the same review are hosted in more than one row. I will need to group the reviews from the chunks of text, and then label them as positive or negative.

    正如我们在导入数据集后立即看到的那样,我们遇到了一个大问题。 评论已按句子存储,同一评论的许多块都托管在多个行中。 我将需要根据文本块对评论进行分组,然后将其标记为肯定或否定。

    ***This may not make much of a difference using Machine Learning tools, but if we ever decide to use Deep Learning, we might want to have all the reviews bundled together. In both ways, it is an instructive problem to solve.

    ***使用机器学习工具可能并没有太大的区别,但是如果我们决定使用深度学习,我们可能希望将所有评论捆绑在一起。 两种方式都需要解决。

    Image for post

    I will be using the pandas’ function groupby to aggregate the rows by html_id and then convert them into a list.

    我将使用pandas的function groupby通过html_id汇总行,然后将其转换为列表。

    #group by html_id
    total = total.groupby('html_id').agg(lambda x: x.tolist())
    total = total.reset_index()
    total
    Image for post

    All the reviews have been merged under the column text. I am now going to drop the extra columns.

    所有评论均已合并到该列文本下。 我现在将删除多余的列。

    #drop other columns: only conserve text
    total.columns
    total = total.drop(['html_id', 'fold_id', 'cv_tag', 'sent_id'], axis=1)
    total
    Image for post
    #the result is a separated chunks for every reviews: 
    #chunk1, chunk2, ..., sentiment
    total.values
    Image for post

    I will now recreate a dataset with complete reviews in one column, and ONE sentiment in another column, rather than a list of sentiments per row.

    现在,我将重新创建一个数据集,其中一列包含完整的评论,另一列中包含一个情感,而不是每行的情感列表。

    #we merge the chunks together and we obtain: 
    #review, sentiment
    total_text = list()
    for lists in total.values:
    combines_text = ''
    for _ in lists[0]:
    combines_text = combines_text + _
    total_text.append([combines_text, lists[1][0]])#total_text
    total_text = pd.DataFrame(total_text)
    total_text
    Image for post

    Here is the final list: a combination of all positive and negative reviews in a single dataset.

    这是最终列表:单个数据集中所有正面和负面评论的组合。

    隔离正面评论 (Isolating the positive reviews)

    total_positive = total_text.copy()
    total_positive.columns
    total_positive = total_positive.loc[total_positive[1] == 'pos']
    #total_positive = total_positive.pop('text')
    #total_positive = total_positive.drop(['fold_id', 'cv_tag', 'html_id', 'sent_id'], axis=1)
    total_positive
    Image for post

    隔离负面评论 (Isolating the negative reviews)

    total_negative = total_text.copy()
    total_negative.columns
    total_negative = total_negative.loc[total_negative[1] == 'neg']
    #total_negative = total_negative.pop('text')
    #total_negative = total_negative.drop(['fold_id', 'cv_tag', 'html_id', 'sent_id'], axis=1)
    total_negative
    Image for post

    3.创建特征和标签(编码) (3. Creating Features and Labels (encoding))

    To train a supervised learning AI, I will need to get my data ready for the Naive Bayes Classifier model.

    要训​​练有监督的学习型AI,我需要为Naive Bayes分类器模型准备好数据。

    #   tokenizer
    def create_dict(total_positive, total_negative):
    positive_reviews = list()
    #word tokenization
    for sentence in list(total_positive.values):
    positive_reviews.append([format_sentence(sentence[0]), 'pos'])
    #saves the sentence in format: [{tokenized sentence}, 'pos]
    negative_reviews = list()
    #word tokenization
    for sentence in list(total_negative.values):
    #print(sentence)
    negative_reviews.append([format_sentence(sentence[0]), 'neg'])
    #saves the sentence in format: [{tokenized sentence}, 'pos]
    return positive_reviews, negative_reviewsXy_pos, Xy_neg = create_dict(total_positive, total_negative)

    Let me have a look at the structure of the data. This is the first dictionary stored in the list of positive reviews.

    让我看看数据的结构。 这是肯定评论列表中存储的第一本词典。

    Xy_pos[0]
    [{'!': True,
    '&': True,
    "'d": True,
    "'s": True,
    "'ve": True,
    ...
    '.women': True,
    'with': True,
    'without': True,
    'women': True,
    'words': True,
    'would': True,
    'you': True,
    'yourself': True},
    'pos']

    I want to see the graph of the dataset to see the proportion of positive and negative reviews.

    我想查看数据集的图表,以查看正面和负面评论的比例。

    X = pd.concat([total_positive, total_negative], axis=0)
    X.columns = ['text', 'sentiment']import seaborn as sns
    sns.countplot(x='sentiment', data=X)y = pd.DataFrame(X.pop('sentiment'))
    Image for post
    1000 positive reviews, 1000 negative reviews
    1000条正面评论,1000条负面评论

    4.创建训练和测试(拆分) (4. Creating train and test (splitting))

    def split(pos, neg, ratio):
    train = pos[:int((1-ratio)*len(pos))] + neg[:int((1-ratio)*len(neg))]
    test = pos[int((ratio)*len(pos)):] + neg[int((ratio)*len(neg)):]
    return train, testXy_train, Xy_test = split(Xy_pos, Xy_neg, 0.1)

    I can now prepare the train and the test proportion of the dataset to train the NLP model.

    我现在可以准备训练和数据集的测试比例来训练NLP模型。

    5.使用模型:朴素贝叶斯分类器 (5. Using the model: Naive Bayes Classifier)

    Finally, I can create the Naive Bayes Classifier model. I will be using the Xy_train proportion of the dataset to feed the model.

    最后,我可以创建Naive Bayes分类器模型。 我将使用数据集的Xy_train比例填充模型。

    from nltk.classify import NaiveBayesClassifier#training the model
    classifier = NaiveBayesClassifier.train(Xy_train)
    classifier.show_most_informative_features()
    ost Informative Features insulting = True neg : pos = 17.7 : 1.0 ludicrous = True neg : pos = 13.4 : 1.0 avoids = True pos : neg = 12.3 : 1.0 outstanding = True pos : neg = 12.3 : 1.0 regard = True pos : neg = 11.7 : 1.0 animators = True pos : neg = 10.3 : 1.0 fascination = True pos : neg = 10.3 : 1.0 .yeah = True neg : pos = 10.3 : 1.0 3000 = True neg : pos = 10.3 : 1.0 sucks = True neg : pos = 9.8 : 1.0

    The model has associated one value to each word in the dataset. It will perform a calculation on all the words contained in every review it has to analyze, and then make an estimation: positive or negative.

    该模型为数据集中的每个单词关联了一个值。 它将对要分析的每个评论中包含的所有单词进行计算,然后做出估计:肯定或否定。

    6.绩效评估 (6. Performance Evaluation)

    from nltk.classify.util import accuracy
    print(accuracy(classifier, Xy_test))
    0.9477777777777778

    Our accuracy is 94.7%, we can approximate by excess to 95%. Astonishing result!

    我们的准确度是94.7%,大约可以达到95%。 惊人的结果!

    翻译自: https://medium.com/towards-artificial-intelligence/sentiment-analysis-on-movie-reviews-with-nlp-achieving-95-accuracy-91eef597e0f7

    用户评论情感分析 nlp

    展开全文
  •  

    前言

    • 对文本的情感分析采用了两种思路——文本分类文本聚类
    有监督的学习 无监督的学习
    训练集包括输入和由人工标注的输出(x,y) 其训练集没有人为标注的输出(x)
    分类(classify) 聚类(cluster)
    • 测试文本(语料)来自于nltk库的movie_reviews语料库,其根据其倾向(neg/posneg/pos)将txt分为了两个文件夹

    在这里插入图片描述

     

     

    正文

    《【文本分类】基于三种分类器实现影评的情感分析(朴素贝叶斯,最大熵,决策树)》

    《【文本分类】基于两种分类器实现影评的情感分析(SVM,KNN)》

    《【文本聚类】一片文章弄懂三种聚类算法(K-Means,Agglomerative,DBSCAN)》

    《【文本聚类】三种聚类算法实现影评的情感分析(K-Means,Agglomerative,DBSCAN)》

     

     

    后记

     

     

    展开全文
  • CSDN博文情感倾向分析

    2018-08-17 16:10:00
    使用Python开发的CSDN博文情感倾向分析程序,可以分析CSDN某个人的博文情感倾向。
  • 文档主要是中文句子情感倾向分析,是中文语言处理中很重要的一部分,介绍了情感分析方法
  • 情感倾向分析.zip

    2019-06-09 19:46:02
    c#语句智能批量分析系统,分析语句,支持一次性导入大量语句进行分析
  • 电影情感分析 NLP实战

    2020-07-17 16:17:07
    https://www.52nlp.cn/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%AE%9E%E8%B7%B5-%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%81%9A%E7%94%B5%E5%BD%B1%E8%AF%84%E8%AE%BA%E6%96%87%E6%9C%AC%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90
    展开全文
  • 搭建阈值确定的新框架,并利用义源信息量衍生义项的方法动态更新情感词库,一方面考虑到不同人群主观色彩对倾向分析产生的影响问题,另一方面针对某一事件或话题直接得出大众情感倾向。实验表明,相较传统的Hownet...
  • 文本情感倾向性分析是自然语言处理领域研究的热点,在商业产品用户反馈分析、政府舆情分析、垃圾邮件过滤、信息...情感倾向分析研究的涉及面很广,本文结合了实际的系统开发,着重对其中几项关键技术进行了深入的探讨。
  • 本文借助细粒度情感分类技术, 对从网络上抓取大量计算机专业本科教材的评价文本进行情感极性 分析, 从而辅助商家和出版社改进教材的质量、制定 合理的销售策略, 并为潜在消费者的购买决策 供参 考依据. 主要解决了...
  • LDA中topic个数的确定是一个困难的问题。当各个topic之间的相似度的最小的时候,就可以算是找到了合适的topic个数。
  • 基于情感词典的中文微博情感倾向分析研究_陈晓东——华中科技大学
  • 传统的机器学习方法主要是浅层的学习算法,并不能很好地抽取文本中高层情感信息。...在数据集上的实验结果表明,与标准的BLSTM模型和传统机器学习模型相比,该模型能够有效提升文本情感倾向分析的效果。
  • 包括知网情感词典,知网程度副词词典,哈工大情感词典,中科院情感词典,敏感词词典,反动词词典,色情词词典,大连理工情感词汇本体库,台湾大学NTUSD简体中文情感词典等
  • 情感倾向舆情分析

    2012-08-09 14:16:06
    情感倾向 新浪 微博 舆情分析 本体 情感倾向 新浪 微博 舆情分析 本体
  • 情感倾向分析接口(通用版):对只包含单一主体主观信息的文本,进行自动情感倾向性判断(积极、消极、中性),并给出相应的置信度。为口碑分析、话题监控、舆情分析等应用提供基础技术支持,同时支持用户自行定制...

空空如也

1 2 3 4 5 ... 20
收藏数 1,490
精华内容 596
关键字:

情感倾向分析