基于情感词典的短文本情感倾向分析方法[发明专利]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(10)申请公布号
(43)申请公布日 (21)申请号 201510342473.4
(22)申请日 2015.06.19
G06F 17/27(2006.01)
(71)申请人四川大学
地址610064 四川省成都市一环路南一段
24号
(72)发明人张海仙 章毅
(74)专利代理机构成都弘毅天承知识产权代理
有限公司 51230
代理人杨保刚
(54)发明名称
基于情感词典的短文本情感倾向分析方法
(57)摘要
基于情感词典的短文本情感倾向分析方法,
首先基于词频统计的方法构建基础情感词典;对
候选词语与基础情感词典中词汇的统计相关性计
算来判别它的情感倾向,从而扩充基础词典。
然
后在情感词典的基础上,以每条评价语句S 为单
位,以该语句中的每个情感词WS 为分隔符,对两
个分隔符之间的断句phrase(WSi-1,WSi)进行情
感权值计算,然后将每个断句的权值加权求和得
出S 的总体情感倾向值weight(S),判断S 的情感
极性,如果weight(S)大于0,则该评论属于正面
评论;否则,认为S 属于负向评论,从而实现对评
价语句的极性分类,断句phrase(WSi-1,WSi)包
含词语WSi,但是不包含词语WSi-1。
(51)Int.Cl.
(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书1页 说明书15页CN 105005553 A 2015.10.28
C N 105005553
A
1.基于情感词典的短文本情感倾向分析方法,其特征在于包括如下步骤:
步骤1、构建情感词典,基于词频统计的方法构建基础情感词典;通过SO-PMI方法,对候选词语与基础情感词典中词汇的统计相关性计算来判别它的情感倾向,从而扩充基础词典;
步骤2、构建情感分析的模型,在情感词典的基础上,以每条评价语句S为单位,以该语句中的每个情感词WS为分隔符,对两个分隔符之间的断句phrase(WSi-1,WSi)进行情感权值计算,然后将每个断句的权值加权求和得出每条评价语句S的总体情感倾向值weight(S),判断每条评价语句S的情感极性的方法是:如果weight(S)大于0,则该评论属于正面评论;否则,认为每条评价语句S属于负向评论,从而实现对评价语句的极性分类,断句phrase(WSi-1,WSi)包含词语WSi,但是不包含词语WSi-1。
2.根据权利要求1所述的基于情感词典的短文本情感倾向分析方法,其特征在于,SO-PMI方法包括如下步骤:
步骤2-1、采用ICTCLAS系统分词之后获取词语的词性property,
步骤2-2、计算由word.propertyal∈{a,ad,an,ag,al}和word. propertyal∈{vn,vd,vi,vg,vl}所限定的两种候选词word的SO-PMI值,其余词性的候选词直接被视为中性词语;
计算两种候选词word的SO-PMI值具体为:
计算候选词和正向基础情感词之间的PMI值,计算候选词与负向基础情感词之间的PMI值,最后将两者相减得到候选词的SO-PMI值,SO-PMI的计算式如下:
(式1)
posWords为正向基础情感词典,negWords为负向基础情感词典,word为候选词语;
SO-PMI的值和情感倾向之间的关系如下式:
(式2)
步骤2-4、将正面基础情感词语的同义词,以及符合式word. propertyal∈{a,ad,an,ag,al}或式word.propertyal∈{vn,vd,vi,vg,vl}并经式2判定为正面倾向的情感词加入至posWords;
步骤2-5、将负面基础情感词语的同义词,以及符合式word. propertyal∈{a,ad,an,ag,al}或式word.propertyal∈{vn,vd,vi,vg,vl}并经式2判定为负面倾向的情感词加入至negWords,得到一个全面的情感词比较样本。
基于情感词典的短文本情感倾向分析方法
技术领域
[0001] 本发明涉及短文本进行情感倾向分类技术领域,提供了一种基于情感词典的短文本情感倾向分析方法。
背景技术
[0002] 从互联网社区概念的提出到现在的十多年中,各国的研究者对互联网社区检测的相关技术和研究给予了很多关注,取得了很多实质性的进展。
[0003] 研究者首先对互联网的拓扑结构进行了更加深入的分析。
与人们的设想不同,互联网和其他很多网络的相互关联并不完全是随机的,并不能完全用随机图来描述互联网社区的结构。
尤其是在对越来越多互联网数据进行分析后,随机图结构的概念受到严重的冲击。
互联网的实际结构远比我们想象得要复杂得多,链接、网站、页面、用户、管理者之间的关系也是多样化的。
在互联网中有很多区域内部联系紧密同外部的联系较弱,这些区域就是互联网社区,互联网社区的结构特征是无法用随机图描述清楚的。
[0004] 随着互联网社区概念的提出和相关研究的深入展开,开发者们设计了各种不同类型的的互联网社区检测算法对其进行结构检测,并根据实验结果不断地对算法进行改进和优化。
随着研究的深入开展,对互联网社区进行检测的算法也在不断地被优化改进。
[0005] 与传统方法相比,现在的算法大多能够充分考虑到网络运行的并行性、实时性和可扩展性等来解决物理上的限制。
比如Sadi等人提出的用并行的蚂蚁找圈的社区检测方法。
这样可以在不影响结果效果的前提下,压缩互联网结构图直至一个稳定的大小以降低算法运行的成本,从而完成对大规模网络的处理。
也有Leung等人提出的对标签传播算法进行改进,并加入启发式教育法的方法对大规模网络进行实时的社区检测。
针对不同的互联网社区检测方法,Leskovec等人对现有的一些方法进行研究比较,发现大规模网络社区检测问题并不是一个简单算法就能解决的,是一个非常复杂的问题,要考虑到网络结构、数据分布、网络爬行效果等多方面的问题。
随着检测技术的不断成熟,互联网社区检测有效度也在不断提升,同传统的蛮力算法相比较,社区检测技术已经越来越成为一种艺术。
作为社区检测一个新兴的方向,将会对互联网结构挖掘做出巨大影响。
发明内容
[0006] 本发明的目的在于提供一种基于情感词典的短文本情感倾向分析方法。
[0007] 基于情感词典的短文本情感倾向分析方法,其特征在于包括如下步骤:[0008] 步骤1、构建情感词典,基于词频统计的方法构建基础情感词典;通过SO-PMI方法,对候选词语与基础情感词典中词汇的统计相关性计算来判别它的情感倾向,从而扩充基础词典。
[0009] 步骤2、构建情感分析的模型,在情感词典的基础上,以每条评价语句S为单位,以该语句中的每个情感词WS为分隔符,对两个分隔符之间的断句phrase(WSi-1,WSi)进行情感权值计算,然后将每个断句的权值加权求和得出S的总体情感倾向值weight(S),判断S
的情感极性的方法是:如果weight(S)大于0,则该评论属于正面评论;否则,认为S属于负向评论,从而实现对评价语句的极性分类,断句phrase(WSi-1,WSi)包含词语WSi,但是不包含词语WSi-1。
[0010] 上述技术方案中,SO-PMI方法包括如下步骤:
[0011] 步骤2-1、采用ICTCLAS系统分词之后获取词语的词性property,
[0012] 步骤2-2、计算由word.propertyal∈{a,ad,an,ag,al}和word. propertyal∈{vn,vd,vi,vg,vl}所限定的两种候选词word的SO-PMI值,其余词性的候选词直接被视为中性词语;
[0013] 计算两种候选词word的SO-PMI值具体为:
[0014] 计算候选词和正向基础情感词之间的PMI值,计算候选词与负向基础情感词之间的PMI值,最后将两者相减得到候选词的SO-PMI值,SO-PMI的计算式如下:
[0015] (式1)
[0016] posWords为正向基础情感词典,negWords为负向基础情感词典,word为候选词语;
[0017] SO-PMI的值和情感倾向之间的关系如下式:
[0018] (式2)
[0019] 步骤2-4、将正面基础情感词语的同义词,以及符合式word. propertyal∈{a,ad,an,ag,al}或式word.propertyal∈{vn,vd,vi,vg,vl}并经式2判定为正面倾向的情感词加入至posWords;
[0020] 步骤2-5、将负面基础情感词语的同义词,以及符合式word. propertyal∈{a,ad,an,ag,al}或式word.propertyal∈{vn,vd,vi,vg,vl}并经式2判定为负面倾向的情感词加入至negWords,得到一个全面的情感词比较样本。
[0021] 本发明因为采用以上技术方案,因此具备以下有益效果:
[0022] 我们的实验结果表明,在数据集包含10万商品评论的情况下,单纯基于机器学习和单纯基于情感词典的情感倾向分析方法的准确率分别为67.9%和83.27%,而本文提出的综合型方法的准确率可以达到85.9%,效果远优于基于机器学习的方法,也好于单纯基于情感词典的方法。
具体实施方式
[0023] 本发明提供了一种基于情感词典的短文本情感倾向分析方法。
[0024] 情感词典的构建方法
[0025] 情感词典是指一系列能够表达人类正面或者负面情绪的词语的集合。
为便于后面对商品评论短句进行量化的情感倾向值计算,本文还在情感词典中针对每个词语保存其情感倾向值,其中,+1代表最强烈的正面情感,-1代表最强烈的负面情感。
[0026] 我们设计的情感词典构建方法包含两个部分:基于词频统计的方法构建基础情感词典;基于改进的SO-PMI方法,通过对候选词语与基础情感词典中词汇的统计相关性计算
来判别它的情感倾向,从而扩充基础词典。
[0027] 基础情感词典的构建
[0028] 基础情感词典是基于自然语言处理方法进行短文本情感分析的基础和关键。
本课题将根据语料集中的词语是否出现在情感词典之中,以及出现在词典之中的词语的情感倾向值来计算商品评论短句的情感倾向值。
所以,将哪些词语纳入情感词典,词典中的词语在商品评价领域内是否具有代表性,这些词语的情感倾向值是否准确,这些问题都会对情感分类结果的准确性造成影响。
解决这些问题的第一步就是建立精准的基础情感词典。
[0029] 构建基础情感词典的常用方法是:从知网(Hownet)中选取一系列情感词,将它们逐个输入至Google搜索引擎,根据Google返回的点击量(hits值)的大小对情感词进行排序,选取点击量最高的若干个情感词作为基础情感词。
由于本课题的语料集仅仅来自于电子商务网站中的商品评价信息,所以知网中的词汇集对于本课题而言范围过大。
并且,搜索引擎反馈的点击量不能反映一个词汇在商品评价语料集中是否具有代表性。
所以,该方法不适于本课题。
[0030] 本课题采用基于词频统计的方法,半自动地选取基础情感词汇。
因为商品评价短文本中含有情感成分的词语大多为形容词、动词和少量的名词,所以在进行预处理之后,只需要基于条目数量足够多的商品评论短句集合,针对形容词、动词和名词进行自动词频统计,然后针对词频较高若干词汇,手工选取词频最高的20个正面情感词和词频最高的20个负面情感词,由它们构成本课题的基础情感词典。
[0031] 采用上述方法,我们最终纳入基础词典的正面和负面情感词汇见表1。
[0032] 表1:基础情感词典
[0033]
[0034] 由于基础情感词汇表达了很强烈的感情倾向,所以我们为正向基础情感词赋予的情感倾向值为+1,为负向基础情感词赋予的情感倾向值为-1。
[0035] 情感词典的扩充
[0036] 基础情感词典的词汇量很小,不可能包含在商品评价语料集中出现的所有带有情感倾向的词汇。
因此,需要对基础情感词典进行扩充,构建相对完整的情感词典。
我们的扩充方法有两种:添加同义词、添加带有情感倾向的候选词。
[0037] 添加同义词
[0038] 在商品评价短文本中,有很多赞扬或者贬低的用词都互为同义词。
所以,扩充同义词能够帮助我们更宽泛地识别情感词汇。
为此,我们希望利用哈工大同义词词林[33],对基
础情感词典进行同义词扩充。
但是,哈工大同义词词林中有很多同义词是非常书面化的词语,在商品评价语料集中完全不会用到,比如“不好”的同义词“窳劣”。
为了提高情感倾向计算的算法性能,我们仍需人工筛选出常用的同义词词汇。
在同义词的扩充之后,情感词典的词语增至256个。
因为是同义词,我们将基础情感词典中所有正面情感词的同义词的情感倾向值设置为+1,并将所有负面情感词的同义词的情感倾向值设置为-1。
[0039] 添加相关的情感词
[0040] 虽然构建完全无遗漏的情感词典非常困难,但通过分析语料集中每个词语与字典中情感词汇的相关性,将相关性很高的词语纳入词典,可以有效地构建覆盖面更广的情感词典。
本课题使用一种基于统计的方法:点互信息法(Pointwise Mutual Information)来计算候选词与字典中情感词汇的相关性,从而判断该词是否应该作为情感词。
若是,则添加至情感词典。
[0041] 点互信息法基于互信息理论计算词语和词语之间的相关性。
它的基本思想是:统
计两个词word
i 和word
j
在商品评价语句中共现的概率。
共现的概率越大,则表示这两个词
之间的相关性越高,如式下所示:
[0042] (式5-1)
[0043] 其中p(word i∧word j)是word i和word j在语料集中共现的概率,其计算方法如
式(6-1)所示,其中n代表语料集中商品评论的总条数,numSentence(word
i ,word
j
)表示同
时包含word
i 和word
j
的评价条数。
P(word
i
)和P(word
j
)分别表示语料集中包含word
i
和
word
j
的评价条数在总的评价条数所占的比例。
它们的计算方法如式6-2和6-3所示,其中
numSentence(word
i )表示语料集中包含word
i
的评价条数。
式(6-1)中的PMI(word
i
,word
j
)
表示当word
i 和word
j
其中一个变量出现时,我们可以获取到的另一个变量的信息量,这充
分表现了word
i 和word
j
之间的统计相关性:PMI大于0时,表示两个词语是具有相关性的,
且PMI值越大,相关性越强;PMI等于0时,表示这两个词之间是统计独立的;PMI小于0时,表示这两个词之间是互斥的。
[0044] (式6-1)
[0045] (式6-2)
[0046] (式6-3)
[0047] 当我们将PMI的原理应用于情感极性分析时,就演变成了SO-PMI算法。
SO-PMI 采用PMI的思想计算候选词和各组基础情感词之间的统计相关性,从各组统计相关性综合判断该词的情感倾向。
具体的计算步骤是:首先,计算候选词和正向基础情感词之间的PMI值;然后,计算候选词与负向基础情感词之间的PMI值;最后将两者相减得到候选词的SO-PMI值。
假设正向基础情感词典为posWords,负向基础情感词典为negWords,则对于候选词语word,SO-PMI的计算如式6-4所示:
[0048] (式6-4)
[0049] SO-PMI的值和情感倾向之间的关系如式6-5所示:
[0050] (式6-5)
[0051] 将SO-PMI方法应用于本实验的商品评价语料集时,我们发现了以下问题:[0052] 1)很多单字动词和专属名词本身是中性含义,但它们可能会在语料集中和词典中某一情感词共现的概率很大,从而导致SO-PMI大大偏离中性值。
比如动词“击”。
它与词典中正面词语之间的PMI值为18.97,而与负面词语之间的PMI值却为0,故它的SO-PMI值会远大于0。
名词“thinkpad”也会出现类似的情况。
这些情况会将很多并无情感倾向的词语纳入情感词典,造成情感分类方法无谓的性能开销,并损害分类的准确性。
[0053] 2)很多中性词的SO-PMI往往不会精确地等于0:它们可能接近于0,也可能与0之间有很大的偏差。
所以,将区分word为正面还是负面情感词的阀值定为0,并不适合本课题。
[0054] 3)遗漏问题:由于本课题采用的语料集是短文本形式的商品评价数据,评论的字数往往较少,基础情感词语的数量也不多,所以候选词和基础情感词共现的概率会比较低,即SO-PMI的值会趋于0。
但是,从情感分析的视角,这个候选词与基础情感词之间的相关性又很大。
这样会导致很多本该纳入情感词典的词汇被遗漏,并且产生特征的稀疏问题。
[0055] 所以,需要根据本课题语料集的特点,对SO-PMI算法进行适应性改进,以求解决上述三个问题。
我们提出的改进有如下三处。
[0056] 1)针对问题1,,在ICTCLAS分词之后获取词语的词性property,并规定只计算由式6-7和式6-8所限定的两种候选词word的SO-PMI值,其余词性的候选词直接被视为中性词语。
[0057] word.propertyal∈{a,ad,an,ag,al} (式6-7)
[0058] word.propertyal∈{vn,vd,vi,vg,vl} (式6-8)
[0059] 因为形容词一般都包含了感情倾向,所以对所有形容词词汇都计算SO-PMI值。
[0060] 同时,我们舍弃了名词以及其余词性的词语,因为这些词性的词语很少会带有情感倾向。
由于商品评价语料集的特殊性,大多数的名词都是商品的类型名称或品牌名称,比如“衣服”、“美迪”等。
所以,为了防止这些中性名词被错误地纳入到情感词典中,也为了提高扩充候选词的算法效率,我们不计算名词的SO-PMI值。
但是,我们会手工地将包含强烈情感倾向的一系列名词及其同义词加入到情感词典中。
手工加入的部分名词性的情感词语如表2所示。
[0061] 表2手工挑选的名词性情感词语:
[0062]
[0063] 2)针对问题2,在经过对大量数据的观察后,我们将SO-PMI的值和情感倾向的关系重新调整为式(6-9)。
[0064] (式6-9)
[0065] 针对问题3:我们选择进一步扩充式6-4中的posWords和negWords词库。
具体做法是:(a)将正面基础情感词语的同义词,以及符合式6-7或式6-8并经式6-9判定为正面倾向的情感词加入至posWords;(b)将负面基础情感词语的同义词,以及符合式6-7或式6-8并经式6-9判定为负面倾向的情感词加入至negWords。
这样,就给候选词提供了一个更全面的情感词比较样本,避免遗漏带有情感倾向的候选词语。
[0066] 严格地,posWords定义如下:
[0067] 1)如果w是基础情感词典中的正面词语,那么w posWords;
[0068] 2)如果w是基础情感词典中某个正面词语的同义语,那么w posWords;[0069] 3)如果w符合式6-7或式6-8,并且1.36<SO-PMI(word)<23,那么w posWords。
同理,negWords定义如下:
[0070] 1)如果w是基础情感词典中的负面词语,那么w negWords;
[0071] 2)如果w是基础情感词典中某个负面词语的同义语,那么w negWords;[0072] 3)如果w符合式6-7或式6-8,并且-16<SO-PMI(word)<-1,那么w negWords。
[0073] 根据改进的SO-PMI算法,我们把经过分词处理后的10万条评论数据作为输入,对其中符合式6-7或式6-8,且不和基础情感词重复的候选词进行情感倾向值的计算,挑选出符合式6-9的候选词,将该词和它的情感倾向值一起加入至情感词典。
此时,SO-PMI难免会把一些情感词的极性分错,所以需要人工进行去噪。
完成扩充后,词典中情感词的数目增加到2393个,其中包含正向情感词1302个和负向情感词1091个。
这样就完成了本课题的情感词典的构建。
[0074] 情感模型的设计
[0075] 本节将详细介绍我们对商品评价信息进行情感分析的模型,即情感模型。
它的主要思想是:在情感词典的基础上,以每条评价语句S为单位,以该语句中的每个情感词WS为分隔符,对两个分隔符之间的断句phrase(WSi-1,WSi)进行情感权值计算,然后将每个断句的权值加权求和得出S的总体情感倾向值,从而实现对评价语句的极性分类。
本文约定,断句phrase(WSi-1,WSi)包含词语WSi,但是不包含词语WSi-1。
[0076] 该模型由6个模块组成,分别为:情感词的分析、否定词的分析、副词的分析、固定搭配词句的分析、转折词的分析、反问句和感叹句的分析。
[0077] 在这6个模块的设计过程中,本文对传统情感模型[都进行了程度不同的改造,使
之适合于电子商务网站中商品评论短文本的情感倾向分析。
例如,在情感词的分析方面,我们考虑了情感词语的不同词性对情感倾向的影响,引入Ad词典对带有形容词和副词两种词性的词语进行特殊处理;又如,在固定搭配词句的分析方面,我们考虑了固定搭配对句子或者情感词语的情感影响,将其分为4种,对每种搭配词组都做出了相应的特殊处理,使得情感倾向分类的结果更加精确。
[0078] 情感词的分析
[0079] 对情感词的分析流程如下:针对待分析评论均中的每个词语word,扫描情感词典,判断word是否存在于情感词典之中,若存在,则将word视为情感词并从情感词典中读取该词的情感倾向值,将其返回;若不存在,则将word视为中性词汇,返回0。
这样循环直至对整个评论集的词语判断完成。
该过程由算法analyzeSentimentWord实现。
[0080] 然而,有些具有形容词和副词两种词性的词语,在某些情况下包含情感态度,在另外一些情况下却只有副词的作用,此时,以这个词是否存在于情感词典之中作为准则来计算它的感情倾向值是不准确的。
[0081] 本课题将这种情况区分成以下两种。
[0082] 1)当一个词语有形容词和副词两种词性时,根据词语在不同语句中的不同功能,ICTCLAS工具分析出来的词性也会不一样,见例6.1。
所以,我们可以在情感词典的基础上结合词语的词性来判断该词是否为情感词。
[0083] 例6.1
[0084] 句1:味道/n很/d一般/a。
/wj
[0085] 此时“一般”作为负面情感词汇,词性为a。
[0086] 句2:一般/ad不/d会/v掉线/n。
/wj
[0087] 此时“一般”作为修饰“掉线”的副词,表示情感的强弱程度,词性为ad。
[0088] 针对上述问题,我们提出的解决办法是:建立一个Ad词典,将带有形容词和副词两种词性的词语放入Ad词典中,并规定:如果词语属于Ad词典,且其词性包含字符“d”,则不将该词视为情感词。
[0089] 经过总结,我们确定的Ad词典如表6.3所示。
[0090] 表6.3Ad词典
[0091]
好,多,实在,特别,容易,强烈,完全,直接,基本
[0092] 2)对于某些具有形容词和副词性质的情感词语,其副词词性是最近才开始使用的,如例6.2中第二个例句中的“小”。
此时,ICTCLAS无法分析出该词的副词词性,只能通过前后词语搭配来判断它是否具有副词词性。
[0093] 例6.2:
[0094] 句1:很/d小/a的/ude东西/n。
/wj
[0095] 此时“小”作为负向情感词汇,词性为a。
[0096] 句2:小/a贵/a。
/wj
[0097] 此时“小”作为修饰“贵”的副词,表示情感的强弱程度,词性为d,但是ICTCLAS将它的词性仍然识别为a。
[0098] 由例6.2可知,当“小”和形容词搭配在一起时,它具有副词词性。
符合这种规律的词语还有“大”。
所以,我们可以通过结合它的下一个词语的词性来判断它是否起情感词的作用。
具体的规则为:如果一个同时具有形容词和副词词性的词语的下一个词语为形容词(a),则它不被视为情感词。
[0099] 假设词语word的词性为property,它的下一个词语的词性为nextProperty。
我们以weight(word)表示词汇word的情感倾向值(也称权重),以isSentiment(word)表示word是否为情感词。
情感词分析算法用伪代码描述如下:
[0100] 算法:analyzeSentimentWord(情感词分析)
[0101] 输入:word,property,nextProperty
[0102] 输出:weight(word),isSentiment(word)
[0103] if(isInSentimentLexicon(word))then
[0104] if(isInAdLexicon(word)&&property.contains(―d‖))then
[0105] weight(word):=0;
[0106] else if((word==“大”||word==―小‖)&&nextProperty.contains(―a‖))then
[0107] weight(word):=0;
[0108] else
[0109] weight(word):=getWeightFromSentimentLexicon(word);
[0110] end if
[0111] else
[0112] weight(word):=0;
[0113] end if
[0114] if(weight(word)==0)then
[0115] isSentiment(word):=false;
[0116] else
[0117] isSentiment(word):=true;
[0118] end if
[0119] 在情感词分析算法中,函数isInSentimentLexicon和isInAdLexicon分别判断词汇是否位于情感词典和Ad词典之中,函数getWeightFromSentimentLexicon从情感词典中获取词汇的情感倾向值。
[0120] 通过对每个词语的情感倾向值的计算,我们获取到准确的情感词(即权值不等于0的词),并且过滤了在特定语句中不发挥情感作用的情感词(即权值等于0的情感词)。
[0121] 否定词的分析
[0122] 否定词是表示否定含义的词语,它的出现会改变原句子的情感倾向。
比如在例6.3中,“喜欢”是正面评价,当前面加上否定词“不”的时候,正面评价就变成了负面评价。
本课题确定的否定词词典如表6.4所示,一共包括40个否定词
[0123] 表6.4否定词词典
[0124]
[0125] 除了单个否定词出现的情况,汉语中也经常会出现双重否定,即一句话中出现偶数个否定词。
比如在例6.4中,“无法”和“不”都是否定词,它们同时修饰情感词“喜欢”,最后还原了“喜欢”的正面情感倾向。
[0126] 例6.3我/rr不/d喜欢/vi它/rr。
/wj
[0127] 例6.4我/rr无法/d不/d喜欢/vi它/rr。
/wj
[0128] 本文对否定词的分析方法为:在语句出现情感词Wsi的情况下,计算Wsi与前一个分隔符Wsi-1之间(即一个断句中)否定词的个数negNum(Wsi-1,Wsi)。
如果negNum为奇数,则该断句的情感值为情感词的情感倾向值取反;反之,则保持原情感倾向值。
[0129] 计算否定词个数的方法为:逐个扫描句子s中的词汇,扫描到Wsi-1时,以Wsi-1作为起点,从前往后逐个获取词语word,调用函数isNegWord判断word是否存在于否定词词典中。
若是,则negNum增一,直至扫描到下一个情感词语Wsi。
在此过程中,将word依次存入数组变量phrase(Wsi-1,Wsi),从而完成对一个断句的截取。
[0130] 不妨将一个评论短句中的所有断句的集合记为phrases,第i个断句记为phrases[i],所有断句的情感倾向值的集合记为weight(phrases),第i个断句的情感倾向值记为weight(phrases[i]),断句中包含的否定词的个数记为negNum。
本文的否定词分析算法analyzeNegWord描述如下:
[0131] 算法:analyzeNegWord(否定词分析)
[0132] 输入:待分析的评论短句s
[0133] 输出:phrases,weight(phrases)
[0134] i:=0;negNum:=0;
[0135] foreach word win s
[0136] phrases[i].appendWord(w);//将词语w加入到phrases[i]的词语序列的末尾[0137] if(isInNegLexicon(w))then
[0138] negNum++;
[0139] else
[0140] weight:=analyzeSentimentWord(w);
[0141] if(weight!=0)then
[0142] if(negNum%2==0)then
[0143] weight(phrases[i]):=weight;
[0144] else
[0145] weight(phrases[i]):=-1*weight;
[0146] end if
[0147] i++;negNum:=0;
[0148] end if
[0149] end if。