您的位置:首页 > 理论基础 > 计算机网络

用于网页判断的智能代理技术的简单实现------------基于python实现(网络爬虫)

2009-11-19 14:04 816 查看
首先说一下什么叫智能代理技术,智能代理技术是一种通过内建的知识库和感知到的信息来采取行动。一个好的智能代理系统,应当有学习的能力,通过感知到的知识不断学习,从而适应环境的不断变化情况。为了简化问题的复杂性,只使用内建知识库来判断所要处理的网站是否是需要的那种类型的网站。而我们通过什么方式来表现知识库的形式呢?根据那篇论文,我们可以用文本向量的模式来表示,那什么叫文本向量呢?文本向量就是由特定的关键字的个数组成的一个向量,例如:a={x1,x2,x3,x4},这个向量中,x1,x2,x3,x4表示的是这4个关键字在一个特定文本中出现的次数,取值范围可以是:(0,n)。既然已经知道了表示模式,那用什么来表示两个向量之间的契合程度呢?在那篇论文中,提到了用以下公式进行:
Sim=AB/|A||B|

设定Sim的值,我们可以设定A,B向量契合程度。可称Sim为阀值。我们可以假设B为中心向量,A是要匹配的目标向量。如何设定中心向量呢?中心向量的设定非常重要,因为它可以反映我们要查找目标网站的类型信息。我们可以通过经验来设定,比如测试之类的。当然目标向量也很重要,不过是基于中心向量存在的关键字本身来进行设定的,这里我们假设中心向量有10个关键字。为了提高我们的搜索速度,我们可以通过获取title,meta标签里面的文本来进行文本向量的建立。所以,我们要将中心向量的关键字放进缓冲区里面,可以放在一个字典里面用TextKey来表示,并初始化为:TextKey={}。如何提取title,meta里面的文本呢?可以用正则表达式,具体代码如下:

def GetTextKey(url,TextKey):

h=urllib2.urlopen(url)

html=h.read()

result={} #最后生成的目标向量

titletext=re.findall(r'<title>[^</]*',html,re.I) #提取title之间的内容

metatext=name=re.findall(r'<meta[^/>]*',html,re.I) #提取meta之间的内容

for words in TextKey:

index=titletext.find(words)

if not index==-1:

if result.has_key(words)==false:

result.setdefault(words,1)

else:

num=result[words]

result.setdefault(words,num+1)

for listwords in metatext:

index= listwords.find(words)

if not index==-1:

if result.has_key(words)==false:

result.setdefault(words,1)

else:

num=result[words]

result.setdefault(words,num+1)

num1=TextKey.values()

num2=result.values()

sum=0

sum1=0

sum2=0

for i in range(0,9):

num=num1[i]*num2[i]

sum+=num

for i in range(0,9):

num=num1[i]*num1[i]

sum1+=num

sum1=sum1**0.5 #对sum1进行开方

for i in range(0,9):

num=num2[i]*num2[i]

sum2+=num

sum2=sum2**0.5 #对sum2进行开方

sum=sum/(sum1*sum2) #求出最后的契合度

return sum
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: