Python:列表/集合的交集

2024-03-29 11:51:50 发布

您现在位置:Python中文网/ 问答频道 /正文

def boolean_search_and(self, text):

    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.\u inversed_index是一个字典,它将标记保存为键,值是出现键/令牌的docid。在

您好->;[1,2,5,6]
世界->;[1,3,5,7,8]
结果:
你好和世界->;[1,5]

我希望取得以下成果: 说, ((你好和计算机)和科学和世界)

我正在努力使这个工作为多个词,而不是两个。我今早开始用python工作,所以我不知道它提供了很多特性。在

有什么想法吗?在


Tags: andterm1textingtselfindexresults
2条回答

I want to generalize it for multiple tokens

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)

内置的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])

相关问题 更多 >