在这个信息爆炸的时代,我们每天都在与海量的文本数据打交道。从社交媒体上的帖子、在线评论到新闻报道,文本信息无处不在。然而,这些文本不仅仅是文字的堆砌,它们背后蕴含着丰富的情感和观点。如何有效地理解和分析这些情感,成为了自然语言处理(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')
结果展示: