Инвертированный индекс, где я могу сохранить кортеж слова вместе с идентификатором, откуда оно взято - PullRequest
0 голосов
/ 14 января 2019

Я создал следующий класс для реализации инвертированного индекса в Python. Я читаю вопросы из пары вопросов о кворе. Вопросы в этой форме:

---------------------------
qid  |question         
---------------------------
  1  |Why do we exist?
  2  |Is there life on Mars?
  3  |What happens after death?
  4  |Why are bananas yellow?

Проблема в том, что я хочу, чтобы qid передавался вместе с каждым словом в инвертированном индексе, чтобы я знал после его создания, из какого вопроса происходит каждое слово, и легко к нему обращаюсь.

class Index:
    """ Inverted index datastructure """

    def __init__(self):
        self.index = defaultdict(list)
        self.documents = {}
        self.__unique_id = 0


    def lookup(self, word):
        """
        Lookup a word in the index
        """
        word = word.lower()
        if self.stemmer:
            word = self.stemmer.stem(word)

        return [self.documents.get(id, None) for id in self.index.get(word)]


    def addProcessed(self, words):
        """
        Add a document string to the index
        """
        for word in words:
            if self.__unique_id not in self.index[word]:
                self.index[word].append(self.__unique_id)

        self.documents[self.__unique_id] = words
        self.__unique_id += 1

Как я могу реализовать это в моей структуре данных выше?

1 Ответ

0 голосов
/ 14 января 2019

Простой способ получить qid в вашем индексе - написать Index.addProcessed для получения qid в качестве второго аргумента и включить его в значение, установленное для ключа unique_id в документах.

def addProcessed(self, words, qid):
    #...
    self.documents[self.__unique_id] = (words, qid)
    self.__unique_id += 1

Index.lookup вернет список кортежей, состоящих из слов и идентификатора их вопроса.

...