Javascript分析内容的情感倾向

日期:2011-12-02    阅读:75   分类:Javascript


闲来无事,利用javascript写了一个分析网页内容情感倾向的功能,不一定很准确,但能体验出效果来,抛砖引玉,还请大家多多提意见,见如下代码:

var gc = [
    ['好', 1], ['美', 0.8], ['优', 0.8], ['精', 0.8], ['妙', 0.8], ['强', 0.8], ['灵', 0.8], ['俊', 0.8], ['明', 0.8],
    ['雅', 0.8], ['能', 0.8], ['健', 0.8], ['勤', 0.8], ['俏', 0.8], ['忠', 0.8], ['善', 0.8], ['良', 0.8], ['厚', 0.8],
    ['智', 0.8], ['富', 0.8], ['专', 0.8], ['乐', 0.8], ['佳', 0.8], ['柔', 0.8], ['娇', 0.8], ['贤', 0.8], ['多', 0.8],
    ['慧', 0.8], ['赏', 0.8], ['赞', 0.8], ['爽', 0.8], ['秀', 0.8], ['简', 0.8], ['稳', 0.8], ['超', 0.8], ['新', 0.8],
    ['准', 0.8], ['耐', 0.8], ['结', 0.8], ['真', 0.8], ['行', 0.8], ['欣', 0.8], ['支持', 0.8], ['顶', 0.8], ['细', 0.8],
    ['彩', 0.8], ['棒', 0.8], ['羡', 0.8], ['足', 0.8], ['鲜', 0.8], ['悦', 0.8], ['大', 0.8], ['高', 1], ['香', 0.8], ['快乐', 1],
    ['美观', 0.8], ['精良', 1], ['完美', 1], ['太好', 2], ['实惠', 0.8], ['动人', 0.8], ['不错', 1.5], ['非常好', 2], ['感动', 1],
    ['良好', 0.8], ['超赞', 1], ['出众', 1], ['很牛', 1], ['得力', 0.8], ['十足', 1], ['结实', 0.8], ['健壮', 1], ['优点', 1],
    ['绝佳', 2], ['优异', 1.5], ['顶尖', 1], ['合理', 1], ['有效', 0.8], ['足够', 1], ['扎实', 0.8], ['最佳', 1], ['热门', 1],
    ['出色', 1], ['实用', 1], ['优惠', 1], ['上乘', 1], ['著名', 0.8], ['完整', 1], ['杰出', 1], ['标准', 0.8], ['怪才', 0.8], ['喜欢', 1.5],
    ['办法', 1], ['集锦', 1]
];

var bc = [
    ['差', 1], ['丑', 0.8], ['弱', 0.8], ['粗', 0.8], ['旧', 0.8], ['强', 0.8], ['死', 0.8], ['恶', 0.8], ['老', 0.5],
    ['劣', 0.8], ['异', 0.8], ['破', 0.8], ['忍', 0.8], ['受', 0.8], ['障', 0.8], ['错', 0.8], ['低', 0.8], ['败', 0.8],
    ['小', 0.8], ['穷', 0.8], ['杂', 0.8], ['愁', 0.8], ['暴', 0.8], ['乱', 0.8], ['少', 0.8], ['薄', 0.8], ['减', 0.8],
    ['暗', 0.8], ['阴', 0.8], ['毒', 0.8], ['险', 0.8], ['紊', 0.8], ['欠', 0.8], ['怪', 0.8], ['寒', 0.8], ['坏', 1],
    ['酸', 0.8], ['冷', 0.8], ['假', 0.8], ['空', 0.8], ['陋', 0.8], ['脏', 0.8], ['笨', 0.8], ['苦', 0.8], ['没有', 1],
    ['不好', 0.8], ['假的', 0.8], ['太差', 1.8], ['最差', 2], ['缺点', 1], ['错误', 2], ['严重', 1.2], ['失望', 1],
    ['危险', 0.8], ['次品', 1], ['不良', 1], ['不好使', 1], ['费劲', 0.8], ['繁杂', 0.8], ['不满意', 1.5], ['不正常', 1],
    ['很差', 0.8], ['低等', 1], ['不行', 1], ['不力', 1], ['不值', 0.8], ['不厚道', 1], ['混乱', 0.8], ['薄弱', 1],
    ['弱小', 1], ['缩水', 1], ['低劣', 1], ['有害', 1], ['不稳定', 0.8], ['欺骗', 1], ['没用', 0.8], ['困难', 1], ['糟糕', 3.2],
    ['质量差', 1], ['不理想', 1], ['不足', 1], ['迟钝', 1], ['不合理', 0.8], ['残缺', 1], ['生气', 1], ['气愤', 1], ['讨厌', 1],
    ['问题', 1], ['烦躁', 0.8], ['遭遇', 2.4], ['麻烦', 1.2], ['郁闷', 2.2], ['质疑', 3.2], ['造假', 3.2], ['误解', 1.5]
];

