用于网页判断的智能代理技术的简单实现------------基于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
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
相关文章推荐
- python 基于XML生成静态网页的简单实现
- 基于PYTHON requests包,代理ip+header+延时爬取的简单实现
- python中的 \r以及基于此实现简单的倒计时小程序
- Ajax与Python服务器交互,在网页实现简单的Python3代码的运行
- 代理信息[Python] 实现网络爬虫
- 如何简单实现接口自动化测试(基于 python)
- 分布式Web应用----基于Socket+动态代理实现简单RPC 生产者消费者模型
- Python基于twisted实现简单的web服务器
- Python基于twisted实现简单的web服务器
- 简单爬虫python实现01——获取网页源码与存储
- 简单实现接口自动化测试(基于python+unittest)
- python判断字符串编码的简单实现方法(使用chardet)
- PHP实现依赖注入-使用反射机制和动态代理技术 - 简单思想(咋个办呢 zgbn)
- Python 中利用urllib2简单实现网页抓取
- 基于Python的网页文档处理脚本实现
- Python简单实现基于VSM的余弦相似度计算
- python基于Tkinter库实现简单文本编辑器实例
- [python] 基于k-means和tfidf的文本聚类代码简单实现
- python基于mysql实现的简单队列以及跨进程锁
- 基于mvc三层架构和ajax技术实现最简单的文件上传