采用基于Java的开源搜索结果聚合引擎,Carrot2 2.0 中的后缀树算法
Carrot2 可以自动的把搜索结果归类到相应的语义类别中,这个功能是通过Carrot2一个现成的组件完成的,除此之外Carrot2 还包括了很多其他的搜索结果聚合聚类算法。
因为没有做中文分词,也没有中文的Stopword,所以我们用英文测试,实现代码
1SnippetTokenizer snippetTokenizer = new SnippetTokenizer();
2 List<DocReference> documentReferences = new ArrayList<DocReference>();
3 List<TokenizedDocument> documents = new ArrayList<TokenizedDocument>();
4 TokenizedDocument doc = null;
5 DocReference documentReference = null;
6
7 //从搜索引擎google获取100篇数据
8 {
9 String url = "http://www.google.com/search?as_q=phone&num=100&hl=en&newwindow=1&btnG=Google+Search&as_epq=&as_oq=&as_eq=&lr=&as_ft=i&as_filetype=&as_qdr=all&as_nlo=&as_nhi=&as_occt=any&as_dt=i&as_sitesearch=&as_rights=&safe=images";
10 byte[] pageHtml = HttpUtil.getPage(url);
11 if(pageHtml == null ) return ;
12 try {
13 String strHtml = new String(pageHtml, "utf-8");
14 String[][] result = StringUtil.splitByReg(strHtml,"<td class=j>(.*?)<br>");
15
16 if(result != null)
17 { for(int i=0;i<result.length;i++)
18 {
19 for(int j=0;j<result[i].length;j++)
20 {
21 doc = snippetTokenizer
22 .tokenize(new RawDocumentSnippet(i+"sen"+j,result[i][j].replaceAll("<[^<>]+>",""), "en"));
23 documentReference = new DocReference(doc);
24 documentReferences.add(documentReference);
25 documents.add(doc);
26 }
27 }
28 }
29 } catch (UnsupportedEncodingException e) {
30 e.printStackTrace();
31 }
32 }
33
34
35 //构建后缀树
36 final STCEngine stcEngine = new STCEngine(documentReferences);
37 stcEngine.createSuffixTree();
38 HashMap<String,String> defaults = new HashMap<String,String>();
39 defaults.put("lsi.threshold.clusterAssignment", "0.150");
40 defaults.put("lsi.threshold.candidateCluster", "0.775");
41 final StcParameters params = StcParameters.fromMap(defaults);
42 stcEngine.createBaseClusters(params);
43 stcEngine.createMergedClusters(params);
44
45 final List clusters = stcEngine.getClusters();
46 int max = params.getMaxClusters();
47
48 // Convert STC's clusters to the format required by local interfaces.
49 final List rawClusters = new ArrayList();
50 for (Iterator i = clusters.iterator(); i.hasNext() && (max > 0); max--)
51 {
52 final MergedCluster b = (MergedCluster) i.next();
53 final RawClusterBase rawCluster = new RawClusterBase();
54
55 int maxPhr = 3; // TODO: This should be a configuration parameter moved to STCEngine perhaps.
56 final List phrases = b.getDescriptionPhrases();
57 for (Iterator j = phrases.iterator(); j.hasNext() && (maxPhr > 0); maxPhr--)
58 {
59 Phrase p = (Phrase) j.next();
60 rawCluster.addLabel(p.userFriendlyTerms().trim());
61 }
62
63 for (Iterator j = b.getDocuments().iterator(); j.hasNext();)
64 {
65 final int docIndex = ((Integer) j.next()).intValue();
66 final TokenizedDocument tokenizedDoc = (TokenizedDocument) documents.get(docIndex);
67 final RawDocument rawDoc = (RawDocument) tokenizedDoc.getProperty(TokenizedDocument.PROPERTY_RAW_DOCUMENT);
68 rawCluster.addDocument(rawDoc);
69 }
70
71 rawClusters.add(rawCluster);
72 }
73
74 //得到结果,输出
75 for (Iterator iter = rawClusters.iterator(); iter.hasNext();)
76 {
77 RawCluster cluster = (RawCluster) iter.next();
78 final List phrases = cluster.getClusterDescription();
79 for(int i=0;i<phrases.size();i++)
80 System.out.print("#"+phrases.get(i));
81 System.out.println();
82
83 }
下面是输出聚类phone的结果,还不错
#phone
#Phone Number
#yellow pages
#mobile phone
#cell phone
#Phone Book
#area code
#Business
#services
#Wireless
#people
#directory
#telephone
#address
#online
分享到:
相关推荐
一种用于求解振动问题非线性微分方程的计算方法。一般来说,求解振动问题微分方程的计算方法主要有:时域法、频域法和时频变换方法
计算机研究 -基于后缀树聚类和期望最大化求精的模体发现算法.pdf
然后,把后缀树模型的节点映射到M维向量空间模型中的特征项,利用TF-IDF方案计算基于短语的文档向量特征值。最后,使用K-means算法产生聚类结果。实验结果表明该方法优于传统K-means聚类算法和后缀树聚类算法,并...
这是介绍一种对于字符串匹配的算法!!!非常实用!!
针对后缀树聚类选取基类时,基类短语出现信息不规范、重复和冗余的问题,提出了一种改进后缀树聚类算法。该算法首先以短语互信息算法改进基类的选取,选出遵守维吾尔语语法规则的基类短语;然后,利用短语归并算法对...
各种聚类程序,包括生成聚类树、k-means,模糊k-means等,中文注解
利用C++实现CLIQUE聚类算法源码
无监督决策树聚类方法的研究,决策树是一种有监督的归纳学习算法,它用于对有类标的数据集进行分类,而聚类 是一种无监督的学习算法,它可以对无类标的数据集进行分组
计算机研究 -后缀树及其在中文文本聚类中的应用探索.pdf
为了均衡分簇无线传感器网络节点能量负载,提高网络的能量利用效率,提出了一种粒子寻优和最小生成树聚类规则的能量优化算法(OMST)。该算法为了使得簇头的能量负载能够得到均衡,采用基于粒子寻优的方法来进行适应...
该方法采用雅可比系数修改了STC算法中基本类相似度的计算方法,然后根据基本类相似度矩阵,利用变色龙算法完成网页聚类。实验结果表明:STCC算法与STC算法相比,聚类精度提高将近10%,避免了单链接算法的链式效应,...
论文研究-土地利用现状的灰色聚类分析研究.pdf,
【摘要】:随着网格技术和数据挖掘技术的成熟,基于网格的数据挖掘应用越来越广泛。简要的介绍网格和数据挖掘的基础知识,并结合局域网中个人计算机的特点,分析由个人计算机组建的网格环境下的数据挖掘过程,并给出了...
为利用开放分类进行百科条目的分类和检索, 提出了基于词共现和语义分析的开放分类聚类算法以及开放分类层次结构树构建方法; 为了进一步提高层次结构树的聚合度, 提出了基于相似度和相关度计算的层次结构树聚类算法。...
利用Matlab软件实现聚类分析
数据挖掘实验报告-决策树和聚类分析.doc
利用后缀树聚类算法STC和奇异值分解SVD对地区微博进行聚类;结合地区微博特征对其综合打分,选取有代表性的微博句子生成摘要。实验验证了该方法的可行性,表明所提出的方法能够很好地识别出当地事件并生成可读性高的...