Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - r00t_access

#1
Hola,

hace poco descubrí la maravillosa biblioteca que tenemos y estoy interesado en descargar unos cuantos archivos, se podría hacer recursivamente de alguna forma?

Un saludo y gracias de antemano!
#2
Los dos links están caídos, se podrían volver a subir?

Un saludo!
#3
88  ;D
#4
Muy buenas,

descubrí hace poco el Google NGram Viewer y la verdad es que me pareció bastante curiosa la web. Pero me ha surgido una duda al respecto de la página:
Si yo quisiese por ejemplo crear un txt en el que vengan los títulos, autores, años de publicación y editorial de los libros que coincidan con nuestra búsqueda, como se podría hacer?

Por si alguien no conoce la página: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Gracias!
Un saludo :)
#5
Gracias por responder compañero. Pero podrías explicarme  como funciona un poco el Charsfinder?
Porq cuando lo ejecuto puedo escribir "blablabla.txt" y luego me pregunta por el sufijo pero si no existe el archivo blablabla.txt no tendría que pedirme el sufijo ya que no puede trabajar con un archivo que no existe.

El chatreader lo he hecho en otro archivo:

Código: php
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
 

public class ChatReader {
 

    private String fileName;
 
    public ChatReader(String fileName) {
        this.setFileName(fileName);
    }
     
    public String[] getMessages() {
        try {
            // path to the chat log file
            Path p = Paths.get(this.getFileName());
            // read all lines and store them in a list
            List<String> lines = Files.readAllLines(p, Charset.forName("UTF-8"));
            String[] messages =
                    lines.toArray(new String[lines.size()]);
            return messages;
        } catch (IOException e) {
            System.err.println("Couldn't read " + this.getFileName() + "\n Did you give me the correct path?");
        }
        return new String[]{};
    }
 
 
    public String getFileName() {
        return fileName;
    }
 
 
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
 
}



Para el contador de frecuencia de una palabra he escrito esto, pero me gustaría saber si alguien tiene una forma mas fácil(que no implique por ejemplo tener que hacer un reverse para que primero vayan los mas frecuentes):

Código: php
//frequency count :
for (String type:tokenS){ //for each word our list of tokens
Double oldCounter = typeFreq.get(type); //oldCounter's value is the value of the key 'type'
if (oldCounter == null){ //check if there is no value in the map
oldCounter = 0.; //reset : oldCounter has the value 0 (dot because it is a double)
}
typeFreq.put(type, ++oldCounter); //add the current word and its counter +1
//if the counter was 0, we have oldCounter=1
//and if the counter for that type already had a value>0 : +1.

//as we cannot have duplicate keys in a map, it will always go to the already existing entry
//if the current word already appeared before.
}

System.out.println(typeFreq.toString()); //problem : does not print special characters : ü,ö,ä,... (->replace?)

double temp=0; //current value
double max=0; //biggest current value
for(String key:typeFreq.keySet()){ //for each key (token)
temp=typeFreq.get(key); //hold its value (frequency)
if(temp>=max){ //if value bigger than max
max=temp; //value is the new max
//System.out.println(key); //print corresponding key
//that way we print the key with the smallest value first
toBeReversed.add(key);
continue;
}
}
Collections.reverse(toBeReversed);
System.out.println(toBeReversed.toString());
return " ";
}

}


Un saludo!  ;D
#6
Buenas!

Sigo con Java... empiezo a cogerle manía :S Aquí planteo mi duda:

Teniendo un .txt, me gustaría saber como escribir un code que saque las palabras con una terminación dada por el usuario así como el numero de veces que aparece dicha palabras. Este sería el esquema a seguir:

1. Al ejecutarlo se le pide al usuario el nombre del archivo que tiene que escribirse con la extensión(ejemplo.txt)

2. Si el nombre introducido no se encuentra en la carpeta src, aparecerá el pensaje de archivo no encontrado vuelva a intentarlo, es decir, que vuelve al primero apartado de introducción de texto.

3. Si el nombre del archivo es el mismo que el nombre del txt de la carpeta src se le preguntara al usuario que terminación tienen que tener las palabras a buscar.

4. Tras escribir la terminación aparecerá en pantalla una lista con las palabras que terminan por la terminación escrita anteriormente. En la lista han de aparecer también el numero de veces que ha aparecido dicha palabra.

5. Si cuando el se ejecuta el programa el usuario escribe "end" el programa se dentendrá.

Y ahora un poco mas resumido:

User -> nombre del archivo: (input)
           if nombre del archivo introducido.exist():
                  user -> que terminación tienen que tener las palabras que vamos a buscar: (input)
                          System.out.print(lista de palabras con esa terminación + numero de veces que aparecen)

          si el usuario escribe "end" -> Sysyem.exit(1)


Por ahora lo que llevo es esto:

