Поиск фразы в перевернутом индексе

Я реализую очень элементарный инвертированный индекс, и у меня возникают проблемы с реализацией метода поиска по фразе.

У меня есть следующая структура:

InvertedIndex.java: здесь у меня есть структура данных:

private Map<String, ArrayList<Postings>> index = new HashMap<String, ArrayList<Postings>>(); 

где я храню слово и список публикаций со всеми docId и соответствующими позициями терминов в документе.

Мой класс Postings.java имеет следующую структуру:

private Map<String, ArrayList<Integer>> postings; 

У меня есть геттеры и сеттеры для всех этих структур данных, поэтому я не включаю их, потому что это будет слишком много для этого поста. Строка - это docId, и Arraylist содержит все позиции в документе для слова.

У меня есть класс, где я реализую следующий метод для поиска по фразе:

    public ArrayList<String> searchByPhrase(String...terms){
        if (terms == null || terms.length < 2){
            return null; 
        }

        ArrayList<String> documents = new ArrayList<String>(); 

        for (int i = 0; i < terms.length; i++){
            ArrayList<Postings> postings1 = index.getPostings(terms[i]);
            if ((i + 1) < terms.length){
                ArrayList<Postings> postings2 = index.getPostings(terms[i+1]);

                int smaller = 0; 
                if (postings2.size() < postings1.size()){
                    smaller = postings2.size(); 
                }
                else {
                    smaller = postings1.size(); 
                }

                for (int j = 0; j < smaller; j++){
                        Postings p1 = postings1.get(j); 
                        Postings p2 = postings2.get(j); 
                        if (p1.containsID(p2.getDocId())){
                            System.out.println("FOUND MATCHING DOC");
                            //Do position checking in here
                        }   
                }
            }

        }


        return documents; 
    }

Я знаю, что в рамках этого метода я должен проверить, чтобы позиции находились в одном месте друг от друга. Я еще не реализовал это, потому что сначала хочу найти одинаковые документы (чего сейчас нет). Когда я запускаю это, я ничего не возвращаю, и у меня есть различные документы, которые я знаю, разделяю слова.

Я хочу, чтобы этот метод мог искать термины разных размеров ("Привет, мир", "Большое спасибо за вашу помощь" и т. Д....). Я чувствую, что я слишком усложняю это, но я очень потерян, как справиться с этим. Мы ценим любые предложения.

0 ответов

Другие вопросы по тегам