From 191cf7d995a9b81bc964e766f2d2cd488e27ef14 Mon Sep 17 00:00:00 2001 From: Anshuman Dutta Date: Sat, 17 Jan 2026 18:23:04 +0530 Subject: [PATCH] Implement Dataset recommendation system in databus for several analysis #39 --- package-lock.json | 986 ++++-------------- .../java/chatbot/lib/api/DatabusService.java | 83 ++ .../chatbot/lib/handlers/TemplateHandler.java | 77 +- .../dbpedia/DatasetTemplateHandler.java | 59 +- .../chatbot/lib/request/TemplateType.java | 1 + .../resources/rivescript/dbpedia-databus.rive | 17 + 6 files changed, 373 insertions(+), 850 deletions(-) create mode 100644 src/main/java/chatbot/lib/api/DatabusService.java create mode 100644 src/main/resources/rivescript/dbpedia-databus.rive diff --git a/package-lock.json b/package-lock.json index 6931719..c496617 100644 --- a/package-lock.json +++ b/package-lock.json @@ -201,7 +201,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.2", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -311,25 +310,14 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "optional": true, - "requires": { - "nan": "2.6.2", - "node-pre-gyp": "0.6.36" - }, "dependencies": { "abbrev": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "ajv": { "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } + "bundled": true }, "ansi-regex": { "version": "2.1.1", @@ -337,42 +325,31 @@ }, "aproba": { "version": "1.1.1", - "bundled": true, - "optional": true + "bundled": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } + "bundled": true }, "asn1": { "version": "0.2.3", - "bundled": true, - "optional": true + "bundled": true }, "assert-plus": { "version": "0.2.0", - "bundled": true, - "optional": true + "bundled": true }, "asynckit": { "version": "0.4.0", - "bundled": true, - "optional": true + "bundled": true }, "aws-sign2": { "version": "0.6.0", - "bundled": true, - "optional": true + "bundled": true }, "aws4": { "version": "1.6.0", - "bundled": true, - "optional": true + "bundled": true }, "balanced-match": { "version": "0.4.2", @@ -380,33 +357,19 @@ }, "bcrypt-pbkdf": { "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } + "bundled": true }, "block-stream": { "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } + "bundled": true }, "boom": { "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } + "bundled": true }, "brace-expansion": { "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } + "bundled": true }, "buffer-shims": { "version": "1.0.0", @@ -414,13 +377,11 @@ }, "caseless": { "version": "0.12.0", - "bundled": true, - "optional": true + "bundled": true }, "co": { "version": "4.6.0", - "bundled": true, - "optional": true + "bundled": true }, "code-point-at": { "version": "1.1.0", @@ -428,10 +389,7 @@ }, "combined-stream": { "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } + "bundled": true }, "concat-map": { "version": "0.0.1", @@ -447,39 +405,25 @@ }, "cryptiles": { "version": "2.0.5", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } + "bundled": true }, "dashdash": { "version": "1.14.1", "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true } } }, "debug": { "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } + "bundled": true }, "deep-extend": { "version": "0.4.2", - "bundled": true, - "optional": true + "bundled": true }, "delayed-stream": { "version": "1.0.0", @@ -487,21 +431,15 @@ }, "delegates": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "ecc-jsbn": { "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } + "bundled": true }, "extend": { "version": "3.0.1", - "bundled": true, - "optional": true + "bundled": true }, "extsprintf": { "version": "1.0.2", @@ -509,18 +447,11 @@ }, "forever-agent": { "version": "0.6.1", - "bundled": true, - "optional": true + "bundled": true }, "form-data": { "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } + "bundled": true }, "fs.realpath": { "version": "1.0.0", @@ -528,65 +459,29 @@ }, "fstream": { "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } + "bundled": true }, "fstream-ignore": { "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "bundled": true }, "gauge": { "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } + "bundled": true }, "getpass": { "version": "0.1.7", "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true } } }, "glob": { "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } + "bundled": true }, "graceful-fs": { "version": "4.1.11", @@ -594,33 +489,19 @@ }, "har-schema": { "version": "1.0.5", - "bundled": true, - "optional": true + "bundled": true }, "har-validator": { "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } + "bundled": true }, "has-unicode": { "version": "2.0.1", - "bundled": true, - "optional": true + "bundled": true }, "hawk": { "version": "3.1.3", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } + "bundled": true }, "hoek": { "version": "2.16.3", @@ -628,21 +509,11 @@ }, "http-signature": { "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } + "bundled": true }, "inflight": { "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } + "bundled": true }, "inherits": { "version": "2.0.3", @@ -650,20 +521,15 @@ }, "ini": { "version": "1.3.4", - "bundled": true, - "optional": true + "bundled": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } + "bundled": true }, "is-typedarray": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "isarray": { "version": "1.0.0", @@ -671,60 +537,39 @@ }, "isstream": { "version": "0.1.2", - "bundled": true, - "optional": true + "bundled": true }, "jodid25519": { "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } + "bundled": true }, "jsbn": { "version": "0.1.1", - "bundled": true, - "optional": true + "bundled": true }, "json-schema": { "version": "0.2.3", - "bundled": true, - "optional": true + "bundled": true }, "json-stable-stringify": { "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } + "bundled": true }, "json-stringify-safe": { "version": "5.0.1", - "bundled": true, - "optional": true + "bundled": true }, "jsonify": { "version": "0.0.0", - "bundled": true, - "optional": true + "bundled": true }, "jsprim": { "version": "1.4.0", "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true } } }, @@ -734,17 +579,11 @@ }, "mime-types": { "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } + "bundled": true }, "minimatch": { "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } + "bundled": true }, "minimist": { "version": "0.0.8", @@ -752,51 +591,23 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } + "bundled": true }, "ms": { "version": "2.0.0", - "bundled": true, - "optional": true + "bundled": true }, "node-pre-gyp": { "version": "0.6.36", - "bundled": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } + "bundled": true }, "nopt": { "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } + "bundled": true }, "npmlog": { "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } + "bundled": true }, "number-is-nan": { "version": "1.0.1", @@ -804,39 +615,27 @@ }, "oauth-sign": { "version": "0.8.2", - "bundled": true, - "optional": true + "bundled": true }, "object-assign": { "version": "4.1.1", - "bundled": true, - "optional": true + "bundled": true }, "once": { "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } + "bundled": true }, "os-homedir": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "osenv": { "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } + "bundled": true }, "path-is-absolute": { "version": "1.0.1", @@ -844,8 +643,7 @@ }, "performance-now": { "version": "0.2.0", - "bundled": true, - "optional": true + "bundled": true }, "process-nextick-args": { "version": "1.0.7", @@ -853,80 +651,33 @@ }, "punycode": { "version": "1.4.1", - "bundled": true, - "optional": true + "bundled": true }, "qs": { "version": "6.4.0", - "bundled": true, - "optional": true + "bundled": true }, "rc": { "version": "1.2.1", "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, - "optional": true + "bundled": true } } }, "readable-stream": { "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } + "bundled": true }, "request": { "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } + "bundled": true }, "rimraf": { "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } + "bundled": true }, "safe-buffer": { "version": "5.0.1", @@ -934,132 +685,73 @@ }, "semver": { "version": "5.3.0", - "bundled": true, - "optional": true + "bundled": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, - "optional": true + "bundled": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, - "optional": true + "bundled": true }, "sntp": { "version": "1.0.9", - "bundled": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } + "bundled": true }, "sshpk": { "version": "1.13.0", "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true } } }, "string_decoder": { "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } + "bundled": true }, "string-width": { "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } + "bundled": true }, "stringstream": { "version": "0.0.5", - "bundled": true, - "optional": true + "bundled": true }, "strip-ansi": { "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } + "bundled": true }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, - "optional": true + "bundled": true }, "tar": { "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } + "bundled": true }, "tar-pack": { "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } + "bundled": true }, "tough-cookie": { "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } + "bundled": true }, "tunnel-agent": { "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } + "bundled": true }, "tweetnacl": { "version": "0.14.5", - "bundled": true, - "optional": true + "bundled": true }, "uid-number": { "version": "0.0.6", - "bundled": true, - "optional": true + "bundled": true }, "util-deprecate": { "version": "1.0.2", @@ -1067,24 +759,15 @@ }, "uuid": { "version": "3.0.1", - "bundled": true, - "optional": true + "bundled": true }, "verror": { "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } + "bundled": true }, "wide-align": { "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } + "bundled": true }, "wrappy": { "version": "1.0.2", @@ -1291,8 +974,7 @@ "nan": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", - "optional": true + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" }, "normalize-path": { "version": "2.1.1", @@ -5323,7 +5005,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.2", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -5595,25 +5276,14 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "optional": true, - "requires": { - "nan": "2.6.2", - "node-pre-gyp": "0.6.36" - }, "dependencies": { "abbrev": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "ajv": { "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } + "bundled": true }, "ansi-regex": { "version": "2.1.1", @@ -5621,42 +5291,31 @@ }, "aproba": { "version": "1.1.1", - "bundled": true, - "optional": true + "bundled": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } + "bundled": true }, "asn1": { "version": "0.2.3", - "bundled": true, - "optional": true + "bundled": true }, "assert-plus": { "version": "0.2.0", - "bundled": true, - "optional": true + "bundled": true }, "asynckit": { "version": "0.4.0", - "bundled": true, - "optional": true + "bundled": true }, "aws-sign2": { "version": "0.6.0", - "bundled": true, - "optional": true + "bundled": true }, "aws4": { "version": "1.6.0", - "bundled": true, - "optional": true + "bundled": true }, "balanced-match": { "version": "0.4.2", @@ -5664,33 +5323,19 @@ }, "bcrypt-pbkdf": { "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } + "bundled": true }, "block-stream": { "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } + "bundled": true }, "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } + "version": "2.10.1", + "bundled": true }, "brace-expansion": { "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } + "bundled": true }, "buffer-shims": { "version": "1.0.0", @@ -5698,13 +5343,11 @@ }, "caseless": { "version": "0.12.0", - "bundled": true, - "optional": true + "bundled": true }, "co": { "version": "4.6.0", - "bundled": true, - "optional": true + "bundled": true }, "code-point-at": { "version": "1.1.0", @@ -5712,10 +5355,7 @@ }, "combined-stream": { "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } + "bundled": true }, "concat-map": { "version": "0.0.1", @@ -5731,39 +5371,25 @@ }, "cryptiles": { "version": "2.0.5", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } + "bundled": true }, "dashdash": { "version": "1.14.1", "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true } } }, "debug": { "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } + "bundled": true }, "deep-extend": { "version": "0.4.2", - "bundled": true, - "optional": true + "bundled": true }, "delayed-stream": { "version": "1.0.0", @@ -5771,21 +5397,15 @@ }, "delegates": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "ecc-jsbn": { "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } + "bundled": true }, "extend": { "version": "3.0.1", - "bundled": true, - "optional": true + "bundled": true }, "extsprintf": { "version": "1.0.2", @@ -5793,18 +5413,11 @@ }, "forever-agent": { "version": "0.6.1", - "bundled": true, - "optional": true + "bundled": true }, "form-data": { "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } + "bundled": true }, "fs.realpath": { "version": "1.0.0", @@ -5812,65 +5425,29 @@ }, "fstream": { "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } + "bundled": true }, "fstream-ignore": { "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "bundled": true }, "gauge": { "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } + "bundled": true }, "getpass": { "version": "0.1.7", "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true } } }, "glob": { "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } + "bundled": true }, "graceful-fs": { "version": "4.1.11", @@ -5878,33 +5455,19 @@ }, "har-schema": { "version": "1.0.5", - "bundled": true, - "optional": true + "bundled": true }, "har-validator": { "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } + "bundled": true }, "has-unicode": { "version": "2.0.1", - "bundled": true, - "optional": true + "bundled": true }, "hawk": { "version": "3.1.3", - "bundled": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } + "bundled": true }, "hoek": { "version": "2.16.3", @@ -5912,21 +5475,11 @@ }, "http-signature": { "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } + "bundled": true }, "inflight": { "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } + "bundled": true }, "inherits": { "version": "2.0.3", @@ -5934,20 +5487,15 @@ }, "ini": { "version": "1.3.4", - "bundled": true, - "optional": true + "bundled": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } + "bundled": true }, "is-typedarray": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "isarray": { "version": "1.0.0", @@ -5955,60 +5503,39 @@ }, "isstream": { "version": "0.1.2", - "bundled": true, - "optional": true + "bundled": true }, "jodid25519": { "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } + "bundled": true }, "jsbn": { "version": "0.1.1", - "bundled": true, - "optional": true + "bundled": true }, "json-schema": { "version": "0.2.3", - "bundled": true, - "optional": true + "bundled": true }, "json-stable-stringify": { "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } + "bundled": true }, "json-stringify-safe": { "version": "5.0.1", - "bundled": true, - "optional": true + "bundled": true }, "jsonify": { "version": "0.0.0", - "bundled": true, - "optional": true + "bundled": true }, "jsprim": { "version": "1.4.0", "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true } } }, @@ -6018,17 +5545,11 @@ }, "mime-types": { "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } + "bundled": true }, "minimatch": { "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } + "bundled": true }, "minimist": { "version": "0.0.8", @@ -6036,51 +5557,23 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } + "bundled": true }, "ms": { "version": "2.0.0", - "bundled": true, - "optional": true + "bundled": true }, "node-pre-gyp": { "version": "0.6.36", - "bundled": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } + "bundled": true }, "nopt": { "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } + "bundled": true }, "npmlog": { "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } + "bundled": true }, "number-is-nan": { "version": "1.0.1", @@ -6088,39 +5581,27 @@ }, "oauth-sign": { "version": "0.8.2", - "bundled": true, - "optional": true + "bundled": true }, "object-assign": { "version": "4.1.1", - "bundled": true, - "optional": true + "bundled": true }, "once": { "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } + "bundled": true }, "os-homedir": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "osenv": { "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } + "bundled": true }, "path-is-absolute": { "version": "1.0.1", @@ -6128,8 +5609,7 @@ }, "performance-now": { "version": "0.2.0", - "bundled": true, - "optional": true + "bundled": true }, "process-nextick-args": { "version": "1.0.7", @@ -6137,80 +5617,33 @@ }, "punycode": { "version": "1.4.1", - "bundled": true, - "optional": true + "bundled": true }, "qs": { "version": "6.4.0", - "bundled": true, - "optional": true + "bundled": true }, "rc": { "version": "1.2.1", "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, - "optional": true + "bundled": true } } }, "readable-stream": { "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } + "bundled": true }, "request": { "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } + "bundled": true }, "rimraf": { "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } + "bundled": true }, "safe-buffer": { "version": "5.0.1", @@ -6218,132 +5651,73 @@ }, "semver": { "version": "5.3.0", - "bundled": true, - "optional": true + "bundled": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, - "optional": true + "bundled": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, - "optional": true + "bundled": true }, "sntp": { "version": "1.0.9", - "bundled": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } + "bundled": true }, "sshpk": { "version": "1.13.0", "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true } } }, "string_decoder": { "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } + "bundled": true }, "string-width": { "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } + "bundled": true }, "stringstream": { "version": "0.0.5", - "bundled": true, - "optional": true + "bundled": true }, "strip-ansi": { "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } + "bundled": true }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, - "optional": true + "bundled": true }, "tar": { "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } + "bundled": true }, "tar-pack": { "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } + "bundled": true }, "tough-cookie": { "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } + "bundled": true }, "tunnel-agent": { "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } + "bundled": true }, "tweetnacl": { "version": "0.14.5", - "bundled": true, - "optional": true + "bundled": true }, "uid-number": { "version": "0.0.6", - "bundled": true, - "optional": true + "bundled": true }, "util-deprecate": { "version": "1.0.2", @@ -6351,24 +5725,15 @@ }, "uuid": { "version": "3.0.1", - "bundled": true, - "optional": true + "bundled": true }, "verror": { "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } + "bundled": true }, "wide-align": { "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } + "bundled": true }, "wrappy": { "version": "1.0.2", @@ -6720,8 +6085,7 @@ "nan": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", - "optional": true + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" }, "node-libs-browser": { "version": "2.0.0", diff --git a/src/main/java/chatbot/lib/api/DatabusService.java b/src/main/java/chatbot/lib/api/DatabusService.java new file mode 100644 index 0000000..2988955 --- /dev/null +++ b/src/main/java/chatbot/lib/api/DatabusService.java @@ -0,0 +1,83 @@ +package chatbot.lib.api; + +import chatbot.lib.Constants; +import chatbot.lib.response.ResponseData; +import chatbot.lib.response.ResponseType; +import org.apache.jena.query.*; +import org.apache.jena.sparql.engine.http.QueryEngineHTTP; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +/** + * Service to query Databus for datasets. + */ +public class DatabusService { + private static final Logger logger = LoggerFactory.getLogger(DatabusService.class); + private static final String ENDPOINT = "https://databus.dbpedia.org/repo/sparql"; + + private static final String PREFIXES = new String( + "PREFIX dataid: \n" + + "PREFIX dct: \n" + + "PREFIX dcat: \n" + + "PREFIX rdfs: \n"); + + public String buildQuery(String query) { + return PREFIXES + query; + } + + public List getRecommendedDatasets(String keyword) { + List responseDataList = new ArrayList<>(); + String sparqlQuery = buildQuery( + "SELECT DISTINCT ?dataset ?label ?description WHERE {\n" + + " ?dataset a dataid:Group .\n" + + " ?dataset rdfs:label ?label .\n" + + " ?dataset dct:description ?description .\n" + + " FILTER (regex(?label, \"" + keyword + "\", \"i\") || regex(?description, \"" + keyword + + "\", \"i\"))\n" + + "} LIMIT 5"); + + logger.info("Querying Databus: " + sparqlQuery); + + Query query = QueryFactory.create(sparqlQuery); + try (QueryEngineHTTP queryEngine = (QueryEngineHTTP) QueryExecutionFactory.sparqlService(ENDPOINT, query)) { + queryEngine.addParam("timeout", String.valueOf(Constants.API_TIMEOUT)); + ResultSet results = queryEngine.execSelect(); + while (results.hasNext()) { + QuerySolution solution = results.next(); + ResponseData data = new ResponseData(); + + String label = ""; + if (solution.contains("label") && solution.get("label").isLiteral()) { + label = solution.getLiteral("label").getString(); + } + + String description = ""; + if (solution.contains("description") && solution.get("description").isLiteral()) { + description = solution.getLiteral("description").getString(); + } + + data.setTitle(label.isEmpty() ? "Unknown Dataset" : label); + if (!description.isEmpty()) { + // Truncate description if too long + if (description.length() > 200) { + description = description.substring(0, 197) + "..."; + } + data.setText(description); + } + + if (solution.contains("dataset") && solution.get("dataset").isURIResource()) { + data.addButton(new ResponseData.Button("View on Databus", ResponseType.BUTTON_LINK, + solution.getResource("dataset").getURI())); + } + + responseDataList.add(data); + } + } catch (Exception e) { + logger.error("Error querying Databus", e); + } + return responseDataList; + } +} diff --git a/src/main/java/chatbot/lib/handlers/TemplateHandler.java b/src/main/java/chatbot/lib/handlers/TemplateHandler.java index 48f25a5..d334f31 100644 --- a/src/main/java/chatbot/lib/handlers/TemplateHandler.java +++ b/src/main/java/chatbot/lib/handlers/TemplateHandler.java @@ -26,7 +26,7 @@ public class TemplateHandler { protected Request request; protected String[] payload; protected Application.Helper helper; - + public TemplateHandler(Request request, String payload, Application.Helper helper) { this.request = request; this.payload = Utility.split(payload); @@ -41,12 +41,14 @@ public TemplateHandler(Request request, String[] payload, Application.Helper hel public ResponseGenerator handleTemplateMessage() { ResponseGenerator responseGenerator = new ResponseGenerator(); - switch(payload[0]) { + switch (payload[0]) { case TemplateType.START: - responseGenerator.addTextResponse(new ResponseData(helper.getRiveScriptBot().answer(this.request.getUserId(), RiveScriptReplyType.START_TEXT)[0])); + responseGenerator.addTextResponse(new ResponseData( + helper.getRiveScriptBot().answer(this.request.getUserId(), RiveScriptReplyType.START_TEXT)[0])); responseGenerator.setShowFeedback(false); case TemplateType.HELP: - responseGenerator.addTextResponse(new ResponseData(helper.getRiveScriptBot().answer(this.request.getUserId(), RiveScriptReplyType.HELP_TEXT)[0])); + responseGenerator.addTextResponse(new ResponseData( + helper.getRiveScriptBot().answer(this.request.getUserId(), RiveScriptReplyType.HELP_TEXT)[0])); responseGenerator.addCarouselResponse(getHelperTemplate()); break; @@ -66,6 +68,7 @@ public ResponseGenerator handleTemplateMessage() { // DBpedia Datset Scenarios case TemplateType.DBPEDIA_DATASET: case TemplateType.DBPEDIA_DATASET_NLP: + case TemplateType.DBPEDIA_DATABUS_RECOMMENDATION: responseGenerator = new DatasetTemplateHandler(request, payload, helper).handleTemplateMessage(); break; @@ -91,7 +94,6 @@ public ResponseGenerator handleTemplateMessage() { responseGenerator = new GSOCTemplateHandler(request, payload, helper).handleTemplateMessage(); break; - // Further Options Scenario case TemplateType.LOAD_MORE: case TemplateType.LOAD_SIMILAR: @@ -118,9 +120,11 @@ public ResponseGenerator handleTemplateMessage() { // Get Information for specific Entity case TemplateType.ENTITY_INFORMATION: - responseGenerator.addCarouselResponse(new ArrayList(){{ - add(helper.getSparql().getEntityInformation(payload[1])); - }}); + responseGenerator.addCarouselResponse(new ArrayList() { + { + add(helper.getSparql().getEntityInformation(payload[1])); + } + }); break; case TemplateType.GET_LOCATION: @@ -152,36 +156,55 @@ public ResponseGenerator handleTemplateMessage() { } public ResponseData[] getHelperTemplate() { - return new ResponseData[]{ - new ResponseData("/images/icon-dbpedia-92.png", "About DBpedia", "You can ask me questions related to DBpedia such as:") - .addButton(new ResponseData.Button("What is DBpedia?", ResponseType.BUTTON_PARAM, TemplateType.DBPEDIA_ABOUT)) - .addButton(new ResponseData.Button("How do I contribute?", ResponseType.BUTTON_PARAM, TemplateType.DBPEDIA_CONTRIBUTE)) - .addButton(new ResponseData.Button("Is DBpedia down?", ResponseType.BUTTON_PARAM, TemplateType.CHECK_SERVICE + Utility.STRING_SEPARATOR + Constants.DBPEDIA_SERVICE)), - new ResponseData("/images/icon-help-92.png", "Factoid Questions", "You can also ask me simple factual questions/trivia:") - .addButton(new ResponseData.Button("Who is Einstein?", ResponseType.BUTTON_PARAM, TemplateType.ENTITY_INFORMATION + Utility.STRING_SEPARATOR + "http://dbpedia.org/resource/Albert_Einstein")) - .addButton(new ResponseData.Button("What is a planet?", ResponseType.BUTTON_PARAM, TemplateType.ENTITY_INFORMATION + Utility.STRING_SEPARATOR + "http://dbpedia.org/resource/Planet")) - .addButton(new ResponseData.Button("Where is Berlin?", ResponseType.BUTTON_PARAM, TemplateType.GET_LOCATION + Utility.STRING_SEPARATOR + "Berlin")) + return new ResponseData[] { + new ResponseData("/images/icon-dbpedia-92.png", "About DBpedia", + "You can ask me questions related to DBpedia such as:") + .addButton(new ResponseData.Button("What is DBpedia?", ResponseType.BUTTON_PARAM, + TemplateType.DBPEDIA_ABOUT)) + .addButton(new ResponseData.Button("How do I contribute?", ResponseType.BUTTON_PARAM, + TemplateType.DBPEDIA_CONTRIBUTE)) + .addButton(new ResponseData.Button("Is DBpedia down?", ResponseType.BUTTON_PARAM, + TemplateType.CHECK_SERVICE + Utility.STRING_SEPARATOR + Constants.DBPEDIA_SERVICE)), + new ResponseData("/images/icon-help-92.png", "Factoid Questions", + "You can also ask me simple factual questions/trivia:") + .addButton(new ResponseData.Button("Who is Einstein?", ResponseType.BUTTON_PARAM, + TemplateType.ENTITY_INFORMATION + Utility.STRING_SEPARATOR + + "http://dbpedia.org/resource/Albert_Einstein")) + .addButton(new ResponseData.Button("What is a planet?", ResponseType.BUTTON_PARAM, + TemplateType.ENTITY_INFORMATION + Utility.STRING_SEPARATOR + + "http://dbpedia.org/resource/Planet")) + .addButton(new ResponseData.Button("Where is Berlin?", ResponseType.BUTTON_PARAM, + TemplateType.GET_LOCATION + Utility.STRING_SEPARATOR + "Berlin")) }; } public ResponseData getFAQTemplate(String serviceName) { String[] service = Constants.SERVICES.get(serviceName); - ResponseData responseData = new ResponseData("Here are some frequently asked questions about " + service[0] + ":"); - switch(serviceName) { + ResponseData responseData = new ResponseData( + "Here are some frequently asked questions about " + service[0] + ":"); + switch (serviceName) { case Constants.DBPEDIA_SERVICE: responseData.addSmartReply(new ResponseData.SmartReply("What is DBpedia?", TemplateType.DBPEDIA_ABOUT)); - responseData.addSmartReply(new ResponseData.SmartReply("How can I Contribute?", TemplateType.DBPEDIA_CONTRIBUTE)); - responseData.addSmartReply(new ResponseData.SmartReply("Is DBpedia Working?", TemplateType.CHECK_SERVICE + Utility.STRING_SEPARATOR + serviceName)); + responseData.addSmartReply( + new ResponseData.SmartReply("How can I Contribute?", TemplateType.DBPEDIA_CONTRIBUTE)); + responseData.addSmartReply(new ResponseData.SmartReply("Is DBpedia Working?", + TemplateType.CHECK_SERVICE + Utility.STRING_SEPARATOR + serviceName)); break; case Constants.DBPEDIA_LOOKUP_SERVICE: - responseData.addSmartReply(new ResponseData.SmartReply("What is DBpedia Lookup?", TemplateType.DBPEDIA_LOOKUP)); - responseData.addSmartReply(new ResponseData.SmartReply("Tell me about Lookup Parameters.", TemplateType.DBPEDIA_LOOKUP_PARAMETERS)); - responseData.addSmartReply(new ResponseData.SmartReply("What is Lookup PrefixSearch?", TemplateType.DBPEDIA_LOOKUP_PREFIX_SEARCH)); + responseData.addSmartReply( + new ResponseData.SmartReply("What is DBpedia Lookup?", TemplateType.DBPEDIA_LOOKUP)); + responseData.addSmartReply(new ResponseData.SmartReply("Tell me about Lookup Parameters.", + TemplateType.DBPEDIA_LOOKUP_PARAMETERS)); + responseData.addSmartReply(new ResponseData.SmartReply("What is Lookup PrefixSearch?", + TemplateType.DBPEDIA_LOOKUP_PREFIX_SEARCH)); break; case Constants.DBPEDIA_MAPPINGS_SERVICE: - responseData.addSmartReply(new ResponseData.SmartReply("What is Mappings Wiki?", TemplateType.DBPEDIA_MAPPINGS)); - responseData.addSmartReply(new ResponseData.SmartReply("Where can I find the Mapping Tool?", TemplateType.DBPEDIA_MAPPINGS_TOOL)); - responseData.addSmartReply(new ResponseData.SmartReply("Is Mappings Wiki Down?", TemplateType.CHECK_SERVICE + Utility.STRING_SEPARATOR + serviceName)); + responseData.addSmartReply( + new ResponseData.SmartReply("What is Mappings Wiki?", TemplateType.DBPEDIA_MAPPINGS)); + responseData.addSmartReply(new ResponseData.SmartReply("Where can I find the Mapping Tool?", + TemplateType.DBPEDIA_MAPPINGS_TOOL)); + responseData.addSmartReply(new ResponseData.SmartReply("Is Mappings Wiki Down?", + TemplateType.CHECK_SERVICE + Utility.STRING_SEPARATOR + serviceName)); break; } return responseData; diff --git a/src/main/java/chatbot/lib/handlers/templates/dbpedia/DatasetTemplateHandler.java b/src/main/java/chatbot/lib/handlers/templates/dbpedia/DatasetTemplateHandler.java index c4c0316..ef831ef 100644 --- a/src/main/java/chatbot/lib/handlers/templates/dbpedia/DatasetTemplateHandler.java +++ b/src/main/java/chatbot/lib/handlers/templates/dbpedia/DatasetTemplateHandler.java @@ -4,11 +4,13 @@ import chatbot.lib.handlers.TemplateHandler; import chatbot.lib.request.Request; import chatbot.lib.request.TemplateType; +import chatbot.lib.api.DatabusService; import chatbot.lib.response.ResponseData; import chatbot.lib.response.ResponseGenerator; import chatbot.lib.response.ResponseType; import java.util.ArrayList; +import java.util.List; /** * Created by ramgathreya on 7/12/17. @@ -22,22 +24,55 @@ public ResponseGenerator handleTemplateMessage() { ResponseGenerator responseGenerator = new ResponseGenerator(); switch (payload[0]) { case TemplateType.DBPEDIA_DATASET: - responseGenerator.addTextResponse(new ResponseData("The DBpedia data set uses a large multi-domain ontology which has been derived from Wikipedia as well as localized versions of DBpedia in more than 100 languages.")); - responseGenerator.addButtonTextResponse(new ResponseData("You can find all DBpedia dataset dumps and information about them at the following links:", new ArrayList(){{ - add(new ResponseData.Button("Background Information", ResponseType.BUTTON_LINK, "http://wiki.dbpedia.org/services-resources/datasets/dbpedia-datasets")); - add(new ResponseData.Button("All Dataset Dumps", ResponseType.BUTTON_LINK, "http://wiki.dbpedia.org/datasets")); - }})); + responseGenerator.addTextResponse(new ResponseData( + "The DBpedia data set uses a large multi-domain ontology which has been derived from Wikipedia as well as localized versions of DBpedia in more than 100 languages.")); + responseGenerator.addButtonTextResponse(new ResponseData( + "You can find all DBpedia dataset dumps and information about them at the following links:", + new ArrayList() { + { + add(new ResponseData.Button("Background Information", ResponseType.BUTTON_LINK, + "http://wiki.dbpedia.org/services-resources/datasets/dbpedia-datasets")); + add(new ResponseData.Button("All Dataset Dumps", ResponseType.BUTTON_LINK, + "http://wiki.dbpedia.org/datasets")); + } + })); break; case TemplateType.DBPEDIA_DATASET_NLP: - responseGenerator.addTextResponse(new ResponseData("The NLP Datasets were created by the DBpedia Spotlight team to support entity recognition and disambiguation tasks, among others. ")); - responseGenerator.addButtonTextResponse(new ResponseData("Here is the link to the dataset:", new ArrayList(){{ - add(new ResponseData.Button("NLP Dataset", ResponseType.BUTTON_LINK, "http://wiki.dbpedia.org/services-resources/datasets/nlp")); - }})); + responseGenerator.addTextResponse(new ResponseData( + "The NLP Datasets were created by the DBpedia Spotlight team to support entity recognition and disambiguation tasks, among others. ")); + responseGenerator.addButtonTextResponse( + new ResponseData("Here is the link to the dataset:", new ArrayList() { + { + add(new ResponseData.Button("NLP Dataset", ResponseType.BUTTON_LINK, + "http://wiki.dbpedia.org/services-resources/datasets/nlp")); + } + })); break; case TemplateType.DBPEDIA_DATASET_ONTOLOGY: - responseGenerator.addButtonTextResponse(new ResponseData("The DBpedia Ontology is a shallow, cross-domain ontology, which has been manually created based on the most commonly used infoboxes within Wikipedia. The ontology currently covers 685 classes which form a subsumption hierarchy and are described by 2,795 different properties. Here is the link to the dataset:", new ArrayList(){{ - add(new ResponseData.Button("Ontology Dataset", ResponseType.BUTTON_LINK, "http://wiki.dbpedia.org/services-resources/ontology")); - }})); + responseGenerator.addButtonTextResponse(new ResponseData( + "The DBpedia Ontology is a shallow, cross-domain ontology, which has been manually created based on the most commonly used infoboxes within Wikipedia. The ontology currently covers 685 classes which form a subsumption hierarchy and are described by 2,795 different properties. Here is the link to the dataset:", + new ArrayList() { + { + add(new ResponseData.Button("Ontology Dataset", ResponseType.BUTTON_LINK, + "http://wiki.dbpedia.org/services-resources/ontology")); + } + })); + break; + case TemplateType.DBPEDIA_DATABUS_RECOMMENDATION: + if (payload.length > 1) { + String query = payload[1]; + List results = new DatabusService().getRecommendedDatasets(query); + if (results.isEmpty()) { + responseGenerator.addTextResponse(new ResponseData("No datasets found regarding " + query)); + } else { + responseGenerator.addTextResponse( + new ResponseData("Here are some recommended datasets for '" + query + "':")); + responseGenerator.addCarouselResponse(results); + } + } else { + responseGenerator.addTextResponse(new ResponseData( + "Please specify a topic for dataset recommendation, e.g., 'recommend datasets for cars'.")); + } break; } return responseGenerator; diff --git a/src/main/java/chatbot/lib/request/TemplateType.java b/src/main/java/chatbot/lib/request/TemplateType.java index 079c028..9132b8b 100644 --- a/src/main/java/chatbot/lib/request/TemplateType.java +++ b/src/main/java/chatbot/lib/request/TemplateType.java @@ -16,6 +16,7 @@ public interface TemplateType { String DBPEDIA_DATASET = "dbpedia-dataset"; String DBPEDIA_DATASET_NLP = "dbpedia-dataset-nlp"; String DBPEDIA_DATASET_ONTOLOGY = "dbpedia-dataset-ontology"; + String DBPEDIA_DATABUS_RECOMMENDATION = "dbpedia-databus-recommendation"; String DBPEDIA_LOOKUP = "dbpedia-lookup"; String DBPEDIA_LOOKUP_PREFIX_SEARCH = "dbpedia-lookup-prefix-search"; diff --git a/src/main/resources/rivescript/dbpedia-databus.rive b/src/main/resources/rivescript/dbpedia-databus.rive new file mode 100644 index 0000000..edae4db --- /dev/null +++ b/src/main/resources/rivescript/dbpedia-databus.rive @@ -0,0 +1,17 @@ ++ [*] (databus|recommend|recommendation) [*] (dataset|datasets) [*] +- {"type": "template", "name": "dbpedia-databus-recommendation"} + ++ recommend datasets for * +- {"type": "template", "name": "dbpedia-databus-recommendation__"} + ++ find * dataset +- {"type": "template", "name": "dbpedia-databus-recommendation__"} + ++ search databus for * +- {"type": "template", "name": "dbpedia-databus-recommendation__"} + ++ recommend * data +- {"type": "template", "name": "dbpedia-databus-recommendation__"} + ++ dataset recommendation system [*] +- {"type": "template", "name": "dbpedia-databus-recommendation"}