基于领域知识库的信息推荐系统-智能文本篇章分析(编辑修改稿)内容摘要:

{ foreach (string a1 in Class)//遍历 所有关键词 { p = 1。 if (a1 != 顶层关键词编号 ) { child = a1。 Temp_child =a1。 do{ 以 Temp_child为孩子节点查找公共知识库中它的父节点; p = p * 上条关键词之间的 p值 Temp_child = Temp_father。 }while(father!=顶层关键词编号 amp。 amp。 father不包含在个人关键词中 )。 InsertPersonalWord_Relation(father,child,p)。 //插入新的词条之间的关系 } } } father child p 11 此算法能够很好地建立用户个人每个词之间的包含关系, 用户个人知识点之间的包含关系虽然是动态生成的,但其依然是基于静态的公共知识库知识点之间的关系生成的。 在此,我们默认公共知识库是具有专家级别的涉及所有知识点的根本来源,它收集包含了目前所有词能产生的包含相似关系。 12 第 四 章 智能 文本篇章 分析和信息推荐 领域知识库 本系统所涉及体育、读书、游戏、娱乐和汽车五个基本领域。 领域知识库的建立是一项非常重要而艰巨的任务,我们需要把所有现实世界中隶属于上述领域的事物具体化为一个词条 , 由于每个领域包罗万象,因此 工作量相当大,对建立者的 知识面 也有 非常高的要求,而且建立的结果难免有些疏漏,需要长时间地更新维护,最终走向全面化。 系统领域知识库的建立方案在江伟华同学的毕业论文中有详细的介绍,此处只作简要公共知识库和个人知识库的一些实例,方便本文论述的需要。 公共知识库 实例 本文 简单地 以体 育领域 作为研究对象,并列举出如图 41所示的 树形 结构层次关系,其中箭头的方向表示主概念包含子概念, 箭头上的数值表示人为设定的词条之间具体的包含度,椭圆框图表示该词没有子概念。 图 41 公共知识库实例 体育 篮球 网球 NBA专题 中国足球 德甲 足球 CBA专题 国际足球 法甲 西甲 意甲 英超 巴塞罗那 梅西 13 个人知识库 实例 正 如第三 章 中讲,公共知识库是静态的,个人知识库是动态的,个人知识库是建立在公共知识库之上的。 形象地说, 个人知识库可以看 成 公共知识库树形结构中抽取出来的一棵 子树。 在此,如图 42 所示,列举一个简单地用户知识库实例。 图 42 个人知识库实例 将图 42与图 41作比较,我们可以看出用户知识库 是公共知识库的一棵子树。 而且个人知识库中体育和 NBA 专题产生了直接的联系,其关系值的计算方法为:*=。 同理,国际足球和梅西产生直接关系值得计算方法为: **=。 这就是第三章 节 用户兴趣知识库的建立及算法实现的核心思路。 自动搜索关键词提取有效网页地址算法 自动搜索关键词 产生推荐信息要 解决的首要问题就是 如何从搜索引擎提供的搜索结果中提取有效的网页链接。 常规的思路是 首先获取 搜索结果页面的网页 源文件即 HTML代码, 然后对一些无效的网页标签,如 head、 div、 link、 script、 table等,最后提取出 herf=” ******” 格式的网页地址。 该方法虽然简单易行,但是提取出来的效果很不好,得到的网页地址比较粗糙,无法识别那些图片、论坛、视频等网页的地址特征。 在此, 本系统的 后 台分析程序采 用的方法是 正则表达式匹配算法。 体育 NBA专题 网球 足球 国际足球 英超 梅西 14 正则表达式 的概念 正则表 达式 [3]是 对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个 “规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1) 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 2) 可以通过正则表达式,从字符串中获取我们想要的特定部分。 正则表达式的特点是: 1) 灵活性、逻辑性和功能性非常的强; 2) 可以迅速地用极简单的方式达到字符串的复杂控制; 3) 对于刚接触的人来说,比较晦涩难懂。 提取有效网页地址算法 后 台分析程序获取网页 HTML 源文件后,通过给定的正则表达式来匹配 获取有效网页地址的算法 [7]如算法 41 所示: 算法 41 提取有效网页地址算法 string htmlCode。 //搜索结果的网页 HTML代码 ArrayList arrayList。 //存放有效的网页地址的动态数组 String strRegex = @ ./?%amp。 =]*)?。 //匹配有效网页地址特征的正则表达式 Regex regex = new Regex(strRegex, )。 MatchCollection matchCollection = (htmlCode)。 for (int i = 0。 i = 1。 i++) { bool rep = false。 string strNew = matchCollection[i].ToString()。 foreach (string str in arrayList) { if (strNew == str) { rep = true。 break。 } } if (!rep amp。 amp。 strNew != amp。 amp。 strNew != 15 { if ((.htm) || (.html) || (.shtml)) (strNew)。 } } return arrayList。 网页文本提取 思路及 算法 网页文本 提取 的主要 思路: 后 台分析程序 自动 访问 上一节中提取出来的 有效的 网页地址 , 抓取 网页 HTML 源码,这里要实现自动判断网页编码 的问题 ,否则有可能 发生乱码 现象。 一般 应答的 头的 charset 都有声明网页的编码 , 常见的编码有“ GB2312”、“ GBK”、“ UTF8”和“ ISO88591”,为方便处理和存储,本系统将编码统一转为“ GB2312”。 但 由于 Inter 上的网页数以亿记,网页的格式未严格达到统一的标准,比如有些 应答的头里的 charset 和网页的 meta 里声明的 charset 就 不一致, 这就导致 程序无法识别而产生乱码现象。 由于此类 不符合标准的网也 只占少数,故处理过程中会当作无意义的网页而剔除掉。 编码问题解决后, 首先,从 HTML 文件中提取文章的标题,此处利用正则表达 式41[8]实现精确匹配。 strReg = @title(?title[^]*)/title (式 41) 文章标题提取完后, 把网页分割成几大块 ,取出 网页里的 div 块, td 块文字块儿 ,对取出 的文字块 排序之前把超链接文字数量和汉字数量比例超过百分之 50 的 div 去掉,因为这些都是相关链接或者文字广告 , 再 把汉字少于 200 的文本块去除 , 因为 一般少于200 字的文本块不会是正文, 而且 即便是正文,一般来说也不会有太多的价值。 由于 div支持嵌套,所以剩下的文本块,有可能是重复的,一个是另一个的父节点,所以要把最里层的文本块找出来,最里层的文本块是汉字最多的,而其它 文本较 少的,所以要计算出剩余文 本块中汉字占所有字符比例最高的文本块,基本上它就是正文的文本块。 当然有的网页正文里也可能还有 div 的文本块,这时候可能会判断错误,但只要正文嵌套的 16 div 文本块的汉字少于 200 字, 本系统 的 算法还是能准确提取正文文本块的。 紧接着是细节问题的处理, 把 pbr等标签替换成特殊占位符 [p][br]等,因为最终的正文需要保留段落和回车换行等格式, 这一步用正则 表达式 实现。 把最后剩下的文本块的 html 标签去掉, 用正则 表达式 过 滤 [9]。 至 此,正文提取完毕。 具体的实现算法见算法 42: 算法 42 网页文本提取 string input。 //网页 HTML源文件 string reg1 = @(p|br)[^]*。 string reg2 = @(\[([^=]*)(=[^\]]*)?\][\s\S]*?\[/\1\])|(?lj(?=[^\u4E00\u9FA5\uFE30\uFFA0,.)。 ])a\s+[^]*[^]{2,}/a(?=[^\u4E00\u9FA5\uFE30\uFFA0,.)。 ]))|(?Stylestyle[\s\S]+?/style)|(?selectselect[\s\S]+?/select)|(?Scriptscript[\s\S]*?/script)|(?Explein\!\\[\s\S]*?\\)|(?lili(\s+[^]+)?[\s\S]*?/li)|(?Html/?\s*[^ ]+(\s*[^=]+?=[39。 ]?[^39。 ]+?[39。 ]?)*?[^\[]*)|(?Otheramp。 [azAZ]+。 )|(?Other2\[az09]{6})|(?Space\s+)|(\amp。 \\d+\。 )。 //获取网页的所有 div标签 Liststring list = GetTags(input, div)。 //去除汉字少于 200字的 div Liststring needToRemove = new Liststring()。 foreach (string s in list) { Regex r = new Regex([\u4e00\u9fa5])。 if ((s).Count 200) { (s)。 } } foreach (string s in needToRemove) { (s)。 } //把剩下的 div按汉字比例多少倒序排列 , (CompareDinosByChineseLength)。 if ( 1) {return。 } input = list[ 1]。 //把 p和 br替换成特殊的占位符 [p][br] input = new Regex(reg1, | ).Replace(input, [$1])。 //去掉 HTML标签,保留汉字 input = new Regex(reg2, | ).Replace(input, )。 //把特殊占维护替换成回车和换行 17 input = new Regex(\\[p], | ).Replace(input, \r\n )。 input = new Regex(\\[br], | ).Replace(input, \r\n)。 return input。 文章 自动 分词 技术。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。