Python实体抽取+情感分析

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/Yellow_python/article/details/85264825

1、概述

文本挖掘流程
在这里插入图片描述
任务
1、识别文中的专有名称和短语
2、对实体进行归类和情感分析
示例
发货慢,包装也不严实,不过宝贝质量不错
    ↓↓↓【分词】
[‘发货’, ‘慢’, ‘,’, ‘包装’, ‘也’, ‘不’, ‘严实’, ‘,’, ‘不过’, ‘宝贝’, ‘质量’, ‘不错’]
    ↓↓↓【词性标注】
[‘n’, ‘a’, ‘x’, ‘v’, ‘d’, ‘d’, ‘ad’, ‘x’, ‘c’, ‘nr’, ‘n’, ‘a’]
    ↓↓↓【句法分析】
[ 发货 慢 ] [ 包装 不 严实 ] [ 宝贝 质量 不错 ]
    ↓↓↓【计分】
-1分、-1分、1分
观点 得分 实体抽取 实体分类1 实体分类2
发货慢 -1 发货 物流 物流速度
包装不严实 -1 包装 物流 物流包装
质量不错 1 宝贝 商品 商品质量

2、词法分析

分词、词性标注
沿用jieba的贝叶斯网络、HMM和Viterbi算法
e.g.
原句:工信处女干事每月经过科室都要亲口交代工作
↓↓↓
分词列表:[‘工信处’, ‘女干事’, ‘每月’, ‘经过’, ‘科室’, ‘都’, ‘要’, ‘亲口’, ‘交代’, ‘工作’]
词性列表:[‘n’, ‘n’, ‘r’, ‘p’, ‘n’, ‘d’, ‘v’, ‘n’, ‘n’, ‘vn’]

3、句法分析

方法1:纯规则
思想:简化样本、减法规则处理;
优点:开发难度低;运算速度快;
缺点:难以处理长句、双重否定句等;后期准确率难以提升;
方法2:依存句法分析
开源或免费的工具有:HanLP、nltk、百度AI等
优点:主流;精准;
缺点:开发难度大;
方法3:贝叶斯网络
模型理解:有向无环图+条件概率
特点:准确率优于纯规则方法;开发难度适中

贝叶斯网络示例

【音质 舒服 不 刺耳】–>【【音质 舒服】【不 刺耳】】
【名形副形】–>【【名形】【副形】】

# 名词、副词、形容词
dt = {'名副形': 3, '副形名': 2, '名形副': 1, '名形': 4, '形名': 2, '副形': 4, '形副': 1}
total = sum(dt.values())  # 总频数
sequence = '名形副形'  # 词性序列
length = len(sequence)

# 有向无环图
DAG = dict()
for head in range(length):
    DAG.update({head: [head]})
    for middle in range(head + 2, length + 1):
        word = sequence[head: middle]
        if word in dt:
            DAG[head].append(middle - 1)

# 最大概率路线
route = {length: (1, 1)}
for idx in range(length - 1, -1, -1):
    route[idx] = max(
        ((dt.get(sequence[idx:x + 1]) or 1) / total * route[x + 1][0], x)
        for x in DAG[idx])

# 逆向匹配
x = 0
while x < length:
    y = route[x][1] + 1
    l_word = sequence[x:y]
    print(l_word)
    x = y

4、语义分析

= i = 1 n i ( 1 ) 情感分 = 观点 * \prod_{i=1}^{n}程度_i * (-1)^{否定}

原句 观点 得分
那噪音非常大 噪音(-1)非常(2)大(1) -2
价格不算太高啦 价格(-1)不算(-0.5)太(2)高(1) 1

猜你喜欢

转载自blog.csdn.net/Yellow_python/article/details/85264825
今日推荐