A voir également:
- Problème parse liens page web dans fichier txt
- Fichier rar - Guide
- Comment supprimer une page dans word - Guide
- Traduire une page web - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
4 réponses
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
4 nov. 2017 à 14:02
4 nov. 2017 à 14:02
Bonjour
Merci de poster ton code directement sur le forum.
Merci de poster ton code directement sur le forum.
public void readWebPages() { File f; FileReader fr; BufferedReader br; String pageAdress; String pageAdress2; String fromAdress; WebPage webPage; try { f = new File (this.webPagesFile); fr = new FileReader (f); br = new BufferedReader (fr); try { String line = br.readLine(); line = br.readLine(); while (line != null) { System.out.println("ligne brute " + line); line = line.replaceAll("http://", ""); line = line.replaceAll("https://", ""); line = line.replaceAll("\\./", ""); String[] infos=line.split("\\t"); pageAdress = new String(infos[7]); pageAdress2 = new String(infos[8]); fromAdress = new String(infos[9]); fromAdress = fromAdress.substring(fromAdress.indexOf("(")+6, fromAdress.indexOf(")")); System.out.println("PageAdress1 " + pageAdress + " PageAdress2 " + pageAdress2 + "From adress " + fromAdress); if(fromAdress.length() > 1) { // on a une origine //if(!this.webPages.containsKey(pageAdress)) this.webPages.putIfAbsent(pageAdress, new WebPage(pageAdress)); if(pageAdress2.length() > 2) { this.webPages.putIfAbsent(pageAdress2, new WebPage(pageAdress2)); // System.out.println("Ajoute page " + pageAdress2); } // if(!this.webPages.containsKey(fromAdress)) this.webPages.putIfAbsent(fromAdress, new WebPage(fromAdress)); webPage = this.webPages.get(fromAdress); if(!webPage.linkedPages.contains(new WebPage(pageAdress))) { webPage.linkedPages.add(new WebPage(pageAdress)); this.webPages.replace(fromAdress, webPage); } if(pageAdress2.length() > 2) { if(!webPage.linkedPages.contains(new WebPage(pageAdress2))) { webPage.linkedPages.add(new WebPage(pageAdress2)); this.webPages.replace(fromAdress, webPage); } } webPage = this.webPages.get(pageAdress); if(!webPage.linkingPages.contains(new WebPage(fromAdress))) { webPage.linkingPages.add(new WebPage(fromAdress)); this.webPages.replace(pageAdress, webPage); } if(pageAdress2.length() > 2) { webPage = this.webPages.get(pageAdress2); if(!webPage.linkingPages.contains(new WebPage(fromAdress))) { webPage.linkingPages.add(new WebPage(fromAdress)); this.webPages.replace(pageAdress2, webPage); } } } else { if(!this.webPages.containsKey(pageAdress)) this.webPages.put(pageAdress, new WebPage(pageAdress)); } // this.webPages.put(pageAdress, webPage); // webPage = new WebPage(pageAdress); // System.out.println("readWebPages " + pageAdress); /* webPage.setLinkingPages(this.getlinkingPages(pageAdress)); // System.out.println("Linking done " + pageAdress); webPage.setLinkedPages(this.getlinkedPages(pageAdress)); // System.out.println("Linked done " + pageAdress); System.out.println("putDone " + pageAdress); */ line = br.readLine(); } System.out.println("Fini read"); br.close(); fr.close(); } catch (IOException exception) { System.out.println ("Erreur lors de la lecture : " + exception.getMessage()); } } catch (FileNotFoundException exception) { System.out.println ("Le fichier n'a pas été trouvé"); } if(this.webPages.containsKey("cas.univ-avignon.fr_443/login2a7b.html")) System.out.println("Contient page"); System.out.println("Debut 34"); for (Map.Entry entry : this.webPages.entrySet()) { /* System.out.println("clé 2246: "+entry.getKey() + " | valeur: " + entry.getValue());*/ // System.out.println(entry.getKey()); } }
Pour le fichier txt contenant les pagesWeb, il faut le prendre dans le lien de mon premier message, c'est trop gros
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
4 nov. 2017 à 15:23
4 nov. 2017 à 15:23
Bonjour,
Dans ton code tu fais des
Tu as 27394 pages en tout, mais seulement 27387 différentes, les 7 doublons ne sont pas pris dans la Map.
Dans ton code tu fais des
this.webPages.putIfAbsent(this inutile soit dit en passant) mais que se passe-t-il s'il sont déjà prénsent ? Et bien il ne fait rien, ce qui explique pourquoi tu n'as pas tout...
Tu as 27394 pages en tout, mais seulement 27387 différentes, les 7 doublons ne sont pas pris dans la Map.
Merci de la réponse, par contre maintenant j'ai un problème dans readKeyWords, il devrait trouver 832 pages pour le mot-clé informatique, mais il n'en trouve que 812. Le fichier index_small.txt est dans le lien de mon premier message
public void readKeyWords() { File f; FileReader fr; BufferedReader br; String pageAdress; String currentKeyWord = ""; DataKeyWord dataKeyWord1; try { f = new File (this.keyWordsFile); fr = new FileReader (f); br = new BufferedReader (fr); try { String line = br.readLine(); while (line != null) { System.out.println("ligne brute : " + line); if(line.equals(" ")) break; String[] infos=line.split("\\t"); if(infos.length == 1) { // ligne de mot cle // System.out.println(" ligne mot cle"); currentKeyWord = infos[0]; //System.out.println("Ajoute mot cle"); this.dataKeyWords.put(currentKeyWord, new DataKeyWord(currentKeyWord)); keyWordsList.contains(currentKeyWord); this.myDataStructure.addKeyWord(currentKeyWord); } else { // System.out.println("pas ligne mot cle"); System.out.println("infos1 brut " + infos[1]); infos[1] = infos[1].replaceAll("(=([1-9]|\\d{2,6})\\b)|(\\b([1-9]|\\d{2,6}) )|(\\(\\d+\\))",""); /*infos[1] = infos[1].replaceAll("=[0-9]",""); infos[1] = infos[1].replaceAll("([0-9])","");*/ infos[1] = infos[1].replaceAll(" ",""); /*infos[1] = infos[1].replaceAll("=",""); infos[1] = infos[1].replaceAll("\\(",""); infos[1] = infos[1].replaceAll("\\)",""); infos[1] = infos[1].replaceAll("^[0-9]","");*/ System.out.println("infos1" + infos[1] ); System.out.println("ligne brute : " + line); if(infos[1].length() > 2 && (this.webPages.containsKey(infos[1]))) { this.keyWords.put(infos[1],currentKeyWord); dataKeyWord1 = this.dataKeyWords.get(currentKeyWord); dataKeyWord1.webPagesLink.add(infos[1]); this.dataKeyWords.replace(currentKeyWord, this.dataKeyWords.get(currentKeyWord), dataKeyWord1); if(currentKeyWord.equals("informatique")) System.out.println("Ajoute " + currentKeyWord + "," + infos[1] + ", taille"); this.myDataStructure.addWebPage(currentKeyWord, infos[1]); } /* for (Map.Entry entry : webPages.entrySet()) { if(entry.getKey().equals(infos[1])) { for (Map.Entry dataKeyWord : this.dataKeyWords.entrySet()) { if(dataKeyWord.getKey().equals(currentKeyWord)) { dataKeyWord1 = (DataKeyWord) dataKeyWord.getValue(); dataKeyWord1.webPagesLink.add(infos[1]); this.dataKeyWords.replace(currentKeyWord, dataKeyWord1); } } } /*System.out.println("clé: "+entry.getKey() + " | valeur: " + entry.getValue()); } */ } line = br.readLine(); } System.out.println("Nb mots clés " + this.myDataStructure.dataKeyWords.size()); System.out.println("nbPages pour informatique " + this.myDataStructure.get("informatique").webPagesLink.size()); br.close(); fr.close(); } catch (IOException exception) { System.out.println ("Erreur lors de la lecture : " + exception.getMessage()); } } catch (FileNotFoundException exception) { System.out.println ("Le fichier n'a pas été trouvé"); } }
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
5 nov. 2017 à 00:08
5 nov. 2017 à 00:08
C'est la même chose, une Map n'accepte pas les doublons, donc si tu en as le nombre de résultats retenus à la fin sera plus petit que le nombre d'éléments soumis.
La seule différence c'est que put va remplacer la première valeur du doublon par la deuxième tandis que putIfAbsent va conserver la première valeur et ignorer la deuxième.
La seule différence c'est que put va remplacer la première valeur du doublon par la deuxième tandis que putIfAbsent va conserver la première valeur et ignorer la deuxième.
dd
>
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
5 nov. 2017 à 00:25
5 nov. 2017 à 00:25
J'ai besoin que le code trouve 832 pages, si les à cause des doublons qui sont infine supprimés, il faut que je les conserves mais je sais pas comment
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
>
dd
5 nov. 2017 à 00:40
5 nov. 2017 à 00:40
Dans tous les cas une Map n'accepte pas les doublons, il y a plusieurs alternatives possibles, tout dépend ce que tu veux en faire derrière :
- List<Entry<K,V>> → [(a=1), (b=2), (c=3), (c=4)]
- Map<K, List<V>> → {a=[1], b=[2], c=[3, 4]}
dd
>
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
Modifié le 5 nov. 2017 à 00:54
Modifié le 5 nov. 2017 à 00:54
Je ne comprends pas pourquoi il y aurait un problème de doublons puisque j'ajoute les pages dans une liste contenu dans l'objet DataKeyWord de chaque mot clé de MyDataStructure, quand je fais print et que ça donne 812 c'est la taille de la liste des pages du mot clé ça utilise pas la map donc ça peut pas être un problème de doublons (je pense)
J'ai trouvé le problème, mais je ne sais pas comment le résoudre.
A chaque fois qu'il ne trouve pas une page qu'il aurait du trouver (qu'il ne trouve pas dans la liste webPages alors que celle-ci sont dans le fichier source de webPages), c'est une page avec des caractères spéciaux, (accents, cédilles).
A chaque fois qu'il ne trouve pas une page qu'il aurait du trouver (qu'il ne trouve pas dans la liste webPages alors que celle-ci sont dans le fichier source de webPages), c'est une page avec des caractères spéciaux, (accents, cédilles).