Código: java
import java.io.Archivo;
import java.io.FileNotFoundException;
import java.util.regex.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MorphSearchDemo extends ChatReader{

//variables
String suffix;
List<String> tokenS = new ArrayList<String>(); //Contendrá las palabras que terminen con la terminacion indicada

String Archivo;
String Terminacion;

public MorphSearchDemo(String Archivoname, String suffix) {
super(Archivoname);
this.suffix=suffix;
}

public String searchS() throws FileNotFoundException{

        Scanner scan = new Scanner(System.in);
        System.out.print("introduce el nombre del archivo: "+ "\n");
        this.Archivo = scan.next();
        if(!this.Archivo.contains(".")){ // para asegurarme de que el user pone la extension! Pero quiero limitar las opciones del user y que
        System.out.print("el archivo existe, vueleve a intentarlo"); // solo pueda escribir el nombre de los archivos que hay en src
        }
        //System.out.println( "input = " + input );
        /*if (!(input != Archivo)){
        for (String rs : getMessages()){
   
    String[] splitString = rs.split(" ");
   
    for (int i=0; i<splitString.length; i++){
   
    Pattern patternS = Pattern.compile(suffix);
    Matcher matcherS = patternS.matcher(splitString[i]);
   
    if (matcherS.find()){ //if we found a token matching endS
    splitString[i]=splitString[i].replaceAll("[^A-Za-z ]", ""); //quito todos los caracteres especiales y numeros
    tokenS.add(splitString[i]);
    }
    }
    }
        System.out.println(tokenS.toString());
        }*/
        System.out.print("Terminacion : ");
        this.Terminacion = scan.next();
        if (this.Terminacion.contains("end") || this.Archivo.contains("end")){     // si el usuario escribe end tiene que terminar de correr
        System.out.print("el proceso ha terminado");
        System.exit(0);
            }
       
       
       
        //Archivo Archivo = new Archivo(dat.nextLine());
        //dat = new Scanner(Archivo);
       

//look for the pattern in each token of each line

//System.out.println(tokenS.toString());
return " ";
}

}


Esto es lo poco que llevo y ya me he atascado. El reader lo tengo en otro archivo que no creo que rea muy importante ya que me lo he probado y me lee el texto y he probado lo de que encuentre las palabras terminadas en X y me ha funcionado bien.

Otro problema esta en que al correr el programa si cuando pide el nombre del archivo escribo end pasa directamente a preguntarme la terminación a buscar y si ahí escribo end ya si me dice lo de proceso finalizado :S

Alguien podría darme algún empujón?
Ya que escribo esto, alguien me puede decir que diferencia hay entre escribir un numero u otro en el System.exit(int);
#7
Gracias por el ejemplo compañero! La verdad es que las regex son bastante útiles cuando se aprende a programar con ellas :D

Sabrías decirme como podría encontrar todos los links de un archivo txt para poder realizar luego las modificaciones de los corchetes? :) 
Es decir en vez de dar una cadena String y definir su valor, decir que busque dentro de un txt todo aquello que se asemeje a la regex: "(https?)://(www\\d?|[a-zA-Z0-9]+)?.[a-zA-Z0-9-]+(\\:|.)([a-zA-Z0-9.]+|(\\d+)?)([/?:].*)?"
(el txt tiene mas de 58800 lineas)


Un saludo!
#8
Muy buenas,

aprovecho esta ocasión para presentarme y para preguntar una duda que no logro resolver... :S

Mis mas sinceras felicitaciones por la pagina, me ha ayudado bastante :D


Mi duda:

Estoy jugando con regex y aprendiendo a programar en java, lo que me gustaría es saber como podría hacer para encontrar todos los links en un archivo de texto plano y una vez que se hayan encontrado sustituir el "http://" por un "[" y al final del link poner también un "[". quedaría algo así:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -> [www.google.es]

Por ahora tengo clara mas o menos la regex, que sería esta:
"(https?)://(www\\d?|[a-zA-Z0-9]+)?.[a-zA-Z0-9-]+(\\:|.)([a-zA-Z0-9.]+|(\\d+)?)([/?:].*)?" // Así también abarco los links https

Pero lo que me falla es como poder encontrar todos los links que hay en el txt y sustituir los "http://" por "[" :S

En ejemplos como este me queda claro pero de aquí no salgo:

Código: java
public class Replace {

        public static String replace(String str, String search, String replace) {
                return str.replaceAll(search, replace);
        }

        public static void main(String[] args) {

                String sURL = "http://www.google.com";
                String new_URL = replace(sURL,"http://","[");
                System.out.println(new_URL+ "]");

        }

}



Alguien podría ayudarme :)

Un saludo!


Update:  He conseguido modificar el "http://" por un "[" así:
Código: java
    String Link = "(https?)://(www\\d?|[a-zA-Z0-9]+)?.[a-zA-Z0-9-]+(\\:|.)([a-zA-Z0-9.]+|(\\d+)?)([/?:].*)?";
       
       Pattern patternLink = Pattern.compile(Link);
       Matcher matcherLink = patternLink.matcher(s);
       
       if (matcherLink.find()){
       LinkSearch=matcherLink.group();
           String LinkSearch_replace= replace(LinkSearch,"http://","[");
       return LinkSearch_replace;


Sin embargo cuando en la main llamo a la clase del buscador de links e imprimo el link  para que termine con un "]" tengo que hacer un System.out.print(Link + "]");
Así que mi duda actual se resume en:
-Como buscar todos links en un archivo txt.
-Como añadir el "]" al final del link sin el método que he usado(System.out.print).

Gracias!! :)