sentiwordnet的简单使用
2014-03-19 16:16
106 查看
# Example line:
# POS ID PosS NegS SynsetTerm#sentimentscore Desc
# a 00009618 0.5 0.25 spartan#4 austere#3 ascetical#2 describe
在sentiwordnet中,一行数据如上所示,第一项是单词的词性;第二项是单词的ID;第三第四项分别是积极得分和消极得分;第五项字符串分别是:单词#语义标号 单词#语义标号,这里列出的单词都是同义词,意思在第六项所描述;第六项描述前面一组同义词的意思。
因为一个单词有很多种意思,比如‘good’,作为名词有4种含义(即会出现在4行里面,下同),作为形容词有21种含义,作为副词有2种含义。当我们要判断‘good’这个词的情感的时候,我们不会去直接判断这个‘good’到底是什么意思,再代入某一行计算,而是先把所有‘good’统计一下,得到一个平均值,用这个平均值代表所有‘good’的情感得分,这个得分的值在-1到1之间。如果得分是正的,就是积极的;如果是负的,就是消极的;如果是0.0,就是中性的。
具体计算公式是:score =
![](https://oscdn.geek-share.com/Uploads/Images/Content/201403/24ccddcb0220d17c684d7e3636d6dfbf.png)
,n是单词的所有含义数
Sum =
![](https://oscdn.geek-share.com/Uploads/Images/Content/201403/cb31c12d62291e92a0689cc14a791bcd.png)
最后的得分 = score/sum。
使用的时候,只需传入单词和词性,即可得到大部分情感词的情感得分,从而判断极性。
# POS ID PosS NegS SynsetTerm#sentimentscore Desc
# a 00009618 0.5 0.25 spartan#4 austere#3 ascetical#2 describe
在sentiwordnet中,一行数据如上所示,第一项是单词的词性;第二项是单词的ID;第三第四项分别是积极得分和消极得分;第五项字符串分别是:单词#语义标号 单词#语义标号,这里列出的单词都是同义词,意思在第六项所描述;第六项描述前面一组同义词的意思。
因为一个单词有很多种意思,比如‘good’,作为名词有4种含义(即会出现在4行里面,下同),作为形容词有21种含义,作为副词有2种含义。当我们要判断‘good’这个词的情感的时候,我们不会去直接判断这个‘good’到底是什么意思,再代入某一行计算,而是先把所有‘good’统计一下,得到一个平均值,用这个平均值代表所有‘good’的情感得分,这个得分的值在-1到1之间。如果得分是正的,就是积极的;如果是负的,就是消极的;如果是0.0,就是中性的。
具体计算公式是:score =
![](https://oscdn.geek-share.com/Uploads/Images/Content/201403/24ccddcb0220d17c684d7e3636d6dfbf.png)
,n是单词的所有含义数
Sum =
![](https://oscdn.geek-share.com/Uploads/Images/Content/201403/cb31c12d62291e92a0689cc14a791bcd.png)
最后的得分 = score/sum。
使用的时候,只需传入单词和词性,即可得到大部分情感词的情感得分,从而判断极性。
# author:kou # date:2014年3月14日 from __future__ import division class SentiWordNet(): def __init__(self,netpath): self.netpath = netpath self.dictionary = {} def infoextract(self): tempdict = {} templist = [] try: f = open(self.netpath,"r") except IOError: print "failed to open file!" exit() print 'start extracting.......' # Example line: # POS ID PosS NegS SynsetTerm#sensenumber Desc # a 00009618 0.5 0.25 spartan#4 austere#3 ascetical#2 …… for sor in f.readlines(): if sor.strip().startswith("#"): pass else: data = sor.split("\t") if len(data) != 6: print 'invalid data' break wordTypeMarker = data[0] synsetScore = float(data[2]) - float(data[3]) #// Calculate synset score as score = PosS - NegS synTermsSplit = data[4].split(" ") # word#sentimentscore for w in synTermsSplit: synTermAndRank = w.split("#") # synTerm = synTermAndRank[0] + "#" + wordTypeMarker #单词#词性 synTermRank = int(synTermAndRank[1]) if tempdict.has_key(synTerm): t = [synTermRank,synsetScore] tempdict.get(synTerm).append(t) else: temp = {synTerm:[]} t = [synTermRank,synsetScore] temp.get(synTerm).append(t) tempdict.update(temp) for key in tempdict.keys(): score = 0.0 ssum = 0.0 for wordlist in tempdict.get(key): score += wordlist[1]/wordlist[0] ssum += 1.0/wordlist[0] score /= ssum self.dictionary.update({key:score}) def getscore(self,word,pos): return self.dictionary.get(word + "#" + pos) if __name__ == '__main__': netpath = "C:\\Users\\Administrator\\Desktop\\SentiWordNet.txt" swn= SentiWordNet(netpath) swn.infoextract() print "good#a "+str(swn.getscore('good','a')) print "bad#a "+str(swn.getscore('bad','a')) print "blue#a "+str(swn.getscore('blue','a')) print "blue#a "+str(swn.getscore('blue','n'))
相关文章推荐
- 在ASP.NET中使用AJAX的简单方法
- asp.net MVC + linq to Entity简单教程(四)linq to Entity查询中其它方法的使用
- Quartz.Net的使用(简单配置方法)定时任务框架
- ASP.net中模板的简单使用
- 【jquery模仿net控件】简单分页控件1.0,附上gridview使用测试
- UrlRewritingNet控件的简单使用
- Asp.net使用Aspose.Words 组件生成Word
- Asp.Net使用POST方法最简单的实现
- UrlRewritingNet控件的简单使用
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之数据篇
- 使用简单的Ajax Framework -MagicAjax.NET
- 【ADO.NET】1、简单配置与使用
- [引]如何藉由使用 Visual C# . NET 處理 Word 中的事件
- ASP.NET使用Cookie简单实现记住登陆状态功能
- ASP.NET MVC 中使用Spring.NET实现简单的属性注入
- java.net.URL的简单使用
- 使用VB.net 创建简单的TTS中英文混合语音朗读
- 【转】 一个使用WordNet比较词语相似度的Java包——JWS(Java WordNet Similarity)
- Apache commons net 包介绍和简单使用
- .Net Mvc AutoMapper简单使用