2006年12月23日土曜日

网页评估算法

面向主题的爬虫设计,很重要的一步就是评估算法. 对于给定的关键字集合及其权重,考虑某个网页的相关度可以使用向量空间模型来分析。

关键字权值的集合,我们用向量a来表示,其中 a=(a1,a2,...an) n为关键字个数

对于每个关键字,统计其在一个网页中出现的次数,向量x=(x1,x2,...,xn)来代表频率比,如果关键字i出现的次数最高,则将起频率比xi设为1,对于其它的关键字j,j不等于i,其频率比为关键字j出现的次数/关键字i出现的个数。构造向量b=(a1*x1,a2*x2,..., an*xn),在计算它们的余弦值p,这个余弦值便是网页的相关度。

仅仅考虑网页相关度是不严谨的,比如说一个你想查询“电脑销售”,而电脑销售的权威网页不一定有这个词,比如 联想。方正,如果仅仅考虑关键字出现的次数,这样的权威网页很可能被舍弃。这样,可以引入网页的pagerank值,使最终网页评估值为 p=w1*p+w2*pr,pr为这个网页的pagerank值,w1+w2=1;

中文分词 使用的是中科院免费的分词工具,实现语言java

自己写一个中文分词类class ChineseAnalyzer extends Analyzer{
private Set stopwords;

ChineseAnalyzer(){
this.stopwords=StopFilter.makeStopSet(StopAnalyzer.ENGLISH_STOP_WORDS);
}
ChineseAnalyzer(String[] stopword){
this.stopwords=StopFilter.makeStopSet(stopword);
}
public TokenStream tokenStream(String fieldName, Reader reader){
TokenStream result=null;
char[] temp =new char[50];/
ICTCLAS splitword=new ICTCLAS();
try{
reader.read(temp);
String resultString=splitword.paragraphProcess(new String(temp));
result=new WhitespaceTokenizer(new StringReader(resultString));
result=new LowerCaseFilter(result);//小写化
result=new StopFilter(result,this.stopwords);//去掉stopword
result=new PorterStemFilter(result);//去掉后缀
}
catch(IOException e){
e.printStackTrace();
}
return result;
}

}

0 件のコメント: