Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Lots of small tweaks to README.md

Edited for grammar, punctuation, phrasing, and clarity
  • Loading branch information...
commit 07985de07499e3cfcaf3b778f6944a52b00ebaad 1 parent 895d7fe
Tony authored
Showing with 36 additions and 29 deletions.
  1. +36 −29 README.md
View
65 README.md
@@ -1,27 +1,35 @@
-
node-fussy
==========
-*A recommendation engine that care about user actions*
+*The recommendation engine that care about your actions*
## Presentation
-Fussy is a minimalist recommendation engine. It filters unwanted noise out of your news streams, but not too much: fussy will watch carefully and try to suggest things from time to time.
-If you change your mind later, fussy will detect it, and adjust your profile a.k.a "filter bubble",
-so that it is not a bubble anymore.
+Fussy is a minimalist recommendation engine.
+It filters unwanted noise out of your news streams—but not too much!
+Fussy will watch carefully, and suggest things from time to time.
+If you change your mind later, Fussy will notice, and adjust your profile.
+That way, Fussy keeps up-to-date with the ever-changing you.
+
+It sounds like magic! But you can trust Fussy.
+
+Because, you know, he’s very picky.
-It's sounds like magic, but you can trust fussy. Because you know, he is very picky.
## How it works
-It's based on a basic, naive-bayesian style algorithm:
-Everytime you call profile.learn() this will increment or decrement some weights in the underlying network of tags.
-That's why Fussy can fix profiles back: you can decrement the importance of keywords dynamically, hours, days or months after liking them.
+It’s based on a basic, naïve-bayesian style algorithm.
+Everytime you call `profile.learn()`, Fussy increments or decrements weights in the underlying network of tags.
+That’s how Fussy unlearns things if you change your mind.
+You can always decrement the importance of keywords dynamically.
+Even hours, days, or months after liking them.
+
## Installation
$ npm install fussy
+
## Demo
```CoffeeScript
@@ -59,7 +67,7 @@ for txt, keywords of training
# news to sort / rate
news = database.tag [
"Open source conference give free beer to first 50 people in NY"
- "What is in people's head? an in-depth data analysis"
+ "What is in peoples head? an in-depth data analysis"
]
recommendations = profile.recommend news
console.log "--> #{Object.keys recommendations}"
@@ -95,17 +103,16 @@ tagged = database.tag [
#### Saving memory
-Fussy is a memory hog: since it keeps everything in RAM
-(every single ngram he encounters) you will have to
-clean weaks connections by calling database.prune(threshold)
+Fussy is a memory hog. Since it keeps everything in RAM (every single
+`ngram` it encounters), you’ll have to clean weak connections.
-connections with a weight <= threshold will be removed,
-saving memory.
+Fortunately, it’s really simple: just call `database.prune(threshold)`.
+Connections whose `weight <= threshold` are removed, reclaiming memory.
-Typically you will want to do this:
+Typically you’ll want to do this:
```CoffeeScript
-# we need to regularly prune the database or else memory will explode
+# regularly prune the database (or else memory will explode)
do prune = ->
# database.size is the number of connections in the underlying network
console.log "database size: #{database.size} entries"
@@ -119,6 +126,7 @@ do prune = ->
setTimeout prune, 5000
```
+
### User recommendation
@@ -128,12 +136,11 @@ do prune = ->
profile = new Profile()
```
-#### Learning from a user preference
+#### Learning User Preference
-We need to save the full text together with the keywords.
-The keywords can be hidden for the end user (he can only see the text if you want),
-but you have to keep in mind that internally Fussy need them
-to compute its scores.
+Be sure to save the full text along with the keywords.
+You can have Fussy hide the keywords from the end user, if you want;
+but Fussy needs them internally to compute scores.
```CoffeeScript
profile.learn "there is snow at the train station", ["weather","city","snow","winter"], +1
@@ -151,14 +158,14 @@ tagged = database.tag [
recommended = profile.recommend tagged
```
+(To be continued…)
-To be continued, see the example
## Examples
- See the /examples folder.
+ (See the `/examples` folder.)
- There is an example crawler.coffee (careful: it needs a few dependencies, but they are on NPM) that show how one could use Twitter to get a "randomly" tagged dataset for free.
+ The example `crawler.coffee` that show how one could use Twitter to get a "randomly" tagged dataset for free. (Notice: this example has a few dependencies. But, they’re all on NPM.)
## Wishlist
@@ -168,10 +175,10 @@ To be continued, see the example
#### 0.0.1 (Wednesday, December 5, 2012)
- * Added database.size
- * Added database.prune(threshold)
- * Added database.toFile(fileName)
- * Removed the toy twitter database from core
+ * Added `database.size`
+ * Added `database.prune(threshold)`
+ * Added `database.toFile(fileName)`
+ * Removed the toy Twitter database from core
* Added an example crawler you could use to build a tag database
#### 0.0.0

1 comment on commit 07985de

@jbilcke

Thank you for these suggestions @Zearin! I'm merging them.

I know this project hasn't been updated in a while.. on one hand, this is what I wanted to achieve:
the smallest possible code for a minimal recommendation engine, to play with, or to be used as a foundation for a bigger system.

But on the other hand, it is also totally usable, so if people are starting to get interested I should definitely post updates.
I know the documentation lacks coherence and explanations, and the code example is a bit "raw". I'll see if I can improve this.

Please sign in to comment.
Something went wrong with that request. Please try again.