Also im Grunde ist dies ein Parser/Cosinus-Matrix-Rechner, aber ich bekomme immer Kompilierfehler. Ich denke, ich habe den Weg für meine Eingabe, die Textdatei richtig zu lesen. Aber es wird immer noch nicht kompilieren.Kompilieren Fehler in meinem Parser, denke ich habe meine Eingabedatei falsch, aber unsicher, was falsch
Das ist meine Hauptklasse:
import java.io.FileNotFoundException;
import java.io.IOException;
public class TfIdfMain {
public static void main(String args[]) throws FileNotFoundException, IOException {
DocumentParser dp = new DocumentParser();
dp.parseFiles("C:/Users/dachen/Documents/doc1.txt"); // give the location of source file
dp.tfIdfCalculator(); //calculates tfidf
dp.getCosineSimilarity(); //calculates cosine similarity
}
}
Meine Parser-Klasse:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class DocumentParser {
//This variable will hold all terms of each document in an array.
private List<String[]> termsDocsArray = new ArrayList<String[]>();
private List<String> allTerms = new ArrayList<String>(); //to hold all terms
private List<double[]> tfidfDocsVector = new ArrayList<double[]>();
/**
* Method to read files and store in array.
*/
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)) { //avoid duplicate entry
allTerms.add(term);
}
}
termsDocsArray.add(tokenizedTerms);
}
}
}
/**
* Method to create termVector according to its tfidf score.
*/
public void tfIdfCalculator() {
double tf; //term frequency
double idf; //inverse document frequency
double tfidf; //term requency inverse document frequency
for (String[] docTermsArray : termsDocsArray) {
double[] tfidfvectors = new double[allTerms.size()];
int count = 0;
for (String terms : allTerms) {
tf = new TfIdf().tfCalculator(docTermsArray, terms);
idf = new TfIdf().idfCalculator(termsDocsArray, terms);
tfidf = tf * idf;
tfidfvectors[count] = tfidf;
count++;
}
tfidfDocsVector.add(tfidfvectors); //storing document vectors;
}
}
/**
* Method to calculate cosine similarity between all the documents.
*/
public void getCosineSimilarity() {
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().cosineSimilarity
(
tfidfDocsVector.get(i),
tfidfDocsVector.get(j)
)
);
}
}
}
}
Das ist mein Fehler:
Exception in thread "main" java.lang.NullPointerException
at DocumentParser.parseFiles(DocumentParser.java:22)
at TfIdfMain.main(TfIdfMain.java:7)
Habe ich den Pfad zur Textdatei in meinem Dokument falsch eingegeben?
Ich bin verwirrt - Sie sagen, Sie bekommen einen Kompilierungsfehler, aber dann zeigen Sie stattdessen eine Laufzeit Ausnahme. Könntest Du das erläutern? – ruakh
Leider ich nicht, wo die Laufzeitfehler aus, Exception in thread "main" java.lang.NullPointerException \t bei DocumentParser.parseFiles (DocumentParser.java:22) \t bei TfIdfMain.main ist (TfIdfMain.java:7 –