首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Sqlite -仅选择包含多个单词的行的跨度

Python Sqlite -仅选择包含多个单词的行的跨度
EN

Stack Overflow用户
提问于 2013-05-22 19:40:47
回答 1查看 137关注 0票数 0

我在Sqlite表中有一本书,每行有一句话。有超过30k行/句子,这个表的格式不能改变(它会破坏太多的其他东西)。

我还有几个不同的I跨度,或多或少地将这本书分成了几个段落。它们是列表中的元组,即(0,2),(3,6),(7,10) ...或(0,3),(4,9),(10,13) ...等。

我需要能够返回包含两个或更多单词的跨度。也就是说,在相同的跨度/段落中找到“水”和“土”在一起。

我查看了使用GROUP_CONCANT组合句子的每组跨度来制作视图,但无法找到方法,因为视图不能被附加。

进行数千次select调用,如“SELECT* IN book WHERE ID BETWEEN ? AND ?AND...”似乎效率不高。

有没有一种方法可以用一条语句返回命中的跨度,或者使用临时表组合它们?

EN

回答 1

Stack Overflow用户

发布于 2013-05-22 20:35:45

如果它们是连续的(或者您可以强制按ID排序以与您的跨度相关联),那么您可以使用Python进行分组,只需将任意键应用于每个组,然后将其用作groupby的一部分。例如:

代码语言:javascript
复制
from itertools import repeat, izip, chain, groupby
from operator import itemgetter

testdata = [str(i) for i in range(10)]

spans = [(0,2), (3,6), (7,10)]    
groups = chain.from_iterable(repeat(idx, e - s + 1) for idx, (s, e) in enumerate(spans))

for k, g in groupby(izip(testdata, groups), itemgetter(1)):
    words = set(chain.from_iterable(el[0].split() for el in g))
    if words.issuperset(['3', '6']): 
        print words

您将需要修改它如何拆分单词和选择匹配的内容,但它仍然是一个可能的选项。

如果您经常这样做,您可能希望考虑创建一个额外的表,其中包含表示段落(而不是句子)的单个列,并在该列上应用full text index,这将使以后的查询更容易。您可以利用上面的代码来帮助构建该表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16690814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档