【发布时间】:2016-10-26 17:18:15
【问题描述】:
我想创建一个反向索引,意味着
如果我在多文档中有一个术语,结果将是这样的
term 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(fileName);
我不知道是什么问题,请帮帮我
【问题讨论】:
-
提示:这里的主要语言是英语。拥有使用其他“语言”的代码输入通常意味着您将收到很多积极/有用的输入。并且 - 如果完全一致的话。要么使用法语,要么只使用英语。但不要混用。
-
实际上,由于编程语言通常是基于英语的,代码和变量名称都是英语,而所有字符串和 cmets 都是另一种语言,这似乎很合理。
-
那么:您的代码输入的格式/缩进非常糟糕。我花了 3 分钟的时间阅读,直到我发现事实上,在那乱七八糟的地方有一个方法声明。你想让我们花时间来帮助我们,但是你把这样的烂摊子扔在这里?请编辑您的意见并改进这些内容!下一次:从 可读 输入开始!
-
TreeSet
set = st.get(word);空指针异常,因为您从未为该键(或任何键)向 Map 添加值。 -
@BillK 我自己也遇到过很多次这种情况,我的想法是:关键字就是关键字,必须知道。但其他的都是命名;并因此与该源代码的作者/读者的语言相关联。重点是:要完全掌握上述代码,需要对法语和英语有一定程度的理解。因此,当您继续前进时(例如,您将代码开源;或者您在其他国家/地区的公司开发人员 - 将所有 cmets 翻译成英文很有趣)。
标签: java