Я ищу код java для метода LSA, это небольшая часть моего дипломного проекта, я много искал, но не оштрафовал что-то понятное. мне просто нужна простейшая реализация для этого в java (я использую IDE NetBeans), и теперь я запутался, что мне делать и какие пакеты я могу использовать, я попробовал код ниже, чтобы создать do c -термин матрица из каталога текстовых файлов, но как я могу рассчитать SVD в java. и что последует за этим. Как я могу сравнить документы и извлечь скрытую семантику
Это код для чтения текстовых файлов из каталога и расчета N-грамм каждого файла.
public void open_D () throws FileNotFoundException {
JFileChooser Choix_Fichier = new JFileChooser();
Choix_Fichier.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
Choix_Fichier.addChoosableFileFilter(new FileNameExtensionFilter("Fichiers txt", "txt"));
//Choix_Fichier.addChoosableFileFilter(filter);
Choix_Fichier.setAcceptAllFileFilterUsed(true);
int retour=Choix_Fichier.showOpenDialog(null);
String files = Choix_Fichier.getSelectedFile().getAbsolutePath();
File folder = new File(files);
SwingWorker<Void, String > worker ;
worker = new SwingWorker<Void, String>() {
List<String> derect = new ArrayList<String>();
@Override
protected Void doInBackground() throws Exception {
for (File file : folder.listFiles())
{
publish(file.getName());
Scanner scanner = new Scanner(new FileInputStream(file), "UTF-8");
while (scanner.hasNext()) {
String tem = scanner.next();
derect.add(tem);
}
System.out.println("do in backGround size ; " + derect.size() );
fetch(derect );
derect.retainAll(derect);
scanner.close();
}
return null;
}
@Override
protected void process(List<String> chunks) {
for (String text : chunks) {
System.out.println("--------------+++++"+text + "\n");
}
}
@Override
protected void done() {
//
}
};
worker.execute();
}
public void fetch(List<String> ngrams ) throws FileNotFoundException {
////////////////////-------------- remove Stop Words--------------//////////////////
String Stop [] = {"and", "a" ,"minors" , "." , "in" , "or"};
//Collection<String> filtered = Collection.filter(ngrams, containsPattern("How"));
for (int i = 0; i < ngrams.size() ; i++) {
for (int j = 0; j < Stop.length; j++) {
if (ngrams.get(i).equals(Stop[j])){
System.out.println("removed : "+ ngrams.get(i)+"\n");
ngrams.remove(i);
}
}
}
System.out.println("text lenght after remove Stope words : "+ ngrams.size());
//System.out.println( mySet.size() + " //// "+ mySet);
/////////////////-------------------- calculate the Ngrams of the Text File ------
Set<String> mySet = new HashSet<>(ngrams);
Set<String > TF = new HashSet<>();
for(String s: mySet ){
String lin [] = new String[2];
int r = Collections.frequency(ngrams,s);
lin[0]= s;
lin[1]= String.valueOf(r);
TF.add(s+" " +r );
}
System.out.println("Ngrams of the Text ==>" + TF );
}
public static void main (String []Args) throws FileNotFoundException{
my_test h = new my_test();
try {
h.open_D();
} catch (FileNotFoundException ex) {
Logger.getLogger(my_test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}