毕设准备——数据预处理<二>
来源:互联网 发布:avast 小红伞 知乎 编辑:程序博客网 时间:2024/05/22 07:54
在数据处理的过程中,需要用到根据URL前缀匹配类型的步骤,我首先从导航网站上把一些主流的网址全部爬取下来,首先是对于字典进行一个分类。在这里我做了一个链表,链表的每一个节点都是一个HashMap,是字典中的url前缀,以及该前缀所属的类标号。
接下来我把链表建立的主要代码整理一下:
首先节点类:Link_Node
public class Link_Node { protected Link_Node next; //指针域 protected HashMap<String,String> data;//数据域 public Link_Node(HashMap<String,String> data) { this. data = data; } public HashMap<String,String> getData() {return data;}public void setData(HashMap<String,String> data) {this.data = data;}//显示此节点 public void display() { System. out.print( data + " "); } }然后是链表的实现
public class LinkList { public Link_Node first; // 定义一个头结点 private int pos = 0;// 节点的位置 public LinkList() { this. first = null; } // 插入一个头节点 public void addFirstNode(HashMap<String,String> data) { Link_Node node = new Link_Node(data); node. next = first; first = node; } // 删除一个头结点,并返回头结点 public Link_Node deleteFirstNode() { Link_Node tempNode = first; first = tempNode. next; return tempNode; } // 在任意位置插入节点 在index的后面插入 public void add(int index,HashMap<String,String> data) { Link_Node node = new Link_Node(data); Link_Node current = first; Link_Node previous = first; while ( pos != index) { previous = current; current = current. next; pos++; } node. next = current; previous. next = node; pos = 0; } // 删除任意位置的节点 public Link_Node deleteByPos( int index) { Link_Node current = first; Link_Node previous = first; while ( pos != index) { pos++; previous = current; current = current. next; } if(current == first) { first = first. next; } else { pos = 0; previous. next = current. next; } return current; } // 显示出所有的节点信息 public void displayAllNodes() { Link_Node current = first; while (current != null) { current.display(); current = current. next; } System. out.println(); } // 根据位置查找节点信息 public Link_Node findByPos( int index) { Link_Node current = first; if ( pos != index) { current = current. next; pos++; } return current; } public static void main(String[] args) { LinkList linkList = new LinkList(); HashMap<String,String> a=new HashMap<String,String>(); HashMap<String,String> b=new HashMap<String,String>(); HashMap<String,String> c=new HashMap<String,String>(); a.put("a","1"); b.put("b","2"); c.put("c","2"); linkList.addFirstNode(a); System.out.println("按照位置寻找"); linkList.findByPos(0); //19,21,20 linkList.add(1, b); //19,22,21,20 linkList.displayAllNodes(); // Node node = linkList.deleteFirstNode(); // System.out.println("node : " + node.data); // linkList.displayAllNodes(); // node = linkList.deleteByPos(2); // System.out.println("node : " + node.data); // linkList.displayAllNodes(); // linkList.deleteFirstNode(); } }
3、构造字典的分类模型
import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Set;import tools.JavaReadExcel;/** * 功能:构建字典的分类模型 * @author ys * */public class dic_list {/** * 获取字典中所有URL的长度大于一段的集合 * @return */public HashMap<ArrayList<String>,String> dic_muil_listAll(){HashMap<ArrayList<String>,String> dic = new HashMap<ArrayList<String>,String>();//返回长度大于1 的网址HashMap<ArrayList<String>,String> dic1 = new HashMap<ArrayList<String>,String>();JavaReadExcel jre=new JavaReadExcel();dic = jre.readexcel();Set<ArrayList<String>> dicSet = dic.keySet();Iterator<ArrayList<String>> dicIter = dicSet.iterator();while(dicIter.hasNext()){//字典的总数ArrayList<String> dicTmp = dicIter.next(); //去掉学号的所有的urlString sort_type = dic.get(dicTmp); //把字典按照分段 分成几类 一类是全部都是第一段的集合 第二段的集合 第三段的集合if(dicTmp.size()>1){dic1.put(dicTmp,sort_type);}}return dic1;}/** * 返回多段中 第一段的集合,第二段的集合,第三段或者更多段的集合一共三个集合 在链表中 * @return */public LinkList dic_muil_list(){//构造url字典决策树的根节点HashMap<ArrayList<String>,String> dic = new HashMap<ArrayList<String>,String>();JavaReadExcel jre=new JavaReadExcel();dic = jre.readexcel();Set<ArrayList<String>> dicSet = dic.keySet();Iterator<ArrayList<String>> dicIter = dicSet.iterator();LinkList linkList1 = new LinkList(); HashMap<String,String> first=new HashMap<String,String>();HashMap<String,String> first_1=new HashMap<String,String>();HashMap<String,String> first_2=new HashMap<String,String>();while(dicIter.hasNext()){//字典的总数ArrayList<String> dicTmp = dicIter.next(); //去掉学号的所有的urlString sort_type = dic.get(dicTmp); //把字典按照分段 分成几类 一类是全部都是第一段的集合 第二段的集合 第三段的集合if(dicTmp.size()>1){if(!first.containsKey(dicTmp.get(0))){first.put(dicTmp.get(0),sort_type);}if(!first_1.containsKey(dicTmp.get(1))){first_1.put(dicTmp.get(1),sort_type);}if(dicTmp.size()>2){if(!first_1.containsKey(dicTmp.get(2))){first_2.put(dicTmp.get(2),sort_type);}}else if(dicTmp.size()>3){if(!first_1.containsKey(dicTmp.get(3))){first_2.put(dicTmp.get(3),sort_type);}} }}linkList1.addFirstNode(first);linkList1.add(1,first_1);linkList1.add(2,first_2);System.out.println("分段的");linkList1.displayAllNodes(); return linkList1; }/** * 返回只有一段的字典的集合 * @return */public LinkList dic_sigle_list(){//构造单段的字典的集合 HashMap<ArrayList<String>,String> dic = new HashMap<ArrayList<String>,String>();JavaReadExcel jre=new JavaReadExcel();dic = jre.readexcel();Set<ArrayList<String>> dicSet = dic.keySet();Iterator<ArrayList<String>> dicIter = dicSet.iterator(); LinkList linkList2 = new LinkList(); HashMap<String,String> second=new HashMap<String,String>();while(dicIter.hasNext()){ArrayList<String> dicTmp = dicIter.next();String sort_type = dic.get(dicTmp);if(dicTmp.size()==1){ second.put(dicTmp.get(0),sort_type);}}linkList2.addFirstNode(second);System.out.println("没有分段的");linkList2.displayAllNodes();return linkList2; }public static void main(String args[]){dic_list ut=new dic_list();System.out.println(ut.dic_muil_listAll());ut.dic_muil_list();ut.dic_sigle_list();}}
最后是匹配的算法实现。。。。现在貌似准确度还有点问题。。。等以后完善一下再整理吧。。。。。或者关于用户的url根据字典url进行匹配来判断用户访问的是哪类网站的实现。。有没有人有更好的实现方法。。求推荐。
阅读全文
0 0
- 毕设准备——数据预处理<二>
- 毕设准备——数据预处理<一>
- 毕设——准备阶段
- 毕设准备——算法总结<一>
- PyTorch学习系列(二)——数据预处理torchvision.transforms
- Sklearn学习(二)——数据预处理(Normalization)
- 为毕设理论准备
- SPSS——数据预处理
- 数据挖掘学习------------------1-数据准备-3-数据预处理
- 毕设第三步—基本数据模块分析
- R函数在数据预处理、数据准备过程中的使用
- osgEarth开发数据准备(二)——利用GIS数据制作一份可用的地形
- 机器学习笔记——Scikit-learn库中的数据预处理:独热编码(二)
- WEKA——数据准备
- Python数据挖掘入门与实践(二)——scikit-learn数据的预处理转换器以及流水线
- 分类算法之一——数据预处理
- 机器学习——数据预处理
- 统计分析——数据的预处理
- ****
- Xcode 9中模拟器的位置
- 实现一个函数,可以左旋字符串中的k个字符。
- java给出 汉子“你”“我”“他”在Unicode表中的位置;输出全部希腊字母;
- linux centos 编译luabind-0.9.1 动态库 静态库
- 毕设准备——数据预处理<二>
- Machine Learning学习笔记-第一周
- 关于onclick动态传参
- Number of letters
- code forces E. Danil and a Part-time Job
- Java并发编程札记-目录
- [leetcode] 654. Maximum Binary Tree
- 在RHEL6.7上开启大页内存
- alter database move datafile ...... keep