Skip to content

nikos/matchbox-api

Repository files navigation

matchbox

A Clojure project to kick the tires on Apache Mahout.

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: +5

Example 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ück

POST /users   -> neuen User anlegen
GET /users/<userid> -> liefert User zurück, inkl. seiner Vorlieben
POST /users/<userid>/ratings  -> hinzufügen einer neuen Vorliebe
DELETE /users/<userid>/ratings/<rating-id> -> löscht eine Vorliebe

GET /users/<userid>/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

About

Simple recommendation backend with compojure, Mahout and OpenNLP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy