我想创建一个意味着
的反向索引如果我在多文档中有条款,结果就像这样
术语1 = [doc1],term2 = [doc2,doc3,doc4] ....
这是我的代码:
public class TP3 {
private static String DIRNAME = "/home/amal/Téléchargements/lemonde";
private static String STOPWORDS_FILENAME = "/home/amal/Téléchargements/lemonde/frenchST.txt";
public static TreeMap<String, TreeSet<String>> getInvertedFile(File dir, Normalizer normalizer) throws IOException {
TreeMap<String, TreeSet<String>> st = new TreeMap<String, TreeSet<String>>();
ArrayList<String> wordsInFile;
ArrayList<String> words;
String wordLC;
if (dir.isDirectory()) {
String[] fileNames = dir.list();
Integer number;
for (String fileName : fileNames) {
System.err.println("Analyse du fichier " + fileName);
wordsInFile = new ArrayList<String>();
words = normalizer.normalize(new File(dir, fileName));
for (String word : words) {
wordLC = word.toLowerCase();
if (!wordsInFile.contains(word)) {
TreeSet<String> set = st.get(word);
set.add(fileName);
}
}
}
}
for (Map.Entry<String, TreeSet<String>> hit : st.entrySet()) {
System.out.println(hit.getKey() + "\t" + hit.getValue());
}
return st;
}
}
我有一个错误的
set.add(文件名);
我不知道有什么问题请帮帮我
答案 0 :(得分:0)
你的主要问题是这两行不会很好:
if (!wordsInFile.contains(word)) {
TreeSet<String> set = st.get(word);
你永远不会把一个集合放入st所以set将为null。在这一行之后你应该有类似的东西:
if(set == null)
{
set = new TreeSet<String>();
st.put(word, set);
}
那应该可以解决你当前的问题。
下次提示,未来有相同问题的用户会重新阅读此内容并代表您(将来有人会在面试您的工作时阅读此问题!)
花一些时间格式化它,考虑你的读者。修剪注释并更正缩进,不要只是粘贴并运行。还发布了一点错误堆栈跟踪 - 它们非常有用!如果你发布它,那将是一个“NullPointerException”,在那一行上真的只有一种方法可以获得NPE,它可以让我们不得不分析你的代码。
PS:我编辑了你的问题,所以你可以看到差异(并防止你被关闭)。格式化的主要问题是使用制表符..对于程序员标签是 - 好吧,我们只是说它们只能在非常受控的条件下工作。在这种情况下,在编辑时观看预览窗格(在编辑框下方)确实很有帮助 - 在提交之前向下滚动以查看我们将实际看到的内容。