RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA

5
RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA SpellChecker.java //Bilalcan SARI import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Iterator; import java.util.ArrayList; public class SpellChecker { //Question n°1 public static HashMap<String, Integer> buildKnowWordList(String cheminRepertoire) { HashMap<String, Integer> dictionnaire = new HashMap<String, Integer>(); try{ for(String nomFichier : new File(cheminRepertoire).list()){ //Test affichage //System.out.println(nomFichier); InputStream inputS = new FileInputStream(cheminRepertoire+nomFichier); InputStreamReader lecture = new InputStreamReader(inputS); BufferedReader fichier = new BufferedReader(lecture); String line; StringBuilder strBuilder = new StringBuilder(); while ((line = fichier.readLine()) != null) { for(String word : line.split(" ")){ if(dictionnaire.containsKey(word)) dictionnaire.put(word, dictionnaire.get(word)+1); else dictionnaire.put(word, 1); } strBuilder.append(line); strBuilder.append("\n"); } try { FileWriter writer = new FileWriter(cheminRepertoire+nomFichier); writer.write(strBuilder.toString().replaceAll("(? m)^[ \t]*\r?", "").replaceAll("[\n]", " ")); writer.close(); } catch(Exception e) { System.out.println("Erreur au niveau des lignes vides et \n"); } } }catch (Exception e) { System.out.println("Erreur ouverture fichier"); } return dictionnaire; }

Transcript of RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA

Page 1: RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA

RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA

SpellChecker.java

//Bilalcan SARIimport java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.InputStream;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Iterator;import java.util.ArrayList;

public class SpellChecker {//Question n°1public static HashMap<String, Integer> buildKnowWordList(String cheminRepertoire)

{HashMap<String, Integer> dictionnaire = new HashMap<String, Integer>();try{

for(String nomFichier : new File(cheminRepertoire).list()){//Test affichage//System.out.println(nomFichier);InputStream inputS = new

FileInputStream(cheminRepertoire+nomFichier);InputStreamReader lecture = new InputStreamReader(inputS);BufferedReader fichier = new BufferedReader(lecture);String line;StringBuilder strBuilder = new StringBuilder();while ((line = fichier.readLine()) != null) {

for(String word : line.split(" ")){if(dictionnaire.containsKey(word))

dictionnaire.put(word, dictionnaire.get(word)+1); else dictionnaire.put(word, 1);

}strBuilder.append(line);strBuilder.append("\n");

}try {

FileWriter writer = new FileWriter(cheminRepertoire+nomFichier);

writer.write(strBuilder.toString().replaceAll("(?m)^[ \t]*\r?", "").replaceAll("[\n]", " "));

writer.close();} catch(Exception e) {

System.out.println("Erreur au niveau des lignes vides et \n");

}}

}catch (Exception e) {System.out.println("Erreur ouverture fichier");

}return dictionnaire;

}

Guillaume Wisniewski
Guillaume Wisniewski
convention java !!!
Guillaume Wisniewski
Guillaume Wisniewski
Guillaume Wisniewski
est-ce que c’est une bonne idée de passer les erreurs sous silence ?�
Guillaume Wisniewski
votre fonction est trop longue —> vous faites plusieurs choses à la fois�
Guillaume Wisniewski
est-ce que c’était demandé ?�
Guillaume Wisniewski
respectez les conventions java !!
Guillaume Wisniewski
11
Page 2: RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA

//Question n°2public static ArrayList<Integer> correct(ArrayList<String> text, HashMap<String,

Integer> dico){ArrayList<Integer> verif = new ArrayList<Integer>();for(String verifMot : text) {

if(dico.containsKey(verifMot)) verif.add(0);else verif.add(1);

}return verif;

}//Question n°3public static void printCorrectedText(ArrayList<String> text, ArrayList<Integer>

annotations) {Iterator<String> wordIterator = text.iterator();Iterator<Integer> labelIterator = annotations.iterator();while (labelIterator.hasNext() && wordIterator.hasNext()) {

String word = wordIterator.next();Integer label = labelIterator.next();if (label == 1) {

System.out.print("\033[91m**" + word + "**\033[0m ");} else {

System.out.print(word + " ");}

}System.out.println();

}

}

SpellCorrector.java

//Bilalcan SARIimport java.io.IOException;import java.nio.file.Files;import java.nio.file.Paths;import java.util.ArrayList;import java.util.HashMap;

