项目分析:自然语言处理(语言情感分析)

在这个信息爆炸的时代,我们每天都在与海量的文本数据打交道。从社交媒体上的帖子、在线评论到新闻报道,文本信息无处不在。然而,这些文本不仅仅是文字的堆砌,它们背后蕴含着丰富的情感和观点。如何有效地理解和分析这些情感,成为了自然语言处理(NLP)领域中的一个重要课题——语言情感分析。本文将带你一窥语言情感分析的奥秘,探讨其原理、应用及未来发展趋势。

一、什么是语言情感分析?

语言情感分析,又称情感倾向性分析或情感挖掘,是指利用自然语言处理技术自动识别并提取文本中表达的情感倾向。这些情感可以是正面的(如“太棒了!”)、负面的(如“真失望!”)或是中性的。情感分析的核心在于理解文本背后的情感色彩,帮助机器像人一样“感知”情绪。

二、项目目标及处理方法:

1目标:

将评论内容转换为词向量。

2、每个词/字转换为词向量长度

        (维度)200

3、每一次传入的词/字的个数是否就是评论的长度?   

 应该是固定长度,每次传入数据与图像相似。     例如选择长度为32。则传入的数据为32*200

4、一条评论如果超过32个词/字怎么处理?   

 直接删除后面的内容

5、一条评论如果没有32个词/字怎么处理?   

 缺少的内容,统一使用一个数字(非词/字的数字)替代。

6、如果语料库中的词/字太多是否可以压缩?   

 可以,某些词/字出现的频率比较低,可能训练不出特征。因此可以选择频率比较高的词来训练。例如选择4760个。

7、被压缩的词/字如何处理?   

可以统一使用一个数字(非词/字的数字)替代。

三、项目步骤

1.构建词汇表(vocab),这个词汇表用于文本处理任务
# 导入tqdm库,用于显示循环的进度条  
from tqdm import tqdm  
# 导入pickle库,用于对象的序列化和反序列化  
import pickle as pkl  
  
# 定义常量,词表的最大长度限制  
MAX_VOC_SIZE = 4760  
# 定义常量,未知字和填充符号的标识  
UNK, PAD = '<UNK>', '<PAD>'  
  
def build_vocab(file_path, max_size, min_freq):  
    '''  
    功能: 基于文本内容建立词表vocab,vocab中包含语料库中的字  
    参数:  
        file_path: 需要读取的语料库的路径  
        max_size: 获取词频最高的前max_size个词  
        剔除字频低于min_freq个的词  
    '''  
    # 定义一个tokenizer函数,用于将文本分割成单个字符  
    tokenizer = lambda x: [y for y in x]  
    # 初始化一个空字典,用于保存词的统计信息  
    vocab_dic = {}  
    # 打开文件,准备读取内容  
    with open(file_path, 'r', encoding='UTF-8') as f:  
        i = 0  # 初始化行计数器  
        # 使用tqdm包装文件读取循环,以显示进度条  
        for line in tqdm(f):  
            # 如果是文件的第一行(通常是表头),则跳过  
            if i == 0:  
                i += 1  
                continue  
            # 去除每行开头的两个字符(可能是标签或分隔符),并去除首尾空白  
            lin = line[2:].strip()  
            # 如果处理后的行内容为空,则跳过  
            if not lin:  
                continue  
            # 遍历行内容中的每个字符,统计字符出现的次数  
            for word in tokenizer(lin):  
                vocab_dic[word] = vocab_dic.get(word, 0) + 1  
        # 过滤掉词频低于min_freq的字符,按词频降序排序,取前max_size个  
        vocab_list = sorted([_ for _ in vocab_dic.items() if _[1] > min_freq], key=lambda x: x[1], reverse=True)[:max_size]  
        # 为过滤后的字符分配索引,从0开始  
        vocab_dic = {word_count[0]: idx for idx, word_count in enumerate(vocab_list)}  
        # 更新词汇表字典,加入<UNK>和<PAD>及其对应的索引  
        vocab_dic.update({UNK: len(vocab_dic), PAD: len(vocab_dic) + 1})  
        # 打印词汇表字典  
        print(vocab_dic)  
        # 使用pickle将词汇表字典序列化并保存到文件中  
        pkl.dump(vocab_dic, open('simplifyweibo_4_moods.pkl', 'wb'))  
        # 打印词汇表的大小  
        print(f"Vocab size: {len(vocab_dic)}")  
    # 返回构建好的词汇表字典  
    return vocab_dic  
  
if __name__ == '__main__':  
    # 调用build_vocab函数,传入文件路径、词表最大长度和最小词频阈值  
    vocab = build_vocab('simplifyweibo_4_moods.csv', MAX_VOC_SIZE, 1)  
    # 注意:这里的print('vocab')只是打印了字符串'vocab',并没有打印变量vocab的内容  
    # 如果要打印变量vocab的内容,应该使用print(vocab)  
    print('vocab')

结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值