UNPKG

node-searcher

Version:
256 lines (221 loc) 5.18 kB
/* */ "use strict"; var MongoClient = require("mongodb").MongoClient , text = require('./lib/text') , frequency = require('./lib/text/frequency') ; function Searcher(db, collection, freq) { if ('string' == typeof db) { this.url = db; // 'mongodb://127.0.0.1:27017/test' } else { this.db = db; } this.collection = collection; this.field = ['k', 'c', 'v']; // this.freq = freq; // freq = {'meta.tf': COLL_OF}; return this; } Searcher.prototype.open = function (callback) { if (this.db) { return callback(null, this.db); } else { MongoClient.connect(this.url, function (err, db) { callback(err, db); }); } }; // 引数チェック Searcher.prototype.check = function (params) { params.collection = params.collection || this.collection; }; /** * * @param src * @param condition * @param attribute * @param callback var FIELD = ['k', 'c', 'w']; var URL = 'mongodb://127.0.0.1:27017/test'; var source = { collection: 'mails.files', attribute: 'metadata.tf', option: { condition: { 'contentType': 'text/plain' } } }; var searcher = new Searcher(URL, FIELD); searcher.parse(source, function (err, count) { */ Searcher.prototype.parse = function (source, callback) { var field = this.field; var freq = this.freq; this.check(source); this.open(function (err, db) { if (err) { callback(err); } else { text.batch(db, source, field, function (err, count) { if (err) { db.close(); callback(err); } else { frequency.tfiof(db, source, freq, field, function (err) { db.close(); callback(err); }); } }); } }); }; /** * * @param target * @param source * @param callback var FREQ = {'tf': 'mails.of'}; var target = { collection: 'mails', attribute: 'tf', option: { condition: {} } }; var source = { collection: 'mails.files', attribute: 'metadata.tf', key: 'metadata.parent', option: { condition: {} } }; var searcher = new Searcher(URL, FIELD, FREQ); searcher.indexing(target, source, function (err) { */ Searcher.prototype.indexing = function (target, source, callback) { var freq = this.freq; var field = this.field; this.check(target); this.check(source); this.open(function (err, db) { if (err) { callback(err); } else { frequency.countup(db, target, source, field, function (err) { if (err) { db.close(); callback(err); } else { frequency.object_frequency(db, target, freq, field, function (err) { if (err) { db.close(); callback(err); } else { frequency.tfiof(db, target, freq, field, function (err) { db.close(); callback(err); }); } }); } }); } }); }; /** * * @param collection * @param condition * @param option * @param callback var target = { collection: 'mails', option: { condition: { 'tf': '先日フジテレビでラーメン' }, copy: ['subject'], out: 'mails.search.result' } }; var searcher = new Searcher(URL, FIELD, FREQ); searcher.search(collection, condition, option, function (err) { */ Searcher.prototype.search = function (target, callback) { var freq = this.freq; var field = this.field; this.check(target); this.open(function (err, db) { if (err) { callback(err); } else { text.search(db, target, freq, field, function (err) { db.close(); callback(err); }); } }); }; /** * 相互類似度 * @param source * @param callback var source = { collection: 'mails', attribute: 'tf', option: { out: 'mails.mutual' } }; */ Searcher.prototype.mutualize = function (source, callback) { var field = this.field; this.check(source); this.open(function (err, db) { if (err) { callback(err); } else { frequency.mutualize(db, source, field, function (err) { db.close(); callback(err); }); } }); }; /** * 主座標分析 * →「R」が実行可能な場合、類似検索結果に対して主座標分析を行うことができる。 * @param target 検索結果コレクション ({x, y}アトリビュート指定) * @param source ofコレクション * @param callback var target = { collection: 'mails.search.result', attribute: 'tf', option: { field: ['x, 'y'] } }; var source = { collection: 'mails.mutual', option: { } }; */ Searcher.prototype.cmdscale = function (target, source, callback) { this.check(target); this.check(source); this.open(function (err, db) { if (err) { callback(err); } else { frequency.cmdscale(db, target, source, function (err) { db.close(); callback(err); }); } }); }; module.exports = Searcher;