python_NLP实战之情感分析

情感分析的基本方法有:词法分析,基于机器学习的分析,混合分析

词法分析运用了由预标记词汇组成的词典,使用词法分析器将输入文本转换为单词序列,将每个新的单词与字典中的词汇进行匹配。

机器学习方法的关键是合适特征的选择。通常有unigram,bigrams,trigrams选为特征向量

实战电影评论情感分析

分为5部分

1、训练或者载入一个词向量生成模型

2、创建一个用于训练集的ID矩阵

3、创建LSTM计算单元

4、训练

5、测试

step1: 载入并分析数据

# encoding:utf-8

import numpy as np

wordsList = np.load('wordsList.npy')
print('载入word列表')
wordsList = wordsList.tolist()
wordsList = [word.decode('UTF-8')
             for word in wordsList]
wordVectors = np.load('wordVectors.npy')
print('载入文本向量')

print(len(wordsList))
print(wordVectors.shape)

import os
from os.path import isfile, join

pos_files = ['pos/' + f for f in os.listdir(
    'pos/') if isfile(join('pos/', f))]
neg_files = ['neg/' + f for f in os.listdir(
    'neg/') if isfile(join('neg/', f))]
num_words = []
for pf in pos_files:
    with open(pf, "r", encoding='utf-8') as f:
        line = f.readline()
        counter = len(line.split())
        num_words.append(counter)
print('正面评价完结')

for nf in neg_files:
    with open(nf, "r", encoding='utf-8') as f:
        line = f.readline()
        counter = len(line.split())
        num_words.append(counter)
print('负面评价完结')

num_files = len(num_words)
print('文件总数', num_files)
print('所有的词的数量', sum(num_words))
print('平均文件词的长度', sum(num_words) / len(num_words))

step2:将文本生成一个索引矩阵

import re

strip_special_chars = re.compile("[^A-Za-z0-9 ]+")
num_dimensions = 300  # Dimensions for each word vector


def cleanSentences(string):
    string = string.lower().replace("<br />", " ")
    return re.sub(strip_special_chars, "", string.lower())


max_seq_num = 250
ids = np.zeros((num_files, max_seq_num), dtype='int32')
file_count = 0
for pf in pos_files:
  with open(pf, "r", encoding='utf-8') as f:
    indexCounter = 0
    line = f.readline()
    cleanedLine = cleanSentences(line)
    split = cleanedLine.split()
    for word in split:
      try:
        ids[file_count][indexCounter] = wordsList.index(word)
      except ValueError:
        ids[file_count][indexCounter] = 399999  # 未知的词
      indexCounter = indexCounter + 1
      if indexCounter >= max_seq_num:
        break
    file_count = file_count + 1

for nf in neg_files:
  with open(nf, "r",encoding='utf-8') as f:
    indexCounter = 0
    line = f.readline()
    cleanedLine = cleanSentences(line)
    split = cleanedLine.split()
    for word in split:
      try:
        ids[file_count][indexCounter] = wordsList.index(word)
      except ValueError:
        ids[file_count][indexCounter] = 399999  # 未知的词语
      indexCounter = indexCounter + 1
      if indexCounter >= max_seq_num:
        break
    file_count = file_count + 1

np.save('idsMatrix', ids)

step3: 辅助函数,用来生成一批训练数据集

def get_train_batch():
    labels = []
    arr = np.zeros([batch_size, max_seq_num])
    for i in range(batch_size):
        if (i % 2 == 0):
            num = randint(1, 11499)
            labels.append([1, 0])
        else:
            num = randint(13499, 24999)
            labels.append([0, 1])
        arr[i] = ids[num - 1:num]
    return arr, labels


def get_test_batch():
    labels = []
    arr = np.zeros([batch_size, max_seq_num])
    for i in range(batch_size):
        num = randint(11499, 13499)
        if (num <= 12499):
            labels.append([1, 0])
        else:
            labels.append([0, 1])
        arr[i] = ids[num - 1:num]
    return arr, labels

step4:模型设置

import tensorflow as tf

tf.reset_default_graph()

labels = tf.placeholder(tf.float32, [batch_size, num_labels])
input_data = tf.placeholder(tf.int32, [batch_size, max_seq_num])
data = tf.Variable(
    tf.zeros([batch_size, max_seq_num, num_dimensions]), dtype=tf.float32)
获得文本向量
data = tf.nn.embedding_lookup(wordVectors, input_data)

配置LSTM的数量
lstmCell = tf.contrib.rnn.BasicLSTMCell(lstm_units)
避免过拟合
lstmCell = tf.contrib.rnn.DropoutWrapper(cell=lstmCell, output_keep_prob=0.5)
输入模型中,用来展开整个网络
value, _ = tf.nn.dynamic_rnn(lstmCell, data, dtype=tf.float32)

weight = tf.Variable(tf.truncated_normal([lstm_units, num_labels]))
bias = tf.Variable(tf.constant(0.1, shape=[num_labels]))
value = tf.transpose(value, [1, 0, 2])
last = tf.gather(value, int(value.get_shape()[0]) - 1)
prediction = (tf.matmul(last, weight) + bias)

