Исправление ошибки запуска массива в моем анализаторе Java, а также попытка исправить вывод печати

Это парсер, который просматривает 5 текстовых документов HTML источников. Затем анализатор будет проходить через каждый текстовый файл, считать частоту 5 ключевых слов, а затем отображать косинус.

1) Существует ошибка, при которой массивы не могут быть разрешены вокруг строки моего массива в parser.java

2) импортировать java.util.List; import java.util.StringTokenizer;

public class DocumentParser {

    private void doSomething(){
            String text = "Professor, engineering, data, mining, research";
            StringTokenizer str = new StringTokenizer(text);
            String word[] = new String[10];
            String unique[] = new String[10];
            String x;
            int count = -1;
            while (str.hasMoreTokens()) {
                count++;
                x = str.nextToken();
                word[count] = x;
               System.out.println(count + ": " + word[count]);
            }

            System.out.println("---Frequency---");
            for (int i = 0; i < 7; i++) {

                if ((!Arrays.asList(unique).contains(word[i]))) {
                    unique[i] = word[i];
                }
            }

            int[] measure = new int[10];

            for (int a = 0; a < 7; a++) {
                if (Arrays.asList(unique).contains(word[a])) {
                    measure[a] += 1;
                    System.out.println(unique[a] + " : " + measure[a]);
                }
            }
        }

    private List<String[]> termsDocsArray = new ArrayList<String[]>();
    private List<String> allTerms = new ArrayList<String>(); 
    private List<double[]> tfidfDocsVector = new ArrayList<double[]>();

    public void parseFiles(String filePath) throws FileNotFoundException, IOException {
        File[] allfiles = new File(filePath).listFiles();
        BufferedReader in = null;
        for (File f : allfiles) {
            if (f.getName().endsWith(".txt")) {
                in = new BufferedReader(new FileReader(f));
                StringBuilder sb = new StringBuilder();
                String s = null;
                while ((s = in.readLine()) != null) {
                    sb.append(s);
                }
                String[] tokenizedTerms = sb.toString().replaceAll("[\\W&&[^\\s]]", "").split("\\W+");   //to get individual terms
                for (String term : tokenizedTerms) {
                    if (!allTerms.contains(term)) {  
                        allTerms.add(term);
                    }
                }
                termsDocsArray.add(tokenizedTerms);
            }
        }

    }

    public void tfIdfCalculator() {
        double tf; 
        double idf; 
        double tfidf;       
        for (String[] docTermsArray : termsDocsArray) {
            double[] tfidfvectors = new double[allTerms.size()];
            int count = 0;
            for (String terms : allTerms) {
                tf = new TfIdf().getTf(docTermsArray, terms);
                idf = new TfIdf().idfCalculation(termsDocsArray, terms);
                tfidf = tf * idf;
                tfidfvectors[count] = tfidf;
                count++;
            }
            tfidfDocsVector.add(tfidfvectors);      
        }
    }
    public void getCosineMatrix() {
        for (int i = 0; i < tfidfDocsVector.size(); i++) {
            for (int j = 0; j < tfidfDocsVector.size(); j++) {
                System.out.println("between " + i + " and " + j + "  =  "
                                   + new CosineSimilarity().getCosine
                                       (
                                         tfidfDocsVector.get(i), 
                                         tfidfDocsVector.get(j)
                                       )
                                  );
            }
        }
    }
}

2 ответа

Этот блок кода:

for(String file : files) {
    DocumentParser dp = new DocumentParser();
    dp.parseFiles(file);
    dp.getCosineMatrix();
}

Не в рамках метода, но должно быть.

Попробуйте переместить его внутрь main() метод.

public class TfIdfMain {

    String[] files = {"doc1.txt", "doc2.txt", "doc3.txt" , "doc4.txt", "doc5.txt"};

    public static void main(String args[]) throws FileNotFoundException, IOException) {
        for(String file : files) {
            DocumentParser dp = new DocumentParser();
            dp.parseFiles(file);
            dp.getCosineMatrix();
        }
    }
}

Обратите внимание, что я исправил другие проблемы с вашим кодом.

Вероятно, вы должны просто сделать это в верхней части вашего класса анализатора:

import java.util.*;

так как вы не импортировали это, что дает вам реальную ошибку,

Форматирование кода в вашей IDE действительно помогло бы вам понять, что с ним не так.

1) Существует ошибка, при которой массивы не могут быть разрешены вокруг строки моего массива в parser.java

Вы должны импортировать класс Arrays как:

import java.util.Arrays;

2) ошибка, как эта Несколько маркеров в этой строке в моем основном классе

Честно говоря, это беспорядок в вашем коде. Где ты это взял? Вероятно, это должно быть:

String[] files = {"doc1.txt", "doc2.txt", "doc3.txt", "doc4.txt", "doc5.txt"};

public static void main(String args[]) throws FileNotFoundException, IOException {
    DocumentParser dp = new DocumentParser();
    dp.parseFiles("C:\\Users\\dachen\\Documents");
    dp.getCosineMatrix();

    for (String file : files) {
        DocumentParser dp = new DocumentParser();
        dp.parseFiles(file);
        dp.getCosineMatrix();
    }

}
Другие вопросы по тегам