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

在数据处理的过程中,需要用到根据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();   //去掉学号的所有的url
			String 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();   //去掉学号的所有的url
			String 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值