定义正确的评估函数以及正确率评估参数
correct_pred = tf.equal(tf.argmax(prediction, 1), tf.argmax(labels, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
    logits=prediction, labels=labels))
optimizer = tf.train.AdamOptimizer(lr).minimize(loss)

saver = tf.train.Saver()

with tf.Session() as sess:
    if os.path.exists("models") and os.path.exists("models/checkpoint"):
        saver.restore(sess, tf.train.latest_checkpoint('models'))
    else:
        if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:
            init = tf.initialize_all_variables()
        else:
            init = tf.global_variables_initializer()
        sess.run(init)

    iterations = 100
    for step in range(iterations):
        next_batch, next_batch_labels = get_test_batch()
        if step % 20 == 0:
            print("step:", step, " 正确率:", (sess.run(
                accuracy, {input_data: next_batch, labels: next_batch_labels})) * 100)

    if not os.path.exists("models"):
        os.mkdir("models")
    save_path = saver.save(sess, "models/model.ckpt")
    print("Model saved in path: %s" % save_path)

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python是一种流行的编程语言,它有很多强大的库和工具,支持各种领域的应用。其中,自然语言处理(Natural Language Processing, NLP)是Python中一个重要的应用领域,可以用于分析和处理文本数据。微博热搜是社交媒体中的一个热门话题,通常代表当下最火的新闻和事件。开展基于微博热搜的NLP情感分析需要先进行以下步骤: 1. 数据采集:使用Python工具提取微博热搜榜上的关键词及相关的文本数据。 2. 数据清洗:使用Python中的字符串处理功能,对数据进行去噪、去重、分词等处理,以便进行情感分析。 3. 情感分类:采用NLP技术,计算文本中的情感得分(例如,使用基于情感词典的算法),分别判定微博热搜中的每条文本属于正面、中性或负面情感。 4. 数据可视化:使用Python中的可视化工具,将情感分析的结果进行可视化展示,以便更直观地了解微博热搜中的情感趋势。 总的来说,Python工具可以方便地处理微博热搜的文本数据,进行情感分析,得出有意义的结果。同时,Python也可以通过机器学习等高级技术不断提高情感分析算法的精度和效率。 ### 回答2: Python是一种非常流行的高级编程语言,它被广泛应用于各种领域,其中之一就是自然语言处理(NLP)方面。微博热搜是社交媒体平台上非常重要的内容,通过对微博热搜进行情感分析,可以了解人们对某个事件或话题的态度和情感倾向。 Python基于微博热搜的NLP情感分析大致可以分为以下几个步骤: 第一步是数据获取。获取微博热搜相关的数据并对其进行爬虫抓取。可以使用Python的第三方库,如Beautiful Soup、Scrapy等,获取微博热搜的相关内容。 第二步是数据预处理。由于微博热搜的数据比较杂乱,包含了大量的无用信息,如广告、噪音等,因此需要对数据进行预处理。在这个步骤中可以使用PythonNLP库,如NLTK、spaCy或gensim,进行分词、词性标注、实体识别等操作,以提高后续情感分析的准确度。 第三步是情感分析。在这个步骤中,可以使用Python情感分析工具,如TextBlob、VADER等,来对微博热搜进行情感分析。这些工具能够在文本中识别情感、极性和情感程度,从而可以了解人们对某个话题的态度和情感倾向。 第四步是结果可视化。在这个步骤中,可以使用Python的可视化工具,如Matplotlib、Seaborn等,将情感分析结果可视化。通过数据可视化,在用户角度呈现分析结果,以便更好地了解微博热搜的情感分布和其对用户的影响。 总之,Python基于微博热搜的NLP情感分析是一项非常有意义的研究。它可以让我们更好地了解人们对事物的态度和情感倾向,有助于我们制定更好的决策和推广计划。同时,Python作为一种强大的编程语言,可以让我们更轻松地操作大量的文本数据,并快速准确地进行情感分析。 ### 回答3: python是一种高级编程语言,被广泛应用于数据分析、人工智能等领域,包括情感分析情感分析是一种文本分析技术,旨在识别和评估文本中传达的情感状态。在微博上,热门话题往往能够反映出公众的情感和态度,因此利用微博热搜数据进行nlp情感分析具有一定的实际意义。 Python可以结合多种开源的nlp工具来实现情感分析,例如NLTK、TextBlob等库。通过调用这些库,可以实现文本的预处理、分类、情感分析等功能。具体而言,进行情感分析需要经过以下步骤: 1. 提取微博数据:利用Python爬虫技术可以轻松获取微博热搜榜中的关键词和相关微博内容。 2. 数据清洗和预处理:将获取到的微博数据进行清洗,去除无用信息并提取关键词。然后对文本进行词性标注、分词等预处理操作。 3. 构建情感分类模型:通过学习和训练已有语料库,可以构建出一个情感分类模型。在该模型的支持下,可以通过输入待分析的文本,自动进行情感分类,得出文本中表达的情感类别。 4. 结果展示:将情感分析的结果可视化,通过图表等形式展示在前端页面上。 总的来说,利用Python进行微博情感分析,需要耗费一定的精力和时间来构建情感分类模型,但是实现之后就可以方便地对微博数据进行分析和预测,从而更好地了解公众的情感态度,对舆情进行有效管控。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值