毕设准备——数据预处理<二>

来源:互联网 发布: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进行匹配来判断用户访问的是哪类网站的实现。。有没有人有更好的实现方法。。求推荐。