将元素添加到treeSet中:信息检索

时间:2016-10-26 17:18:16

标签: java

我想创建一个意味着

的反向索引

如果我在多文档中有条款,结果就像这样

术语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(文件名);

我不知道有什么问题请帮帮我

1 个答案:

答案 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:我编辑了你的问题,所以你可以看到差异(并防止你被关闭)。格式化的主要问题是使用制表符..对于程序员标签是 - 好吧,我们只是说它们只能在非常受控的条件下工作。在这种情况下,在编辑时观看预览窗格(在编辑框下方)确实很有帮助 - 在提交之前向下滚动以查看我们将实际看到的内容。