Исправление ошибки запуска массива в моем анализаторе 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();
}
}