public class SpellCorrector {public static String[] alphabet42 = {"a", "b", "c", "d", "e", "f", "g", "h", "i",

"j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "y", "z", "à", "â", "æ", "ç", "é", "è", "ê", "ë", "î", "ï", "ô", "œ", "ù", "û", "ü", "ÿ"};

public static HashMap<String, Integer> countWords(String text){HashMap<String, Integer> motsOcc = new HashMap<String, Integer>();String tableauMots[] = text.split(" ");for(String mots : tableauMots){

if(motsOcc.containsKey(mots)){motsOcc.put(mots, motsOcc.get(mots)+1);

}else{

motsOcc.put(mots, 1);}

}return motsOcc;

}

Guillaume Wisniewski
convention java
Guillaume Wisniewski
Guillaume Wisniewski
Page 3: RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA

public static ArrayList<String> allInverse(String motACorriger){return testPermutations("", motACorriger);

}public static ArrayList<String> testPermutations(String prefix,String s){

ArrayList<String> allPermutations = new ArrayList<String>();int n = s.length();if(n==0){

allPermutations.add(prefix);} else {

for(int i = 0; i<n; i++){allPermutations.addAll(testPermutations(prefix + s.charAt(i),

s.substring(0, i) + s.substring(i+1, n)));}

}return allPermutations;

}

public static ArrayList<String> allInsert(String motACorriger){ArrayList<String> al = new ArrayList<String>();for(String lettre : alphabet42) {

for(int i=0; i<=motACorriger.length(); i++){if(i == 0) al.add(lettre + motACorriger);else if (i == motACorriger.length()) al.add(motACorriger +

lettre);else al.add(motACorriger.substring(0, i) + lettre +

motACorriger.substring(i));}

}return al;

}

public static ArrayList<String> allDel(String motACorriger){ArrayList<String> al = new ArrayList<String>();for(int i=0; i<motACorriger.length(); i++){

if(i == 0) al.add(motACorriger.substring(1));else if (i == motACorriger.length()-1)

al.add(motACorriger.substring(0, i));else al.add(motACorriger.substring(0, i) +

motACorriger.substring(i+1));}return al;

}

public static ArrayList<String> allSubst(String motACorriger){ArrayList<String> al = new ArrayList<String>();for(String lettre : alphabet42) {

for(int i=0; i<motACorriger.length(); i++){if(i == 0) al.add(lettre + motACorriger.substring(1));else if (i == motACorriger.length()-1)

al.add(motACorriger.substring(0, i) + lettre);else al.add(motACorriger.substring(0, i) + lettre +

motACorriger.substring(i+1));}

}return al;

}

public static int score(String unMot, HashMap<String, Integer> countWords){if(!countWords.containsKey(unMot)) return 0;else return countWords.get(unMot);

}

Guillaume Wisniewski
Guillaume Wisniewski
private
Guillaume Wisniewski
pas la bonne sémantique�
Guillaume Wisniewski
beaucoup trop compliqué�
Page 4: RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA

public static String correct(String motErreur, HashMap<String, Integer> table){String motCorrige = "";return motCorrige;

}

public static void eval(String testFn, HashMap<String, Integer> dico) throws IOException {

int nCorrect = 0;int nWord = 0;for (String line : Files.readAllLines(Paths.get(testFn))) {

String wordWithError = line.split(" ")[0].toLowerCase();String correctWord = line.split(" ")[1].toLowerCase();String hypCorrection = correct(wordWithError, dico);if (hypCorrection.equals(correctWord)) {

nCorrect += 1;}nWord += 1;

}System.out.println(100.0 * nCorrect / nWord + "% de corrections justes");

}

}

Main.java

//Bilalcan SARIimport java.io.IOException;import java.util.ArrayList;

public class Main {public static void main(String[] args) throws IOException{

ArrayList<String> text = new ArrayList<String>();text.add("bonjour");text.add("lqs");text.add("enfants");

//Test Question n°1System.out.println(SpellChecker.buildKnowWordList("./data/"));//Test Question n°2System.out.println(SpellChecker.correct(text,

SpellChecker.buildKnowWordList("./data/")));SpellChecker.printCorrectedText(text,SpellChecker.correct(text,

SpellChecker.buildKnowWordList("./data/")));

//Question 3/*Réponse --> Ce système détectera seulement les erreurs

d'orthographe de chaque mots un par un *Et non de grammaire, *On pourra imaginer un système qui corrigera les erreurs de

grammaire et d'ortographe */

//Question 4/*Réponse --> 3 + (n-1) = 2 + n * l’ensemble des corrections candidates contient (2+n)

élémets * si le mot à corriger comporte n lettres */

Page 5: RENDU TP4 – POO – SARI Bilal – L3 MIAGE CFA

//Question 5/*Réponse --> Il y en a ??? * */

//Test Question n°6System.out.println(SpellCorrector.allInverse("abc"));System.out.println(SpellCorrector.allSubst("abc"));System.out.println(SpellCorrector.allDel("abc"));System.out.println(SpellCorrector.allInsert("abc"));

//Test Question n°7(à revoir, et ou finir)System.out.println(SpellCorrector.score("bondour",

SpellChecker.buildKnowWordList("./data/")));

//Test Question n°8 (pas bon, à revoir)System.out.println(SpellCorrector.correct("bondour",

SpellChecker.buildKnowWordList("./data/")));

//Question 9/*Réponse --> Je ne l'ai pas, mais j'ai une hypothèse pour la

Question n°10 */

//Question 10/*Réponse --> Plus notre dictionnaire est constitué d'un nombre important

de mots bien orthographié * Meilleure sera le pourcentage de réussite, du correcteur, car la

correction sera plus précise */

}}

Guillaume Wisniewski
tests unitaires !