J'ai le code suivant pour lire un texte, le stocker dans un hashmap sous forme de bigrammes (avec d'autres méthodes pour les trier par fréquence et faire un lissage additif très basique).
Je l'ai fait fonctionner parfaitement pour un fichier d'entrée de langue (anglais) et ensuite je veux l'étendre pour le fichier d'entrée de la deuxième langue (japonais - peu importe ce que c'est je suppose) en utilisant les mêmes méthodes mais le hashmap du bigramme japonais s'imprime 3 fois d'affilée avec des valeurs différentes.
J'ai essayé d'utiliser un texte différent dans le fichier d'entrée, en m'assurant qu'il n'y avait pas d'espace dans le texte, etc. J'ai également placé des instructions d'impression à certains endroits de la partie japonaise du code pour voir si je pouvais obtenir des indices, mais toutes les instructions d'impression s'impriment à chaque fois, de sorte que je ne peux pas déterminer s'il s'agit d'une boucle à un certain endroit.
Je l'ai passé au peigne fin, mais j'ai manifestement raté quelque chose et je suis en train de devenir fou - toute aide serait appréciée.
package languagerecognition2;
import java.lang.String;
import java.io.InputStreamReader;
import java.util.*;
import java.util.Iterator;
import java.util.List.*;
import java.util.ArrayList;
import java.util.AbstractMap.*;
import java.lang.Object;
import java.io.*;
import java.util.Enumeration;
import java.util.Arrays;
import java.lang.Math;
public class Main { /**
public static void main(String[] args) {
//training English -----------------------------------------------------------------
File file = new File("english1.txt");
StringBuffer contents = new StringBuffer();
BufferedReader reader = null;
try
{
reader = new BufferedReader(new FileReader(file));
String test = null;
//test = reader.readLine();
// repeat until all lines are read
while ((test = reader.readLine()) != null)
{
test = test.toLowerCase();
char[] charArrayEng = test.toCharArray();
HashMap<String, Integer> hashMapEng = new HashMap<String, Integer>(bigrams(charArrayEng));
LinkedHashMap<String, Integer> sortedListEng = new LinkedHashMap<String, Integer>(sort(hashMapEng));
int sizeEng=sortedListEng.size();
System.out.println("Total count of English bigrams is " + sizeEng);
LinkedHashMap<String, Integer> smoothedListEng = new LinkedHashMap<String, Integer>(smooth(sortedListEng, sizeEng));
//print linkedHashMap to check values
Set set= smoothedListEng.entrySet();
Iterator iter = set.iterator ( ) ;
System.out.println("Beginning English");
while ( iter.hasNext())
{
Map.Entry entry = ( Map.Entry ) iter.next ( ) ;
Object key = entry.getKey ( ) ;
Object value = entry.getValue ( ) ;
System.out.println( key+" : " + value);
}
System.out.println("End English");
}//end while
}//end try
catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (reader != null)
{
reader.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
//End training English-----------------------------------------------------------
//Training japanese--------------------------------------------------------------
File file2 = new File("japanese1.txt");
StringBuffer contents2 = new StringBuffer();
BufferedReader reader2 = null;
try
{
reader2 = new BufferedReader(new FileReader(file2));
String test2 = null;
//repeat until all lines are read
while ((test2 = reader2.readLine()) != null)
{
test2 = test2.toLowerCase();
char[] charArrayJap = test2.toCharArray();
HashMap<String, Integer> hashMapJap = new HashMap<String, Integer>(bigrams(charArrayJap));
//System.out.println( "bigrams stage");
LinkedHashMap<String, Integer> sortedListJap = new LinkedHashMap<String, Integer>(sort(hashMapJap));
//System.out.println( "sort stage");
int sizeJap=sortedListJap.size();
//System.out.println("Total count of Japanese bigrams is " + sizeJap);
LinkedHashMap<String, Integer> smoothedListJap = new LinkedHashMap<String, Integer>(smooth(sortedListJap, sizeJap));
System.out.println( "smooth stage");
//print linkedHashMap to check values
Set set2= smoothedListJap.entrySet();
Iterator iter2 = set2.iterator();
System.out.println("Beginning Japanese");
while ( iter2.hasNext())
{
Map.Entry entry2 = ( Map.Entry ) iter2.next ( ) ;
Object key = entry2.getKey ( ) ;
Object value = entry2.getValue ( ) ;
System.out.println( key+" : " + value);
}//end while
System.out.println("End Japanese");
}//end while
}//end try
catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (reader2 != null)
{
reader2.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
//end training Japanese---------------------------------------------------------
} //end main (inner)