Last active
December 20, 2015 12:29
-
-
Save hirokiky/6131093 to your computer and use it in GitHub Desktop.
MongoDB backend class for a document filter on https://bitbucket.org/knzm/collective/src/default/ch6/docclass.py.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MongoDBBackend(object): | |
def __init__(self, db, user): | |
self.db = db | |
self.user = user | |
def inc_feature(self, feature, cat): | |
"""特徴 feature がカテゴリ cat に出現した回数を 1 増やす""" | |
features = self.db.features.find({'user': self.user, | |
'feature': feature, | |
'category': cat}) | |
if features.count(): | |
self.db.features.update({'user': self.user, | |
'feature': feature, | |
'category': cat}, | |
{'$inc': {'count': 1.0}}) | |
else: | |
self.db.features.insert({'user': self.user, | |
'feature': feature, | |
'category': cat, | |
'count': 1.0}) | |
def inc_category(self, cat): | |
"""カテゴリ cat が出現した回数を 1 増やす""" | |
categories = self.db.categories.find({'user': self.user, | |
'category': cat}) | |
if categories.count(): | |
self.db.categories.update({'user': self.user, | |
'category': cat}, | |
{'$inc': {'count': 1}}) | |
else: | |
self.db.categories.insert({'user': self.user, | |
'category': cat, | |
'count': 1}) | |
def get_feature_count(self, f, cat): | |
"""特徴 feature がカテゴリ cat に出現した回数を返す""" | |
feature = self.db.features.find_one({'user': self.user, | |
'feature': f, | |
'category': cat}) | |
if feature: | |
return float(feature['count']) | |
else: | |
return 0.0 | |
def get_cat_count(self, cat): | |
"""カテゴリ cat が出現した回数を返す""" | |
category = self.db.categories.find_one({'user': self.user, | |
'category': cat}) | |
if category: | |
return category['count'] | |
else: | |
return 0 | |
def total_count(self): | |
"""すべてのカテゴリの出現回数を返す""" | |
r = self.db.categories.aggregate([ | |
{'$group': {'_id': None, | |
'total': {'$sum': '$count'}}} | |
]) | |
return r['result'][0]['total'] | |
def categories(self): | |
"""すべてのカテゴリのリストを返す""" | |
return map(lambda x: x['category'], | |
self.db.categories.find({'user': self.user})) | |
def commit(self): | |
"""学習結果を保存する""" | |
pass |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment