https://github.com/johnsylvain/frecent
⏳ Track and rank objects by their "frecency"
https://github.com/johnsylvain/frecent
frecency frecent ranking ranking-algorithm sorting sorting-algorithms
Last synced: 9 days ago
JSON representation
⏳ Track and rank objects by their "frecency"
- Host: GitHub
- URL: https://github.com/johnsylvain/frecent
- Owner: johnsylvain
- License: mit
- Created: 2017-11-14T03:27:41.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-12-07T10:26:09.000Z (over 3 years ago)
- Last Synced: 2025-07-01T12:52:12.648Z (about 1 year ago)
- Topics: frecency, frecent, ranking, ranking-algorithm, sorting, sorting-algorithms
- Language: JavaScript
- Homepage: https://npm.im/frecent
- Size: 513 KB
- Stars: 9
- Watchers: 1
- Forks: 0
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Frecent
[](https://travis-ci.org/johnsylvain/frecent)
[](https://npmjs.org/package/frecent)
> Manage the "frencency" of objects
### What is frecency?
Frecency is a heuristic that combines frequency and recency into a single measure. It is useful for predicting the likelihood of users revisiting certain links, websites, etc.
More information can be found [here](https://en.wikipedia.org/wiki/Frecency)
## Features
- Simple API
- Lightweight
## Methods
### `frecent.load(items)`
> Load an array of `items` that you wish to be tracked. Ideally, this should be an array of Objects.
### `frecent.visit(prop, attr, [cb])`
> Visit an item by passing the property path you wish to target (`prop`) and the value of that target property (`attr`). Optional callback (`cb`).
> Example: `frecent.visit('data.name.first', 'John')`. The first argument tells frecent the path to the target path. The second argument should be the expected value to the path specified. See [Usage](#usage) for more details.
### `frecent.get()`
> Retrieve the ranked objects. See [Usage](#usage) to see the returned data structure.
## Usage
```js
import Frecent from 'frecent'
const frecent = new Frecent()
// initialize with custom decay time
// Options: hour, day, week, month
// default: day
const frecent = new Frecent({
decay: 'hour'
})
// Items to be tracked can be loaded from localStorage, a DB, etc
const itemsToTrack = [
{ url: 'https://example.com' },
{ url: 'https://example.org' }
]
// Alternatively, you can load previously parsed data
const itemsToTrack = [
{
body: {url: 'https://example.com' },
_visits: 2,
_lastVisited: [Date|Timestamp],
_weight: 140
},
{
body: {url: 'https://example.org' },
_visits: 1,
_lastVisited: [Date|Timestamp],
_weight: 90
}
]
frecent.load(itemsToTrack)
// 'Visit' a item (will increase the weight of the item.
// Therefore increasing the likelihood of revisiting)
frecent.visit('url', 'https://example.com')
// Example: if object has nested properties
// use dot or bracket syntax to notate nested properties
frecent.visit('data.url', 'https://example.com')
// Retrieve items ranked by 'Frecency'
const ranked = frecent.get()
// [
// {
// body: { url: 'https://example.com' },
// _visits: 1,
// _lastVisited: [Date],
// _weight: 100,
// }
// ]
```
## Releases
__1.0.4:__ Specify a custom decay time
__1.0.3:__ Use dot or bracket notation in `visit` method via [object-path-resolve](https://github.com/johnsylvain/object-path-resolve)
## Contributing
You can request a new feature by submitting an issue. If you would like to implement a new feature feel free to issue a Pull Request.
## License
Frecent is protected under the [MIT License](https://github.com/johnsylvain/frecent/blob/master/LICENSE)