@SuppressWarnings("unchecked")
	public void generarFeatures() throws ArchivosInconsistentesGeneradorFeaturesException{
		ArrayList<PosibleAsociacion> resultadoAsociaciones=new ArrayList<PosibleAsociacion>();
		
		//entre eventos
		ArrayList<MakeInstance> listaEventosMK=new ArrayList<MakeInstance>(archivoTimeML.getMakeinstanceTabla().values());
		
		for(int i=0;i<listaEventosMK.size();i++){
			for(int j=i+1;j<listaEventosMK.size();j++){
				resultadoAsociaciones.add(new PosibleAsociacion(listaEventosMK.get(i), listaEventosMK.get(j)));
			}
		}
		
		//con los timex
		ArrayList<Timex3> listatimex3=new ArrayList<Timex3>(this.archivoTimeML.getTimex3Tabla().values());
		for(int i=0;i<listaEventosMK.size();i++){
			for(int j=0;j<listatimex3.size();j++){
				resultadoAsociaciones.add(new PosibleAsociacion(listaEventosMK.get(i), listatimex3.get(j)));
			}
		}
		
		//entre timex
		for(int i=0;i<listatimex3.size();i++){
			for(int j=i+1;j<listatimex3.size();j++){
				resultadoAsociaciones.add(new PosibleAsociacion(listatimex3.get(i), listatimex3.get(j)));
			}
		}
		
		resultadoAsociaciones=(ArrayList<PosibleAsociacion>) CollectionUtils.select(resultadoAsociaciones, new Predicate() {
			
			@Override
			public boolean evaluate(Object arg0) {
				PosibleAsociacion asociacion=(PosibleAsociacion) arg0;
				int dist=distanciaOraciones(asociacion);
				return (dist<=2)&&(dist>=0);
			}
		});
		
		Iterator<PosibleAsociacion> iteradorAsociaciones=resultadoAsociaciones.iterator();
		int links=0,nolinks=0;
		HashSet<Link> listaLinks = new HashSet<Link>();
		while(iteradorAsociaciones.hasNext()){
			PosibleAsociacion asociacion=iteradorAsociaciones.next();
			Link unLink=this.archivoTimeML.obtenerLink(asociacion);
			if(unLink!=null){
				links++;
				listaLinks.add(unLink);
				guardarFeature(asociacion,"Id",unLink.getLid());
				guardarFeature(asociacion,"Clase","LINK");
				guardarFeature(asociacion,"Distancia_oraciones", this.distanciaOraciones(asociacion).toString());
				guardarFeature(asociacion,"Tipo",unLink.obtenerTipoDeLink().name());
//				System.out.println("LINK: Id="+unLink.getLid()+" - - "+asociacion.getreferenciablePorLinkA().toString()+" - - "+asociacion.getreferenciablePorLinkB().toString()+" "+asociacion.getDistanciaEntreReferencias()+" -- "+this.distanciaOraciones(asociacion)+" - Tipo: "+unLink.obtenerTipoDeLink().name());
				featuresPosibleAsociacion(asociacion);
//				if(unLink.obtenerTipoDeLink().equals(LinkType.TLINK)){
//					featuresTLink((TLink)unLink);
//				}
//				
//				if(unLink.obtenerTipoDeLink().equals(LinkType.SLINK)){
//					featuresSLink((SLink)unLink);
//				}
//				
//				if(unLink.obtenerTipoDeLink().equals(LinkType.ALINK)){
//					featuresALink((ALink)unLink);
//				}
			}else{
				nolinks++;
				guardarFeature(asociacion,"Clase","NO_LINK");
				guardarFeature(asociacion,"Distancia_oraciones", this.distanciaOraciones(asociacion).toString());
				featuresPosibleAsociacion(asociacion);
//				System.out.println("NO_LINK: "+asociacion.getreferenciablePorLinkA().toString()+" - - "+asociacion.getreferenciablePorLinkB().toString()+" "+asociacion.getDistanciaEntreReferencias());
			}
		}
		System.out.println("Nolinks: "+nolinks+" link: "+links);
//		Iterator<Link> it = listaLinks.iterator();
//		while(it.hasNext())System.out.println(it.next().getLid());
		
	}