Python: пересечение списков / множеств - PullRequest
1 голос
/ 13 сентября 2010

def boolean_search_and(self, text):</p> <pre><code> results = [] and_tokens = self.tokenize(text) tokencount = len(and_tokens) term1 = and_tokens[0] print ' term 1:', term1 term2 = and_tokens[1] print ' term 2:', term2 #for term in and_tokens: if term1 in self._inverted_index.keys(): resultlist1 = self._inverted_index[term1] print resultlist1 if term2 in self._inverted_index.keys(): resultlist2 = self._inverted_index[term2] print resultlist2 #intersection of two sets casted into a list results = list(set(resultlist1) & set(resultlist2)) print 'results:', results return str(results)

Этот код прекрасно работает для двух токенов, например: text = "Hello World" и так, tokens = ['hello', 'world']. Я хочу обобщить его для нескольких токенов, чтобы текст мог быть предложением или целым текстовым файлом.
self._inverted_index - это словарь, который сохраняет токены в качестве ключей, а значения - это DocID, в которых встречаются ключи / токены.

привет -> [1,2,5,6]
мир -> [1,3,5,7,8]
результат:
привет и мир -> [1,5]

Я хочу добиться результата для: сказать, (((привет И компьютер) И наука) И мир)

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

Я хочу обобщить это для нескольких токенов

def boolean_search_and_multi(self, text):
    and_tokens = self.tokenize(text)
    results = set(self._inverted_index[and_tokens[0]])
    for tok in and_tokens[1:]:
        results.intersection_update(self._inverted_index[tok])
    return list(results)
0 голосов
/ 13 сентября 2010

Будет ли работать встроенный тип set для вас?

$ python
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> hello = set([1,2,5,6])
>>> world = set([1,3,5,7,8])
>>> hello & world
set([1, 5])
...