摘要:
工作以来,一直做数据挖掘。刚开始的时候,为政府网站抓取其他网站的正文内容做统计分析,到现在的公司,做海量数据相似度分析。刚开始时,仅仅基于Dom树做分析,然后找出那些最可能是正文的内容,但是这样做,仅能针对的网站数量很少,对于严重不符合规范的网站,抓取准确率很低。这次,借着做毕业设计之际,有充足的时间做深入的学习。先是看了《基于DBScan算法的网页正文提取》,开始对正文提取的手段有了改观。1.DBScan(fordensity-based spatial clustering of applications with noise),我觉得维基百科中对它的描述很准确,很详尽:DBSCAN 阅读全文
摘要:
上一篇博文大概是一年多前写的了,时间眨眼间就过了,而这一年多对我来说,很难熬!一年半前,头脑发热,成立 广州多聚信息科技有限公司,满腔热血,信心满满。然而,风口浪尖上的猪,表面风光,实则顶着巨大无比的压力!团队从两三个人到如今二十多口人,每个月发粮前,都掰着手指头过日子,低下的兄弟姐妹跟着我们吃饭啊... 阅读全文
摘要:
由于最近换了工作,需要熟悉新的工作环境,工作内容也比较多,所以一直没有更新文章,趁着今晚有空,就继续写写这系列的文章。前面两篇,我们已经实现了后缀数组的排序,高频字串的抽取,也初有成效,如下图:接下来,我们就继续对结果进行进一步的精确化,使用子串归并来实现:首先,我先举一个可能不大适合的例子来大概解释一下什么叫做子串归并。假设,某个语料库中,统计到“你”出现了100次,而“你好”也刚好出现了100次,那么,我们舍弃“你”这个结果,保留“你好”;我们为什么这样做呢?从这个简单的例子可以看出,出现“你”子的时候,一定会出现“你好”,那么根据成词的规则,我们保存长的子串(一般来说,子串选取长度在[2 阅读全文
摘要:
接着上文【基于统计的无词典的高频词抽取(一)——后缀数组字典序排序】,本文主要讲解高频子串抽取部分。如果看过上一篇文章的朋友都知道,我们通过 快排 或 基数排序算出了存储后缀数组字典序的PAT数组,以及PAT数组内,每每两个子串的最大公共前缀数组LCP。我们可以通过LCP来计算出一个字符串在语料库中出现的次数。那怎么计算呢?我们先看看下面一个简单的例子:【例】我们还是以上一篇文章中的字符串“abcba”为例,经过对后缀数组字典序排序(过程参照前一篇),可以得到以下的结果:由上图中的PAT和LCP两个数组我们可以知道:“a”的频率为2,“b”的频率为2。计算方式其实很简单,从左扫描LCP数组,如 阅读全文
摘要:
中文全文检索中很重要的一个环节就是分词,而一般分词都是基于字典的,特别是对于特定的业务,需要从特定的语料库中抽出高频有意义的词来生成字典。这系列文章,就一步一步来实现一个从大规模语料库正抽取出高频词的程序。抽词的过程如下图:本文先讲解“子串字典序排序”部分,也就是字典序排序部分。本文使用两种算法:快排 和 基数排序,两种算法各有应用场景,快排在分析长度20万字符串时所用的时间明显低于基数排序,但是,超过时,基数排序明显有优势;本文仅仅对于实现的算法做简单分析和实现,真正生成环境中,将引入多线程,分布式处理等优化手段,这里不提及。这里,我要先用通俗一些的话语来解释一些概念,有不正确的地方,欢迎指 阅读全文
摘要:
【园里很多前辈写过关于Levenshtein Distance算法的文章,对算法原理有很深入的剖析讲解。我这里班门弄斧,尽我所能,将这个算法以更加通俗易懂的语言来阐述,有何纰漏,请指出和见谅】Levenshtein Distance,编辑距离算法,是指从字符串A变成字符串B,所需的最少编辑(增,删,插入)次数。应用也相当广泛,这里我们用来求解两个字符串的相似度。算法原理我就不再说明(注,对于算法原理,请参照 http://en.wikipedia.org/wiki/Levenshtein_distance),这里只图解实现的过程。【例子】假设现在有源串“jary”与目标串“jerry”,求源串 阅读全文
摘要:
有时,简单的算法也有其实用的意义,由于之前公司内部搜索引擎优化的需要,我根据《编程珠玑》中查找英文单词变位词的算法,来实现搜索纠错的功能。在搜索时,有时记不住单词,会出现拼写错误的情况,例如,搜索“height”时手误,搜索了“heigth”,那么我们要在搜索不到的情况下,给他变位词作为提示(注:因为公司内部搜索,该算法已经够用,真正的搜索引擎应该是采用更高效的算法,请有经验的前辈赐教)。算法分三步:①对单词签名; ②根据签名的字典序排序; ③根据排序结果挤压,使变位词聚合在一起;a) 快速单词签名算法(当前仅使用于英文单词,如果包含其他字符,需做拓展):鉴于英文字母可枚举且数量只有26个,故 阅读全文
摘要:
在平常项目中,偶尔也会涉及一些前端的设计,但毕竟不是专业的,所以一直想要系统的学习一下。最近辞职了,等待入职新公司的期间,有空折腾学习一些CSS3的知识。今天就从一个简单的圆形菜单的实现,来总结一些最近学习的收获。效果图如下:下面,就来看看这个圆形半透明的菜单如何实现:1. 我们使用一个 ul 来制作菜单,代码如下: 1 <ul> 2 <li> 3 <a href="#"> 4 <span>首页</span> 5 </a> 6 </li> 7 <li> 8 <a href= 阅读全文
摘要:
虽然,HTML5出来好久了,但是,直到最近才开始学习。我就把最近的一些学习心得,通过这篇文章分享一下。这个小例子使用Singalr作为底层通信的基础,与服务器进行交互。画板则使用Html5的canvas来实现。这一部分就先讲前端的部分。1. 新建一个Javascript文件,这里叫做jDraw.jsjDraw.js 1 (function ($) { 2 var methods = {}; 3 $.fn.jDraw = function (method) { 4 if (methods[method]) { 5 return method... 阅读全文
摘要:
Google Map是个好东西,它提供的Geocoder接口可以对地址进行反向解析,从而得到诸如 “经纬度”,“国家”, “省”,“市”,“区”,“路” 等等的信息。(如下图,我输入了“天河美好居”,就可以反向解析到我的具体位置)下面就班门弄斧的讲述一下:1. 引入所需的JS:<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script><script type="text/jav 阅读全文
摘要:
Jelly Bean上整合全新语音搜索 Google Now 的体验让人迫不及待的想尝试一下,但是 Jelly Bean 的正式发布还有一段时间。不过已有开发者将Jelly Bean 中的 Google Now移植出来,并且让运行 ICS(Android 4.0)设备能够完美的运行。在6月28日举行的 Google I/O 2012大会上,Google 公布了新版 Android 操作系统Jelly Bean,其中最大的亮点就是推出了类似苹果 Siri 的语音服务Google Now,并将其与 Google 的“知识图谱”一道进行了整合,打造基于语音与地理位置的全新搜索体验。它可以实时显示需要 阅读全文