var ge = [
    ['good', 1], ['fast', 0.8], ['quick', 0.8], ['quiet', 0.8], ['excellent', 1], ['great', 1], ['high', 0.8], ['better', 0.8], ['best', 1],
    ['hot', 0.8], ['fine', 0.8], ['ok', 0.8], ['well', 0.8], ['perfect', 1], ['love', 0.8], ['strong', 0.8], ['beautiful', 0.8], ['true', 0.8],
    ['performance', 0.8], ['new', 0.8], ['profession', 0.8], ['large', 0.8], ['stable', 0.8], ['like', 0.8], ['nice', 0.8], ['big', 0.8],
    ['compliment', 0.8], ['popular', 0.8], ['live', 0.8]
];

var be = [
    ['bad', 1], ['low', 0.8], ['slow', 0.8], ['less', 0.8], ['problem', 1], ['bug', 1], ['poor', 0.8], ['terrible', 0.8], ['short', 1],
    ['old', 0.8], ['hate', 0.8], ['small', 0.8], ['failur', 0.8], ['unsexy', 1], ['sadly', 0.8], ['fail', 0.8], ['missing', 0.8], ['lost', 0.8],
    ['error', 0.8], ['fuck', 0.8], ['guilt', 0.8], ['terrorism', 0.8], ['disorder', 0.8], ['contempt', 0.8], ['victim', 0.8], ['nonsense', 0.8],
    ['plight', 0.8], ['collapse', 0.8], ['crash', 0.8], ['die', 0.9]
];

function toDecimal(x, n)

    var f = parseFloat(x); 
    if (isNaN(f)) { 
        0; 
    }

    f = Math.round(x*100)/100; 
    var s = f.toString(); 
    var r = s.indexOf('.'); 
    if (r < 0) { 
        r = s.length; 
        s += '.'; 
    }
   
    while (s.length <= r + n) { 
        s += '0'; 
    }

    return parseFloat(s);
}

function getBodyText()
{
    var article = document.getElementById('page');
    if(!article)
    {
        return "";
    }

    var text = article.innerHTML.replace(/(<[^>]+>)|(\s)/ig, '');
    if(text.length > 8192)
    {
        text = text.substring(0, 8192);
    }
   
    return text;
}

function computeText(dict, text)
{
    var weight = 0;

    for(var i=0;i<dict.length;i++)
    {
        var matched = text.match(new RegExp(dict[i][0], 'ig'));
        if(!matched || matched.length == 0)
        {
            continue;
        }

        weight += matched.length*dict[i][1];
    }

    return weight;
}

function feeling()
{
    var text = getBodyText();
    var error = '本文情感倾向:中性,正向比例:0,负向比例:0。';
    if(text == '')
    {
        return error;
    }

    var good = computeText(gc, text) + computeText(ge, text);
    var bad = computeText(bc, text) + computeText(be, text);
    if(good == 0 && bad == 0)
    {
        return error;
    }
   
    var total = good+bad;
    good = toDecimal(good/total, 2);
    bad = toDecimal(bad/total, 2);
   
    var res = '中性';
    if(good > bad)
    {
        res = '正向';
    }

    if(good < bad)
    {
        res = '负向';
    }

    return '本文情感倾向:'+ res +',正向比例:'+ good +',负向比例:'+ bad +'。';
}


点击查看本页面的内容情感倾向。

本页链接: http://www.scriptlover.com/static/1266-javascript-内容-情感

标签:

相关文章

网友评论

Leave a comment

 required

 required (Not published)

 required