Латентный Семанти c Анализ в java - PullRequest
0 голосов
/ 07 января 2020

Я ищу код 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);
        }
    }
}
...