基于双聚类的微博用户标签自动生成算法_3

文档序号:8282406阅读:来源:国知局
[0085]1.8)定义语义本体存储结构,主要包括:(I)本体名称(Ontology Name)和其对应的本体名映射ID号(Ontology Name Mapping ID) ; (2)语义本体(SubOfClass)列表,对应同义词概念;(3)父本体名的映射ID(Parent Ontology Name Mapping ID),一个父本体内hP ID (Parent Ontology Internal ID),以及对自身的描述(Descriptor) ; (4)语义本体的ID (Ontology Internal ID),词性(PartOfSpeech),组成部件本体列表(Component list),相关本体/类别/描述列表(Associate Class list),子本体列表(Subclass list),实例列表(Instance list),等价本体列表(Equivalence Ontology list),近似本体列表(Approximate Ontology list),反义 / 相反本体列表(Antisense/Opposite Ontologylist)等部分;语义本体采用红黑树结合单链表的模式存储;
[0086]1.9)通过步骤1.7)构建的语义本体,再利用网络资源充实语义本体。
[0087]步骤2),获取微博用户的微博信息并进行预处理,如图3所示,包括如下步骤:
[0088]2.1)获取微博用户信息,包括账户信息和微博内容信息D ;
[0089]2.2)利用正则表达式过滤掉文本中有特殊意义的微博字符组合,如“O用户名”、“[表情符号]”和短链接“http://t.cn/*”等内容,这些字符串在字面意义上与微博信息本身无直接联系;
[0090]2.3)对微博内容中的英文字符统一进行小写化处理;
[0091]2.4)使用中文分词组件对文本进行分词处理,得到词袋(Bag-words),在分词的同时标记词性;
[0092]2.5)依照常用的中英文停用词表去除词袋中的停用词;
[0093]2.6)根据标记的词性筛选出词袋中具有较强语义的名词、动名词,得到词袋模型Bff(D) = [bwi,bw2,...,bwn],其中BW⑶是一个多重集合,同一个词可以出现多次,因此使用方括号而不是花括号标记。
[0094]步骤3),利用语义本体从词袋模型中提取词,并对有歧义词进行消歧处理,如图4所示,包括如下步骤:
[0095]3.1)对步骤2)中生成的词袋模型BW(D),建立一个记录每个词出现次数的词频词典,避免之后在同一语境中对屡次出现的同一个词进行重复计算,并利用语义本体对所有词进行处理;
[0096]3.2)遍历词频词典,对于词bw e Bff (D),在语义本体中进行查找,如果找到了名称与词bw相同的语义本体e,则词bw即为词e ;
[0097]3.3)如果词bw在语义本体e的等价本体列表中,贝U用词e替换词bw ;
[0098]3.4)如果词语bw在语义本体e的相关本体列表中,则词bw是多义词,需要利用语义本体矩阵结合微博内容语境词进行消歧处理;消岐处理为利用语义本体,结合微博内容上下文语境、所属类别等特征,选取最满足当前词义的词;
[0099]3.5)将消歧后词bw对应语义本体名称加入词袋模型BW(D);
[0100]3.6)如果没有找到相对应的本体,说明该词在维基百科中是语义不明显的条目,将词bw删除;
[0101]3.7)判断词频词典中是否所有词语都处理完毕,如是,则结束遍历;如否,重复步骤 3.2) -3.6),得到词集合 E (D) = [e1; e2,..., em], m ^ η ;
[0102]步骤4),将消歧后的词映射到维基百科中相应的类别节点上,构造类别子树,如图5所示,包括如下步骤:
[0103]4.1)对步骤3)得到的词集合E(D) = Iie1, e2,...,em],m彡η的每一个词,在词语义本体中找到词所对应的类别ID,此为第一层类别集合,标记为Cat1⑶,再从Cat1⑶里所有类别成员的页面中找到分别所属的类别ID,此为第二层类别集合,标记为Cat2 (D),依次类推;设定类别子树最大层数为L,从而根据给定的层次深度L,不断延伸类别层次至高层;
[0104]4.2)对于每一个层次类别ID,在语义本体里找到对应本体名称,过滤掉表示年份的数字、后缀含有如“分类”、“名词”等不适合作为用户标签的词;
[0105]4.3)过滤后的每个类别名称加到对应的Cat1(D),并在语义本体中找到高一层的类别ID ;
[0106]4.4)若层次深度没有达到要求L,则转4.2),直到满足深度要求;
[0107]4.5)判断词集合E (D) = Le1, e2,..., em],m彡η中的所有词是否处理完毕,如否,则执行步骤4.1) -4.4),从而构造类别子树,各层次类别集为Cat1 (D),Cat2 (D),...,CatL (D)。
[0108]步骤5),针对用户微博内容收集用户标签,如图6所示,对于一条微博D,步骤包括:
[0109]5.1)针对步骤4)得到的各层次类别集Cat1⑶,Cat2 (D),...,CatjD),输入层次类别权重系数b (b>l),创建标签词典T,键为词语,值为权重,初始值为空;
[0110]5.2)遍历步骤3)得到的词集合E(D),对于e e E (D),如果以e为名称的标签不存在于标签词典T中,则将e作为键存入标签词典T,初始值为1,即T[e] = 1,否则T[e]=T[e]+1 ;
[0111]5.3)初始化当前所在的类别层1 = 1;
[0112]5.4)遍历各层次类别集Cat1 (D),对于类别c e Cat1 (D),如果以类别c为名称的标签不存在于标签词典T里,则加入标签字典T,权重初始值为T [c] = 1/b1 (b>l),否则修改原有权重值,T[c] = T[c]+l/b1;
[0113]在这里,权重的累加值1/b1与类别子树的层次呈反比关系,也就是说,把较大的权重给子树的根部(代表比较具体的类别),把较小的权重给子树的叶子(代表比较宽泛的类别);
[0114]在维基百科中各条目分支结构是不完全相同的,同一个类别名称c可能出现在一棵子树的不同层次,所以某个类别名称c的标签的最终排名依赖于该类别在各个层次出现的加权总和;假设类别权重系数b = 2,如某个类别名称c在第二层出现4次,在第三层出现5次,那么它的权重是:
[0115]2X (1/b4) +3X (1/b5) = 2X (1/24) +3X (1/25) = 0.125+0.09375 = 0.21875 ;
[0116]5.5)如果1〈L(L为类别子树的最大层数),那么令I = 1+1,转至步骤5.4),若达到类别子树的最大深度L,则结束;经过上述步骤,输出的标签词典T即为通过一条微博发现的用户标签及其权重;
[0117]5.6)将标签词典T作为用户下一条微博的初始值,重复步骤2)-5)操作进行标签收集,直到最终为用户的所有微博都进行了标签收集。
[0118]步骤6)采用投票策略,最终生成用户标签:
[0119]所谓投票策略,类似于投票选举,得票多的胜出。这里是标签权重高的排在前面,实际上就是对标签按照权重进行排序处理。
[0120]6.1)在确定最终的用户标签时,要注意以下两种情况:一是人物角色,如“洪七公”,不适合作为标签,倾向于采用它们的上一层“射雕英雄传角色”;二是类别非常相关的词,如“线性表”和“二叉树”,针对这种情况,应该选择它们的上一层“数据结构”作为标签;
[0121]6.2)取标签词典T中值排名前2N(本实施例N取值10)位的标签进行处理,删除人物角色并对相关类别的标签进行合并处理;
[0122]6.3)最后,取标签词典T中前10个标签作为微博用户的标签。
[0123]以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
【主权项】
1.一种基于双聚类的微
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1