【发布时间】:2014-02-17 17:45:50
【问题描述】:
我一直在标记一个非常大的语料库。每个 Unigram 可以多次出现在多个评论中。我将 Comment.ids 存储在附加到数据库中 Unigram 的列表中,每 25 万个新计算的 unigrams 左右。我想知道是否有一种方法可以扩展评论 id 列表(或类似的数据结构),而无需查询和加载与 Unigram 相关的现有 cmets 列表(它的数量可以达到数千个)。还是没有办法绕过缓慢的 IO?
这是我的型号代码:
comments = db.Table('ngrams',
db.Column('unigram_id', db.String, db.ForeignKey('comment.id')),
db.Column('comment_id', db.String, db.ForeignKey('unigram.id')))
class Unigram(db.Model):
id = db.Column(db.String, primary_key=True, unique=True)
times_occurred = db.Column(db.Integer)
occurs_in = db.relationship('Comment', secondary=comments,
backref=db.backref('unigrams', lazy='dynamic'))
class Comment(db.Model):
id = db.Column(db.String, primary_key=True, unique=True)
creation_time = db.Column(db.DateTime)
以及添加新计数和 Comment.ids 的代码:
current = Unigram.query.filter(Unigram.id == ngram).first()
if current:
current.times_occurred += counts[ngram]['count']
current.occurs_in.extend(counts[ngram]['occurences'])
else:
current = Unigram(ngram, counts[ngram]['count'],
counts[ngram]['occurences'])
db.session.add(current)
【问题讨论】:
-
你能澄清一下
... database every 250K newly counted unigrams ...吗?您的意思是该列表每增加约 250K 个新 unigram 就更新一次?您还可以谈谈数据集,它是实时数据集还是静态数据集(?)。通常这样的东西会变成一个稀疏矩阵,你不这样做有什么原因吗? -
@MattiLyra 这是一个静态数据集。当我标记了 ~250K unigram 时,我会将计数从内存传输到数据库。在内存中,我将它们散列到一个字典中,其中键是 unigram,值是另一个包含出现计数和 comment_ids 的字典。从关于稀疏矩阵的 wiki 文章中,我认为字典属于该范围。
标签: python sql orm many-to-many flask-sqlalchemy