https://github.com/nikos/matchbox-api
Simple recommendation backend with compojure, Mahout and OpenNLP
https://github.com/nikos/matchbox-api
Last synced: 3 months ago
JSON representation
Simple recommendation backend with compojure, Mahout and OpenNLP
- Host: GitHub
- URL: https://github.com/nikos/matchbox-api
- Owner: nikos
- Created: 2016-02-10T22:38:31.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-02-10T22:39:39.000Z (over 9 years ago)
- Last Synced: 2025-01-13T06:22:24.670Z (4 months ago)
- Language: Clojure
- Size: 5.9 MB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# matchbox
A Clojure project to kick the tires on [Apache Mahout](http://mahout.apache.org/).
Start compojure with ring call:
lein ring server-headless
Example call:
(use 'matchbox.services.recommender)
(find-similar-users 7 3)To start running the tests and watch for updates use:
lein midje :autotest
## Requirements
MongoDB server
Under Mac OSX install by using `brew install mongo` and then start with the help of:
sudo mongod --config /usr/local/etc/mongod.conf
## Manage items
http POST http://matchbox.nava.de:3000/items/ name=Billard
http GET http://matchbox.nava.de:3000/items/
Leads to the following sample result:
HTTP/1.1 200 OK
Content-Length: 317
Content-Type: application/json; charset=utf-8
Date: Sun, 14 Dec 2014 00:44:29 GMT
Server: Jetty(7.6.8.v20121106){
"items": [
{
"_id": "548cdd3ed282a2a47b2492a9",
"name": "Kino"
},
{
"_id": "548cdd54d282a2a47b2492ab",
"name": "Boxen"
},
{
"_id": "548cdd64d282a2a47b2492ae",
"name": "Billard"
}
]
}## Manage users
Create a new user
http POST http://matchbox.nava.de:3000/users/ alias=rocko first_name=Rocko last_name=Schamoni
Get all users:
http GET http://matchbox.nava.de:3000/users
{
"users": [
{
"_id": "548dbf1bd2829fb7bf535bbf",
"alias": "heinz",
"first_name": "heinz",
"last_name": "Strunk"
},
{
"_id": "548dbf49d2829fb7bf535bc0",
"alias": "rocko",
"first_name": "Rocko",
"last_name": "Schamoni"
},
{
"_id": "548dbf5fd2829fb7bf535bc1",
"alias": "jac",
"first_name": "Jacques",
"last_name": "Palminger"
}
]
}## Ratings
Add a new rating:
http POST http://matchbox.nava.de:3000/ratings/ item_id=548cdd3ed282a2a47b2492a9 user_id=548dbf1bd2829fb7bf535bbf preference:=1.0
HTTP/1.1 201 Created
Content-Length: 149
Content-Type: application/json; charset=utf-8
Date: Sun, 14 Dec 2014 16:54:00 GMT
Location: /ratings/548dc0a8d2829fb7bf535bc2
Server: Jetty(7.6.8.v20121106){
"_id": "548dc0a8d2829fb7bf535bc2",
"created_at": 1418576041,
"item_id": "548cdd3ed282a2a47b2492a9",
"preference": 1.0,
"user_id": "548dbf1bd2829fb7bf535bbf"
}Get all ratings
http GET http://matchbox.nava.de:3000/ratings
Get similar users
http GET http://matchbox.nava.de:3000/users/548dbf49d2829fb7bf535bc0/similar-users
HTTP/1.1 200 OK
Content-Length: 110
Content-Type: application/json; charset=utf-8
Date: Sun, 14 Dec 2014 17:01:10 GMT
Server: Jetty(7.6.8.v20121106){
"recommended": [
{
"_id": "548dbf1bd2829fb7bf535bbf",
"alias": "heinz",
"first_name": "heinz",
"last_name": "Strunk"
}
]
}## Sentiments
Analyze a sentence and rate a sentiment.
Current mapping is:
* strong negative: -5
* weak negative: -2
* neutral: 0
* weak positive: +2
* strong positive: +5Example for creating a new sentiment:
http -v POST localhost:3000/sentiments sentence="I do not like George Clooney and don't like rain." user_id=54cf2fdb0364fac8bb99c08b
POST /sentiments HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 104
Content-Type: application/json; charset=utf-8
Host: localhost:3000
User-Agent: HTTPie/0.8.0{
"sentence": "I do not like George Clooney and don't like rain.",
"user_id": "54cf2fdb0364fac8bb99c08b"
}HTTP/1.1 201 Created
Access-Control-Allow-Origin: *
Access-Control-Request-Methods: GET,POST,PUT
Content-Length: 1022
Content-Type: application/json; charset=utf-8
Date: Thu, 05 Feb 2015 11:28:33 GMT
Location: /sentiments/54d353e10364f68ce067ae77
Server: Jetty(7.6.13.v20130916){
"_id": "54d353e10364f68ce067ae77",
"ratings": [
{
"_id": "54d353e10364f68ce067ae78",
"created_at": 1423135714,
"item": {
"_id": "54d34e1d0364862278b2778b",
"name": "rain"
},
"item_id": "54d34e1d0364862278b2778b",
"preference": -5.0,
"sentiment": "I do not like George Clooney and don't like rain.",
"user": {
"_id": "54cf2fdb0364fac8bb99c08b",
"alias": "werner",
"first_name": "Werner",
"last_name": "Schneeberger"
},
"user_id": "54cf2fdb0364fac8bb99c08b"
},
{
"_id": "54d353e10364f68ce067ae79",
"created_at": 1423135714,
"item": {
"_id": "54d34e1d0364862278b2778d",
"name": "George Clooney"
},
"item_id": "54d34e1d0364862278b2778d",
"preference": -5.0,
"sentiment": "I do not like George Clooney and don't like rain.",
"user": {
"_id": "54cf2fdb0364fac8bb99c08b",
"alias": "werner",
"first_name": "Werner",
"last_name": "Schneeberger"
},
"user_id": "54cf2fdb0364fac8bb99c08b"
}
],
"sentence": "I do not like George Clooney and don't like rain.",
"user": {
"_id": "54cf2fdb0364fac8bb99c08b",
"alias": "werner",
"first_name": "Werner",
"last_name": "Schneeberger"
},
"user_id": "54cf2fdb0364fac8bb99c08b"
}## API Ideas
POST /ratings -> neue Vorliebe anlegen
GET /ratings -> liefert alle vorhandenen Vorlieben zurückPOST /users -> neuen User anlegen
GET /users/ -> liefert User zurück, inkl. seiner Vorlieben
POST /users//ratings -> hinzufügen einer neuen Vorliebe
DELETE /users//ratings/ -> löscht eine VorliebeGET /users//similar-users -> liefert eine Liste mit Usern, die ähnliche Vorlieben haben
JSON für rating:
{
"id": "vom-Server-vergeben",
"name": {
"en": "Cinema films",
"de": "Kinofilme",
"ru": "фильмкинолента"
}
}## Inspirations
Recommender (user/item) system using Mahout and MongoDB, wrapped by a REST service.
https://github.com/nellaivijay/Mahout-MongoDB-Recommender