- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在一个有大约 400 万条记录的 python sqlite3 数据库中有以下信息。
Term No of articles Article Ids
Obama 300 [411,523,534, …. 846]
Gandhi 3900 [23,32,33…..4578]
Mandela 3900 [21,14,56,145 …4536]
George Bush 450 [230,310 … 700]
Tony Blair 350 [225,320 … 800]
Justin Bieber 25 [401 , 420, 690 …. 904]
Lionel Messi 150 [23, 78, …… 570]
“文章 ID”是一个包含 ID 列表的 blob(由 API 返回)
我的任务是从 ID 列表中为每个术语找到公共(public) ID,并将它们保存在“relationships.db”中
如何建立关系,找到哪些文章同时谈论甘地和曼德拉(相交的文章 ID)?
relationships.db 应该是这样的;
Term 1 Term 2 No of Common Article Ids Common Article IDS
Obama Gandhi 17 [34,123,25 ...]
Obama Mandela 43 [145,111,234,456 ....]
Obama George Bush 46
Obama Tony Blair 2
Obama Justin Bieber 36
Obama Lionel Messi 3
Gandhi Mandela 40
Gandhi George Bush 41
Gandhi Tony Blair 32
Gandhi Justin Bieber 31
Gandhi Lionel Messi 20
Mandela George Bush 20
Mandela Tony Blair 11
Mandela Justin Bieber 19
Mandela Lionel Messi 39
George Bush Tony Blair 46
George Bush Justin Bieber 49
George Bush Lionel Messi 2
Tony Blair Justin Bieber 50
Tony Blair Lionel Messi 3
Justin Bieber Lionel Messi 6
使用“for 循环”循环遍历每个术语以获得交集是很痛苦的。有没有一种有效的方法来做到这一点?在“内存”和“速度”之间会有取舍吗?
最佳答案
评论暗示了这一点,但不可能(或至少很难)在信息仍在 BLOB 中时对其进行处理。如果重组数据库,您可以取得更大的进步:
Term Article_id
Ghandi 33
Obama 411
Obama 523
Ghandi 23
Obama 846
...
Mandela 23
这种“平面”表示有一些优点。首先,它使添加新文章变得容易,您不必提取 blob。其次,通过适当的索引,您可以轻松恢复原始计数:
SELECT COUNT(*) FROM news WHERE Term="Ghandi"`
如果需要,这些可以存储在单独的表中。要提取联合文章,您可以搜索如下内容:
SELECT A.Article_id, A.Term, B.Term FROM news AS A
JOIN news AS B ON A.Article_id = B.Article_id
AND A.Term != B.Term
请注意,这会重复计算,但很容易纠正。这是一个完整的最小工作示例,其中修改了表格以显示更多匹配项:
import sqlite3
conn = sqlite3.connect(":memory:")
raw_items = '''
Ghandi 33
Obama 411
Obama 521
Ghandi 23
Obama 21
Ghandi 411
Mandela 21'''
script = '''
CREATE TABLE news (
Term STRING,
Article_id INTEGER
);'''
conn.executescript(script)
items = [line.split() for line in raw_items.strip().split('\n')]
conn.executemany("INSERT INTO news VALUES (?,?)", items)
cmd = '''SELECT COUNT(*) FROM news WHERE Term="Obama"'''
print "Obama size: ", conn.execute(cmd).fetchone()
cmd = '''
SELECT A.Article_id, A.Term, B.Term FROM news AS A
JOIN news AS B ON A.Article_id = B.Article_id
AND A.Term != B.Term '''
for result in conn.execute(cmd).fetchall():
print result
这给出:
Obama size: (3,)
(411, u'Obama', u'Ghandi')
(21, u'Obama', u'Mandela')
(411, u'Ghandi', u'Obama')
(21, u'Mandela', u'Obama')
关于python - 为数百万个术语建立多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24937167/
我正在使用 drupal 6.20 以及一些模块,包括面板、 View 和其他一些模块.. 问题是,每当我尝试启用面板提供的分类法覆盖页面时,我都会收到此错误,我修改了它等等,我似乎找不到一种方法来启
我正在寻找在类(非静态)中声明的实例变量的替代 OO/Java 术语,或者更具体地说,在用 JPA 注释“装饰”的 Java 类中声明的实例变量: @Entity @Table(name = "Dep
字母“t”在 LISP 中是什么意思? 例如: (defun last2 (lst) (cond ((null lst) nil) ((null (cdr lst)) (car l
我是 Java 的新手,想了解更多。我有一个当前问题想要得到解答,但我也想知道该技术指的是什么,以便我可以做一些进一步的阅读。 我目前有这样的东西: public class BasicActivit
是否有针对 HTML 标签的术语来区分哪些应该有结束标签,哪些不应该? 例如,和 应该有伴随 和 标签。 另一方面,和 不应该。 第一组叫什么,第二组叫什么? 最佳答案 我相信 是一个“空元素”,而不
基本上,问题已经总结在标题中。如果我们在不同的命名空间中有两个具有相同签名(即相同的名称、参数类型和顺序、泛型类型参数编号)的方法/函数,这算不算重载? 这是一个 C# 问题,但我很想为不同的 OOP
在 OO 范式中,我们选择使用类,因为它们可以帮助我们分解系统,并提供很好的附带好处,例如封装、职责分离、继承、模块化等。 如果我们在组件级别查看软件系统,我们是否可以简单地以相同的概念方式对待组件,
创建拉取请求和打开拉取请求之间有区别吗? 创建拉取请求的一些短语示例: 创建一个拉取请求以提议和协作对存储库的更改。 您可以在创建拉取请求时指定要将更改合并到哪个分支。 要创建草稿拉取请求,请使用下拉
我发现this script可以循环遍历.csv文件并将它们组合成一个Excel工作表。然后,我创建了第二个脚本,以如下方式调用该脚本: echo "Combining .csv files into
我忘记了 javascript 中用来描述特定现象的术语。它与内联函数中访问变量的方式有关。我也不太明白这个理论。我依稀记得下面的代码 for(var c = 0; c< 10; c++) { a
如何清除Java中的标准输入(术语)? 一点历史:我正在编写一个“反射”程序,算法非常简单: wait a random amount of time print "press enter" read
给定以下代码,是否存在一个静态方法的名称/术语,它为每个现有实例调用同名的实例方法? 这是任何编程语言的常见做法吗? 用例是能够进行一个函数调用并确保所有实例都受到影响,而无需为该方法复制代码。 注意
这个问题在这里已经有了答案: Accessing nested JavaScript objects and arrays by string path (44 个答案) 关闭 6 年前。 我需要澄
我的目标是从给定的输入文件中读取每行的第一个元素/术语,然后根据第一个元素是什么来决定要做什么(使用 if-else 构造)。 IE。如果第一个元素/单词恰好是“the”(如下面的代码中所述),那么我
在 Java 中,对象 可以有一个运行时类型(这是它创建时的类型)和一个转换类型(您将其转换为的类型)。 我想知道这些类型的正确名称是什么。例如 class A { } class B extends
根据 Python 2.7.12 文档,User-defined methods : User-defined method objects may be created when getting a
据我所知,nbsp(不间断空格)是这样的:。但制表符 (\t) 也是不间断空格,对吗?我的意思是它不会创建新行。 如果上述所有内容都是正确的,那么如何调用可以包含 或 \t 的变量?像 tabOrNb
我使用 GAS 已经有一段时间了,但没有很强的 Javascript 背景,并且在忽略大小写的情况下按字母顺序对工作表进行排序时遇到了问题。我做了一些搜索,并根据 SO 中的其他公开答案和其他一些来源
我是初学者,我在编程中发现了术语指针的几种定义。我想知道哪一个是正确的(也许两个都是)? a - 指针是保存内存地址的变量。鉴于此定义,在以下代码 char *msg; 中,我们可以说变量 msg 是
给定以下分支 A---B---C topic (HEAD) / D---E---F---G master 并运行命令 git rebase master 这是否意味着,我们是 将 t
我是一名优秀的程序员,十分优秀!