What is Saffron Finance (SFI) | What is Saffron Finance token | What is SFI token

About saffron.finance

Saffron is a protocol for tokenizing on-chain assets, including contracts that otherwise impair access to utilized capital. Tokenized ownership of on-chain assets gives liquidity providers greater flexibility and uninterrupted access to their underlying collateral while enabling leveraged staking and bespoke risk management.

Peer to peer risk exchange

Existing decentralized earning platforms expose liquidity providers to complex code driven outcomes. Network participants must evaluate an array of catastrophic scenarios where the resulting state could wipe out their holdings or lead to significant impermanent loss. It is hard to anticipate the net effect of extreme market volatility or focused economic attacks. Saffron narrows the set of possible outcomes by giving liquidity providers dynamic exposure.

Dynamic exposure

The first application of Saffron gives liquidity providers the option to select customized risk and return profiles via the use of Saffron pool tranches. Saffron separately tokenizes the future earning stream and the net present value of utilized principal in each tranche. Earnings, based on tokenized holdings, are distributed accordingly across all tranches via payback waterfalls.

Payback waterfall

The initial application of the payback waterfall is split between two primary tranches. -A yield enhanced “A” tranche. -A risk mitigated super-senior “AA” tranche.

Added liquidity, when removed, is used to pay back the initial principal of AA holders before paying the principal and interest of the yield enhanced A tranche. In exchange for this enhanced return, participants of the A tranche must stake Saffron’s native tokens (SFI) to mitigate against failures on the underlying platform (such as Compound, Aave, or Curve). The Saffron protocol in this scenario acts as an escrow service for transfer of risk between A tranche participants and AA tranche participants. Saffron also includes an “S” tranche for allocating liquidity efficiently as it is needed based on a tranche balancing algorithm.

Introduction to Saffron

A standard for tokenizing on-chain collateral

Saffron is a protocol for tokenizing on-chain assets, including contracts that otherwise impair access to utilized capital. Tokenized ownership of on-chain assets gives liquidity providers greater flexibility and uninterrupted access to their underlying collateral while enabling leveraged staking and bespoke risk management.

Peer to peer risk exchange

Existing decentralized earning platforms expose liquidity providers to complex code driven outcomes. Network participants must evaluate an array of catastrophic scenarios where the resulting state could wipe out their holdings or lead to significant impermanent loss. It is hard to anticipate the net effect of extreme market volatility or focused economic attacks. Saffron narrows the set of possible outcomes by giving liquidity providers dynamic exposure.

Dynamic exposure

The first application of Saffron gives liquidity providers the option to select customized risk and return profiles via the use of Saffron pool tranches. Saffron separately tokenizes the future earning stream and the net present value of utilized principal in each tranche. Earnings, based on tokenized holdings, are distributed accordingly across all tranches via payback waterfalls.

Payback waterfall

The initial application of the payback waterfall is split between two primary tranches.

  • A yield enhanced “A” tranche.
  • A risk mitigated super-senior “AA” tranche.

Added liquidity, when removed, is used to pay back the initial principal of AA holders before paying the principal and interest of the yield enhanced A tranche. In exchange for this enhanced return, participants of the A tranche must stake Saffron’s native tokens (SFI) to mitigate against failures on the underlying platform (such as Compound, Aave, or Curve). The Saffron protocol in this scenario acts as an escrow service for transfer of risk between A tranche participants and AA tranche participants.

Image for post

Tranche selection

Saffron also includes an “S” tranche for allocating liquidity efficiently as it is needed based on a tranche balancing algorithm.

Launch

Saffron is a launching with a web3 application: saffron.finance. The Saffron smart contracts (pool, token, adapter, and strategy) are deployed in standby mode on the Ethereum mainnet and are set to go live on November 1st, 2020 at 2:00pm UTC. The first epoch begins exactly at that time.

Epochs

Epochs are 14 days in length. Over the duration of an epoch liquidity providers earn interest on underlying platforms and mine SFI tokens. While liquidity is locked in the pool LPs may trade their Saffron LP tokens representing proportional ownership of the pool. When an epoch ends liquidity providers are able to remove their liquidity alongside SFI mined and interest earned.

Upon launch all liquidity will be added into the S tranche to kick off liquidity mining. The AA and A tranches will be enabled in the second epoch.

Liquidity mining

Saffron is launching with DAI liquidity mining. All DAI added to the Saffron pool is deployed to Compound and earns interest. In future versions of the protocol additional currencies and platforms will be added dynamically.

SFI is mined using the dsec (dollars per second) equation:

dsec = dollar value * seconds

Liquidity providers mint dsec tokens representing the dollar value of capital they’ve added to the pool multiplied by the number of seconds until the end of the current epoch. SFI generated at the end of the epoch are redeemable in proportion to the total outstanding dsec tokens generated during that epoch. For example, if Alice owns 10% of outstanding dsec tokens then she receives 10% of the SFI subsidy. Interest earned is also distributed this way.

Saffron’s native ecosystem token: the Spice token (SFI)

SFI tokens, or Spice tokens, are the native currency of Saffron driving all of its features, products, and incentive structures.

Attributes of the SFI token:

  • ERC-20 capped at 100,000 SFI.
  • Tokens are a subsidy for liquidity providers and are awarded via liquidity mining.
  • The first epoch will generate 40,000 tokens.
  • SFI token subsidy is halved every epoch, up to and including epoch 7.
  • Beginning on epoch 8, halving discontinues and SFI are steadily released at a rate of 200 tokens per epoch, until reaching the 100,000 cap or a governance vote to change the emission schedule.
  • SFI tokens must be staked before an LP can join the yield-enhancing A tranche.
  • There are no fees in version 1, however, upon introduction of fees SFI staking will entitle stakers to a proportional share of fee revenue.
  • Fees continue to provide incentives when SFI token generation ends.
  • The Saffron team is allocated 25% of all SFI minted.

Emission schedule

SFI tokens are minted at the end of each epoch and distributed to dsec token holders and the Saffron team.

Image for post

The first 6 months of SFI emission (an epoch is exactly 14 days)

Team tokens will be used for ongoing development and providing liquidity on decentralized exchanges.

Approximately 15,000 tokens will be available to the Saffron treasury after the first six months of SFI generation. This ensures ongoing flexibility in the protocol. On-chain governance, once implemented, can decide how the remaining coins are allocated.

Image for post

Treasury spending should be decided by governance when fees significantly outpace subsidy incentives

The SFI subsidy is split between all pools evenly, except the SFI staking pool, which is a special case. The SFI staking pool’s share of the subsidy is a fixed percentage of the total amount.

Smart contracts

The Saffron smart contracts have been deployed and their code has been verified on etherscan and added to a GitHub repository.

Saffron smart contracts have not yet been audited and users should exercise caution. Code audits and economic attack vector evaluation are included in the team’s ongoing development timeline.

That being said, the Saffron pool, adapter, strategy, and token contracts have been tested with 10,000 DAI in a beta test epoch on the Ethereum mainnet.

The Saffron pool beta contract address is:

0x7DB640b1190B192E8C977208D863e0e1E821CBdB

  • DAI interest, SFI mined, and principal tokens were all correctly distributed to LPs who successfully redeemed the correct amounts according to their beta dsec and principal token balances.

Introducing Saffron V2

Image for post

At a high level, Saffron V2:

  1. Adds 4 new pool types
  2. Implements new capabilities for Binance Smart Chain as well as Ethereum (The V2 beta includes earning BUSD yield on Venus and ETH yield on Alpha Homora)
  3. Upgrades the original V1 pool types
  4. Introduces 4 new key features:
    • Perpetual staking
    • Unlocked pools
    • Liquidity targeting
    • Tranched exchange rates

New pool types

Saffron V2 introduces 4 new pool types.

  1. **Market rate pool **- where the cost of insurance rises and falls based on demand, and junior tranche returns reflect tranche capacity. This pool launches in beta mode today.
  2. **Fixed interest rate pool **- where the senior tranche earns a steady APY, and junior tranche has a variable return rate.
  3. **Perpetual ERC20 staking pool **- where users can participate in SFI staking, Sushi LP, and UNI-V2 for rewards. SLP and UNI-V2 pools will transition into IL mitigation pools later on.
  4. Impermanent loss mitigation pool - where senior tranche buys protection against impermanent loss, and junior tranche earns enhanced APY from trading fees and/or Liquidity Mining rewards (more details to come).

Binance Smart Chain & Ethereum pools with Alpha & Venus

The first V2 pools will be market rate pools with S, AA, and A tranches enabled for BUSD/Venus and ETH/Alpha adapters. This means BUSD will be supplied to Venus to earn yield on BSC, and ETH will be supplied to Alpha Homora’s ibETH contract to earn yield on Ethereum.

Enhanced V1 pools

The existing V1 enhanced interest rate pool (10X junior tranche DAI/Compound, DAI/Rari, WBTC/Compound, etc.) will be next to receive an upgrade to the new V2 perpetual enhanced interest rate pool structure. More information on this will be released in a detailed post follow-up.

Each of the new pools have passed the conceptual stage and already have code committed. We plan to iterate on and greatly expand new pool types during the duration of the V2 beta. Saffron V2 is flexible and will result in a wide variety of new pools implementing creative solutions for the unique challenges of decentralized finance.

New features

Some of the new features in V2 pools include, but are not limited to:

  • Perpetual staking - where pools with epochs roll over automatically. Major gas savings and user experience improvement.
  • Unlocked pools - replacing time-locked capital with a yield curve based on utilization rate. Users can join and leave unlocked pools at any time. The market rate pool released today is the first implementation of an unlocked pool.
  • Liquidity targeting (target APY = SFI price * reward schedule / TVL) for more effective distribution of SFI liquidity mining rewards.
  • Tranched exchange rates - a new concept invented by the Saffron team.

Tranched exchange rates

Tranched exchange rates are a new concept pioneered by our team and replace the V1 SAFF-LP token structure. V2 SAFF-LP tokens accrue value over time with an ever-increasing exchange rate relative to pool base assets. This new LP token structure powers each of the new features listed above and has the added benefit of simplifying integration with DeFi visualization software and widely used dashboards (Zapper, Zerion, DeBank, and more).

Image for post

Tranche exchange rate flowchart

Governance

Saffron V2 makes off-chain governance much easier to implement. The structure of the V2 pools makes LP tokens more consistent, introduces a general interface for exchange rates, and will include new governance features built in to each pool.

We are also hiring for a new role: governance developer, who we imagine as a blend between programmer and human coordination optimizer. The eventual goal of Saffron is to become a fully autonomous and decentralized organization that self-perpetuates and captures value via the protocol’s optimization of risk and return. If that sounds interesting to you then please don’t hesitate to join the community and participate in building governance today.

Looking for more information…

WebsiteExplorerSource CodeSocial ChannelSocial Channel 2Social Channel 3Message BoardCoinmarketcap

Would you like to earn SFI right now! ☞ [CLICK HERE](https://www.binance.com/en/register?ref=28551372 “CLICK HERE”)

Top exchanges for token-coin trading. Follow instructions and make unlimited money

BinanceBittrexPoloniexBitfinexHuobiMXC

Thank for visiting and reading this article! I’m highly appreciate your actions! Please share if you liked it!

#bitcoin #crypto #saffron finance #sfi

What is GEEK

Buddha Community

What is Saffron Finance (SFI) | What is Saffron Finance token | What is SFI token

What is Saffron Finance (SFI) | What is Saffron Finance token | What is SFI token

About saffron.finance

Saffron is a protocol for tokenizing on-chain assets, including contracts that otherwise impair access to utilized capital. Tokenized ownership of on-chain assets gives liquidity providers greater flexibility and uninterrupted access to their underlying collateral while enabling leveraged staking and bespoke risk management.

Peer to peer risk exchange

Existing decentralized earning platforms expose liquidity providers to complex code driven outcomes. Network participants must evaluate an array of catastrophic scenarios where the resulting state could wipe out their holdings or lead to significant impermanent loss. It is hard to anticipate the net effect of extreme market volatility or focused economic attacks. Saffron narrows the set of possible outcomes by giving liquidity providers dynamic exposure.

Dynamic exposure

The first application of Saffron gives liquidity providers the option to select customized risk and return profiles via the use of Saffron pool tranches. Saffron separately tokenizes the future earning stream and the net present value of utilized principal in each tranche. Earnings, based on tokenized holdings, are distributed accordingly across all tranches via payback waterfalls.

Payback waterfall

The initial application of the payback waterfall is split between two primary tranches. -A yield enhanced “A” tranche. -A risk mitigated super-senior “AA” tranche.

Added liquidity, when removed, is used to pay back the initial principal of AA holders before paying the principal and interest of the yield enhanced A tranche. In exchange for this enhanced return, participants of the A tranche must stake Saffron’s native tokens (SFI) to mitigate against failures on the underlying platform (such as Compound, Aave, or Curve). The Saffron protocol in this scenario acts as an escrow service for transfer of risk between A tranche participants and AA tranche participants. Saffron also includes an “S” tranche for allocating liquidity efficiently as it is needed based on a tranche balancing algorithm.

Introduction to Saffron

A standard for tokenizing on-chain collateral

Saffron is a protocol for tokenizing on-chain assets, including contracts that otherwise impair access to utilized capital. Tokenized ownership of on-chain assets gives liquidity providers greater flexibility and uninterrupted access to their underlying collateral while enabling leveraged staking and bespoke risk management.

Peer to peer risk exchange

Existing decentralized earning platforms expose liquidity providers to complex code driven outcomes. Network participants must evaluate an array of catastrophic scenarios where the resulting state could wipe out their holdings or lead to significant impermanent loss. It is hard to anticipate the net effect of extreme market volatility or focused economic attacks. Saffron narrows the set of possible outcomes by giving liquidity providers dynamic exposure.

Dynamic exposure

The first application of Saffron gives liquidity providers the option to select customized risk and return profiles via the use of Saffron pool tranches. Saffron separately tokenizes the future earning stream and the net present value of utilized principal in each tranche. Earnings, based on tokenized holdings, are distributed accordingly across all tranches via payback waterfalls.

Payback waterfall

The initial application of the payback waterfall is split between two primary tranches.

  • A yield enhanced “A” tranche.
  • A risk mitigated super-senior “AA” tranche.

Added liquidity, when removed, is used to pay back the initial principal of AA holders before paying the principal and interest of the yield enhanced A tranche. In exchange for this enhanced return, participants of the A tranche must stake Saffron’s native tokens (SFI) to mitigate against failures on the underlying platform (such as Compound, Aave, or Curve). The Saffron protocol in this scenario acts as an escrow service for transfer of risk between A tranche participants and AA tranche participants.

Image for post

Tranche selection

Saffron also includes an “S” tranche for allocating liquidity efficiently as it is needed based on a tranche balancing algorithm.

Launch

Saffron is a launching with a web3 application: saffron.finance. The Saffron smart contracts (pool, token, adapter, and strategy) are deployed in standby mode on the Ethereum mainnet and are set to go live on November 1st, 2020 at 2:00pm UTC. The first epoch begins exactly at that time.

Epochs

Epochs are 14 days in length. Over the duration of an epoch liquidity providers earn interest on underlying platforms and mine SFI tokens. While liquidity is locked in the pool LPs may trade their Saffron LP tokens representing proportional ownership of the pool. When an epoch ends liquidity providers are able to remove their liquidity alongside SFI mined and interest earned.

Upon launch all liquidity will be added into the S tranche to kick off liquidity mining. The AA and A tranches will be enabled in the second epoch.

Liquidity mining

Saffron is launching with DAI liquidity mining. All DAI added to the Saffron pool is deployed to Compound and earns interest. In future versions of the protocol additional currencies and platforms will be added dynamically.

SFI is mined using the dsec (dollars per second) equation:

dsec = dollar value * seconds

Liquidity providers mint dsec tokens representing the dollar value of capital they’ve added to the pool multiplied by the number of seconds until the end of the current epoch. SFI generated at the end of the epoch are redeemable in proportion to the total outstanding dsec tokens generated during that epoch. For example, if Alice owns 10% of outstanding dsec tokens then she receives 10% of the SFI subsidy. Interest earned is also distributed this way.

Saffron’s native ecosystem token: the Spice token (SFI)

SFI tokens, or Spice tokens, are the native currency of Saffron driving all of its features, products, and incentive structures.

Attributes of the SFI token:

  • ERC-20 capped at 100,000 SFI.
  • Tokens are a subsidy for liquidity providers and are awarded via liquidity mining.
  • The first epoch will generate 40,000 tokens.
  • SFI token subsidy is halved every epoch, up to and including epoch 7.
  • Beginning on epoch 8, halving discontinues and SFI are steadily released at a rate of 200 tokens per epoch, until reaching the 100,000 cap or a governance vote to change the emission schedule.
  • SFI tokens must be staked before an LP can join the yield-enhancing A tranche.
  • There are no fees in version 1, however, upon introduction of fees SFI staking will entitle stakers to a proportional share of fee revenue.
  • Fees continue to provide incentives when SFI token generation ends.
  • The Saffron team is allocated 25% of all SFI minted.

Emission schedule

SFI tokens are minted at the end of each epoch and distributed to dsec token holders and the Saffron team.

Image for post

The first 6 months of SFI emission (an epoch is exactly 14 days)

Team tokens will be used for ongoing development and providing liquidity on decentralized exchanges.

Approximately 15,000 tokens will be available to the Saffron treasury after the first six months of SFI generation. This ensures ongoing flexibility in the protocol. On-chain governance, once implemented, can decide how the remaining coins are allocated.

Image for post

Treasury spending should be decided by governance when fees significantly outpace subsidy incentives

The SFI subsidy is split between all pools evenly, except the SFI staking pool, which is a special case. The SFI staking pool’s share of the subsidy is a fixed percentage of the total amount.

Smart contracts

The Saffron smart contracts have been deployed and their code has been verified on etherscan and added to a GitHub repository.

Saffron smart contracts have not yet been audited and users should exercise caution. Code audits and economic attack vector evaluation are included in the team’s ongoing development timeline.

That being said, the Saffron pool, adapter, strategy, and token contracts have been tested with 10,000 DAI in a beta test epoch on the Ethereum mainnet.

The Saffron pool beta contract address is:

0x7DB640b1190B192E8C977208D863e0e1E821CBdB

  • DAI interest, SFI mined, and principal tokens were all correctly distributed to LPs who successfully redeemed the correct amounts according to their beta dsec and principal token balances.

Introducing Saffron V2

Image for post

At a high level, Saffron V2:

  1. Adds 4 new pool types
  2. Implements new capabilities for Binance Smart Chain as well as Ethereum (The V2 beta includes earning BUSD yield on Venus and ETH yield on Alpha Homora)
  3. Upgrades the original V1 pool types
  4. Introduces 4 new key features:
    • Perpetual staking
    • Unlocked pools
    • Liquidity targeting
    • Tranched exchange rates

New pool types

Saffron V2 introduces 4 new pool types.

  1. **Market rate pool **- where the cost of insurance rises and falls based on demand, and junior tranche returns reflect tranche capacity. This pool launches in beta mode today.
  2. **Fixed interest rate pool **- where the senior tranche earns a steady APY, and junior tranche has a variable return rate.
  3. **Perpetual ERC20 staking pool **- where users can participate in SFI staking, Sushi LP, and UNI-V2 for rewards. SLP and UNI-V2 pools will transition into IL mitigation pools later on.
  4. Impermanent loss mitigation pool - where senior tranche buys protection against impermanent loss, and junior tranche earns enhanced APY from trading fees and/or Liquidity Mining rewards (more details to come).

Binance Smart Chain & Ethereum pools with Alpha & Venus

The first V2 pools will be market rate pools with S, AA, and A tranches enabled for BUSD/Venus and ETH/Alpha adapters. This means BUSD will be supplied to Venus to earn yield on BSC, and ETH will be supplied to Alpha Homora’s ibETH contract to earn yield on Ethereum.

Enhanced V1 pools

The existing V1 enhanced interest rate pool (10X junior tranche DAI/Compound, DAI/Rari, WBTC/Compound, etc.) will be next to receive an upgrade to the new V2 perpetual enhanced interest rate pool structure. More information on this will be released in a detailed post follow-up.

Each of the new pools have passed the conceptual stage and already have code committed. We plan to iterate on and greatly expand new pool types during the duration of the V2 beta. Saffron V2 is flexible and will result in a wide variety of new pools implementing creative solutions for the unique challenges of decentralized finance.

New features

Some of the new features in V2 pools include, but are not limited to:

  • Perpetual staking - where pools with epochs roll over automatically. Major gas savings and user experience improvement.
  • Unlocked pools - replacing time-locked capital with a yield curve based on utilization rate. Users can join and leave unlocked pools at any time. The market rate pool released today is the first implementation of an unlocked pool.
  • Liquidity targeting (target APY = SFI price * reward schedule / TVL) for more effective distribution of SFI liquidity mining rewards.
  • Tranched exchange rates - a new concept invented by the Saffron team.

Tranched exchange rates

Tranched exchange rates are a new concept pioneered by our team and replace the V1 SAFF-LP token structure. V2 SAFF-LP tokens accrue value over time with an ever-increasing exchange rate relative to pool base assets. This new LP token structure powers each of the new features listed above and has the added benefit of simplifying integration with DeFi visualization software and widely used dashboards (Zapper, Zerion, DeBank, and more).

Image for post

Tranche exchange rate flowchart

Governance

Saffron V2 makes off-chain governance much easier to implement. The structure of the V2 pools makes LP tokens more consistent, introduces a general interface for exchange rates, and will include new governance features built in to each pool.

We are also hiring for a new role: governance developer, who we imagine as a blend between programmer and human coordination optimizer. The eventual goal of Saffron is to become a fully autonomous and decentralized organization that self-perpetuates and captures value via the protocol’s optimization of risk and return. If that sounds interesting to you then please don’t hesitate to join the community and participate in building governance today.

Looking for more information…

WebsiteExplorerSource CodeSocial ChannelSocial Channel 2Social Channel 3Message BoardCoinmarketcap

Would you like to earn SFI right now! ☞ [CLICK HERE](https://www.binance.com/en/register?ref=28551372 “CLICK HERE”)

Top exchanges for token-coin trading. Follow instructions and make unlimited money

BinanceBittrexPoloniexBitfinexHuobiMXC

Thank for visiting and reading this article! I’m highly appreciate your actions! Please share if you liked it!

#bitcoin #crypto #saffron finance #sfi

Angelina roda

Angelina roda

1624219980

How to Buy NFT Art Finance Token - The EASIEST METHOD! DO NOT MISS!!! JUST IN 4 MINUTES

NFT Art Finance is currently one of the most popular cryptocurrencies right now on the market, so in today’s video, I will be showing you guys how to easily buy NFT Art Finance on your phone using the Trust Wallet application.
📺 The video in this post was made by More LimSanity
The origin of the article: https://www.youtube.com/watch?v=sKE6Pc_w1IE
🔺 DISCLAIMER: The article is for information sharing. The content of this video is solely the opinions of the speaker who is not a licensed financial advisor or registered investment advisor. Not investment advice or legal advice.
Cryptocurrency trading is VERY risky. Make sure you understand these risks and that you are responsible for what you do with your money
🔥 If you’re a beginner. I believe the article below will be useful to you ☞ What You Should Know Before Investing in Cryptocurrency - For Beginner
⭐ ⭐ ⭐The project is of interest to the community. Join to Get free ‘GEEK coin’ (GEEKCASH coin)!
☞ **-----CLICK HERE-----**⭐ ⭐ ⭐
Thanks for visiting and watching! Please don’t forget to leave a like, comment and share!

#bitcoin #blockchain #nft art finance token #token #buy nft art finance #how to buy nft art finance token - the easiest method!

David mr

David mr

1624312800

SPORE FINANCE PREDICTION - WHAT IS SPORE FINANCE & SPORE FINANCE ANALYSIS - SPORE FINANCE

SPORE FINANCE PREDICTION - WHAT IS SPORE FINANCE & SPORE FINANCE ANALYSIS - SPORE FINANCE

In this video, I talk about spore finance coin and give my spore finance prediction. I talk about the latest spore finance analysis & spore finance crypto coin that recently has been hit pretty hard in the last 24 hours. I go over what is spore finance and how many holders are on this new crypto coin spore finance.
📺 The video in this post was made by Josh’s Finance
The origin of the article: https://www.youtube.com/watch?v=qbPQvdxCtEI
🔺 DISCLAIMER: The article is for information sharing. The content of this video is solely the opinions of the speaker who is not a licensed financial advisor or registered investment advisor. Not investment advice or legal advice.
Cryptocurrency trading is VERY risky. Make sure you understand these risks and that you are responsible for what you do with your money
🔥 If you’re a beginner. I believe the article below will be useful to you ☞ What You Should Know Before Investing in Cryptocurrency - For Beginner
⭐ ⭐ ⭐The project is of interest to the community. Join to Get free ‘GEEK coin’ (GEEKCASH coin)!
☞ **-----CLICK HERE-----**⭐ ⭐ ⭐
Thanks for visiting and watching! Please don’t forget to leave a like, comment and share!

#bitcoin #blockchain #spore finance #what is spore finance #spore finance prediction - what is spore finance & spore finance analysis - spore finance #spore finance prediction

Words Counted: A Ruby Natural Language Processor.

WordsCounted

We are all in the gutter, but some of us are looking at the stars.

-- Oscar Wilde

WordsCounted is a Ruby NLP (natural language processor). WordsCounted lets you implement powerful tokensation strategies with a very flexible tokeniser class.

Are you using WordsCounted to do something interesting? Please tell me about it.

 

Demo

Visit this website for one example of what you can do with WordsCounted.

Features

  • Out of the box, get the following data from any string or readable file, or URL:
    • Token count and unique token count
    • Token densities, frequencies, and lengths
    • Char count and average chars per token
    • The longest tokens and their lengths
    • The most frequent tokens and their frequencies.
  • A flexible way to exclude tokens from the tokeniser. You can pass a string, regexp, symbol, lambda, or an array of any combination of those types for powerful tokenisation strategies.
  • Pass your own regexp rules to the tokeniser if you prefer. The default regexp filters special characters but keeps hyphens and apostrophes. It also plays nicely with diacritics (UTF and unicode characters): Bayrūt is treated as ["Bayrūt"] and not ["Bayr", "ū", "t"], for example.
  • Opens and reads files. Pass in a file path or a url instead of a string.

Installation

Add this line to your application's Gemfile:

gem 'words_counted'

And then execute:

$ bundle

Or install it yourself as:

$ gem install words_counted

Usage

Pass in a string or a file path, and an optional filter and/or regexp.

counter = WordsCounted.count(
  "We are all in the gutter, but some of us are looking at the stars."
)

# Using a file
counter = WordsCounted.from_file("path/or/url/to/my/file.txt")

.count and .from_file are convenience methods that take an input, tokenise it, and return an instance of WordsCounted::Counter initialized with the tokens. The WordsCounted::Tokeniser and WordsCounted::Counter classes can be used alone, however.

API

WordsCounted

WordsCounted.count(input, options = {})

Tokenises input and initializes a WordsCounted::Counter object with the resulting tokens.

counter = WordsCounted.count("Hello Beirut!")

Accepts two options: exclude and regexp. See Excluding tokens from the analyser and Passing in a custom regexp respectively.

WordsCounted.from_file(path, options = {})

Reads and tokenises a file, and initializes a WordsCounted::Counter object with the resulting tokens.

counter = WordsCounted.from_file("hello_beirut.txt")

Accepts the same options as .count.

Tokeniser

The tokeniser allows you to tokenise text in a variety of ways. You can pass in your own rules for tokenisation, and apply a powerful filter with any combination of rules as long as they can boil down into a lambda.

Out of the box the tokeniser includes only alpha chars. Hyphenated tokens and tokens with apostrophes are considered a single token.

#tokenise([pattern: TOKEN_REGEXP, exclude: nil])

tokeniser = WordsCounted::Tokeniser.new("Hello Beirut!").tokenise

# With `exclude`
tokeniser = WordsCounted::Tokeniser.new("Hello Beirut!").tokenise(exclude: "hello")

# With `pattern`
tokeniser = WordsCounted::Tokeniser.new("I <3 Beirut!").tokenise(pattern: /[a-z]/i)

See Excluding tokens from the analyser and Passing in a custom regexp for more information.

Counter

The WordsCounted::Counter class allows you to collect various statistics from an array of tokens.

#token_count

Returns the token count of a given string.

counter.token_count #=> 15

#token_frequency

Returns a sorted (unstable) two-dimensional array where each element is a token and its frequency. The array is sorted by frequency in descending order.

counter.token_frequency

[
  ["the", 2],
  ["are", 2],
  ["we",  1],
  # ...
  ["all", 1]
]

#most_frequent_tokens

Returns a hash where each key-value pair is a token and its frequency.

counter.most_frequent_tokens

{ "are" => 2, "the" => 2 }

#token_lengths

Returns a sorted (unstable) two-dimentional array where each element contains a token and its length. The array is sorted by length in descending order.

counter.token_lengths

[
  ["looking", 7],
  ["gutter",  6],
  ["stars",   5],
  # ...
  ["in",      2]
]

#longest_tokens

Returns a hash where each key-value pair is a token and its length.

counter.longest_tokens

{ "looking" => 7 }

#token_density([ precision: 2 ])

Returns a sorted (unstable) two-dimentional array where each element contains a token and its density as a float, rounded to a precision of two. The array is sorted by density in descending order. It accepts a precision argument, which must be a float.

counter.token_density

[
  ["are",     0.13],
  ["the",     0.13],
  ["but",     0.07 ],
  # ...
  ["we",      0.07 ]
]

#char_count

Returns the char count of tokens.

counter.char_count #=> 76

#average_chars_per_token([ precision: 2 ])

Returns the average char count per token rounded to two decimal places. Accepts a precision argument which defaults to two. Precision must be a float.

counter.average_chars_per_token #=> 4

#uniq_token_count

Returns the number of unique tokens.

counter.uniq_token_count #=> 13

Excluding tokens from the tokeniser

You can exclude anything you want from the input by passing the exclude option. The exclude option accepts a variety of filters and is extremely flexible.

  1. A space-delimited string. The filter will normalise the string.
  2. A regular expression.
  3. A lambda.
  4. A symbol that names a predicate method. For example :odd?.
  5. An array of any combination of the above.
tokeniser =
  WordsCounted::Tokeniser.new(
    "Magnificent! That was magnificent, Trevor."
  )

# Using a string
tokeniser.tokenise(exclude: "was magnificent")
# => ["that", "trevor"]

# Using a regular expression
tokeniser.tokenise(exclude: /trevor/)
# => ["magnificent", "that", "was", "magnificent"]

# Using a lambda
tokeniser.tokenise(exclude: ->(t) { t.length < 4 })
# => ["magnificent", "that", "magnificent", "trevor"]

# Using symbol
tokeniser = WordsCounted::Tokeniser.new("Hello! محمد")
tokeniser.tokenise(exclude: :ascii_only?)
# => ["محمد"]

# Using an array
tokeniser = WordsCounted::Tokeniser.new(
  "Hello! اسماءنا هي محمد، كارولينا، سامي، وداني"
)
tokeniser.tokenise(
  exclude: [:ascii_only?, /محمد/, ->(t) { t.length > 6}, "و"]
)
# => ["هي", "سامي", "وداني"]

Passing in a custom regexp

The default regexp accounts for letters, hyphenated tokens, and apostrophes. This means twenty-one is treated as one token. So is Mohamad's.

/[\p{Alpha}\-']+/

You can pass your own criteria as a Ruby regular expression to split your string as desired.

For example, if you wanted to include numbers, you can override the regular expression:

counter = WordsCounted.count("Numbers 1, 2, and 3", pattern: /[\p{Alnum}\-']+/)
counter.tokens
#=> ["numbers", "1", "2", "and", "3"]

Opening and reading files

Use the from_file method to open files. from_file accepts the same options as .count. The file path can be a URL.

counter = WordsCounted.from_file("url/or/path/to/file.text")

Gotchas

A hyphen used in leu of an em or en dash will form part of the token. This affects the tokeniser algorithm.

counter = WordsCounted.count("How do you do?-you are well, I see.")
counter.token_frequency

[
  ["do",   2],
  ["how",  1],
  ["you",  1],
  ["-you", 1], # WTF, mate!
  ["are",  1],
  # ...
]

In this example -you and you are separate tokens. Also, the tokeniser does not include numbers by default. Remember that you can pass your own regular expression if the default behaviour does not fit your needs.

A note on case sensitivity

The program will normalise (downcase) all incoming strings for consistency and filters.

Roadmap

Ability to open URLs

def self.from_url
  # open url and send string here after removing html
end

Contributors

See contributors.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Author: abitdodgy
Source code: https://github.com/abitdodgy/words_counted
License: MIT license

#ruby  #ruby-on-rails 

Royce  Reinger

Royce Reinger

1658068560

WordsCounted: A Ruby Natural Language Processor

WordsCounted

We are all in the gutter, but some of us are looking at the stars.

-- Oscar Wilde

WordsCounted is a Ruby NLP (natural language processor). WordsCounted lets you implement powerful tokensation strategies with a very flexible tokeniser class.

Features

  • Out of the box, get the following data from any string or readable file, or URL:
    • Token count and unique token count
    • Token densities, frequencies, and lengths
    • Char count and average chars per token
    • The longest tokens and their lengths
    • The most frequent tokens and their frequencies.
  • A flexible way to exclude tokens from the tokeniser. You can pass a string, regexp, symbol, lambda, or an array of any combination of those types for powerful tokenisation strategies.
  • Pass your own regexp rules to the tokeniser if you prefer. The default regexp filters special characters but keeps hyphens and apostrophes. It also plays nicely with diacritics (UTF and unicode characters): Bayrūt is treated as ["Bayrūt"] and not ["Bayr", "ū", "t"], for example.
  • Opens and reads files. Pass in a file path or a url instead of a string.

Installation

Add this line to your application's Gemfile:

gem 'words_counted'

And then execute:

$ bundle

Or install it yourself as:

$ gem install words_counted

Usage

Pass in a string or a file path, and an optional filter and/or regexp.

counter = WordsCounted.count(
  "We are all in the gutter, but some of us are looking at the stars."
)

# Using a file
counter = WordsCounted.from_file("path/or/url/to/my/file.txt")

.count and .from_file are convenience methods that take an input, tokenise it, and return an instance of WordsCounted::Counter initialized with the tokens. The WordsCounted::Tokeniser and WordsCounted::Counter classes can be used alone, however.

API

WordsCounted

WordsCounted.count(input, options = {})

Tokenises input and initializes a WordsCounted::Counter object with the resulting tokens.

counter = WordsCounted.count("Hello Beirut!")

Accepts two options: exclude and regexp. See Excluding tokens from the analyser and Passing in a custom regexp respectively.

WordsCounted.from_file(path, options = {})

Reads and tokenises a file, and initializes a WordsCounted::Counter object with the resulting tokens.

counter = WordsCounted.from_file("hello_beirut.txt")

Accepts the same options as .count.

Tokeniser

The tokeniser allows you to tokenise text in a variety of ways. You can pass in your own rules for tokenisation, and apply a powerful filter with any combination of rules as long as they can boil down into a lambda.

Out of the box the tokeniser includes only alpha chars. Hyphenated tokens and tokens with apostrophes are considered a single token.

#tokenise([pattern: TOKEN_REGEXP, exclude: nil])

tokeniser = WordsCounted::Tokeniser.new("Hello Beirut!").tokenise

# With `exclude`
tokeniser = WordsCounted::Tokeniser.new("Hello Beirut!").tokenise(exclude: "hello")

# With `pattern`
tokeniser = WordsCounted::Tokeniser.new("I <3 Beirut!").tokenise(pattern: /[a-z]/i)

See Excluding tokens from the analyser and Passing in a custom regexp for more information.

Counter

The WordsCounted::Counter class allows you to collect various statistics from an array of tokens.

#token_count

Returns the token count of a given string.

counter.token_count #=> 15

#token_frequency

Returns a sorted (unstable) two-dimensional array where each element is a token and its frequency. The array is sorted by frequency in descending order.

counter.token_frequency

[
  ["the", 2],
  ["are", 2],
  ["we",  1],
  # ...
  ["all", 1]
]

#most_frequent_tokens

Returns a hash where each key-value pair is a token and its frequency.

counter.most_frequent_tokens

{ "are" => 2, "the" => 2 }

#token_lengths

Returns a sorted (unstable) two-dimentional array where each element contains a token and its length. The array is sorted by length in descending order.

counter.token_lengths

[
  ["looking", 7],
  ["gutter",  6],
  ["stars",   5],
  # ...
  ["in",      2]
]

#longest_tokens

Returns a hash where each key-value pair is a token and its length.

counter.longest_tokens

{ "looking" => 7 }

#token_density([ precision: 2 ])

Returns a sorted (unstable) two-dimentional array where each element contains a token and its density as a float, rounded to a precision of two. The array is sorted by density in descending order. It accepts a precision argument, which must be a float.

counter.token_density

[
  ["are",     0.13],
  ["the",     0.13],
  ["but",     0.07 ],
  # ...
  ["we",      0.07 ]
]

#char_count

Returns the char count of tokens.

counter.char_count #=> 76

#average_chars_per_token([ precision: 2 ])

Returns the average char count per token rounded to two decimal places. Accepts a precision argument which defaults to two. Precision must be a float.

counter.average_chars_per_token #=> 4

#uniq_token_count

Returns the number of unique tokens.

counter.uniq_token_count #=> 13

Excluding tokens from the tokeniser

You can exclude anything you want from the input by passing the exclude option. The exclude option accepts a variety of filters and is extremely flexible.

  1. A space-delimited string. The filter will normalise the string.
  2. A regular expression.
  3. A lambda.
  4. A symbol that names a predicate method. For example :odd?.
  5. An array of any combination of the above.
tokeniser =
  WordsCounted::Tokeniser.new(
    "Magnificent! That was magnificent, Trevor."
  )

# Using a string
tokeniser.tokenise(exclude: "was magnificent")
# => ["that", "trevor"]

# Using a regular expression
tokeniser.tokenise(exclude: /trevor/)
# => ["magnificent", "that", "was", "magnificent"]

# Using a lambda
tokeniser.tokenise(exclude: ->(t) { t.length < 4 })
# => ["magnificent", "that", "magnificent", "trevor"]

# Using symbol
tokeniser = WordsCounted::Tokeniser.new("Hello! محمد")
tokeniser.tokenise(exclude: :ascii_only?)
# => ["محمد"]

# Using an array
tokeniser = WordsCounted::Tokeniser.new(
  "Hello! اسماءنا هي محمد، كارولينا، سامي، وداني"
)
tokeniser.tokenise(
  exclude: [:ascii_only?, /محمد/, ->(t) { t.length > 6}, "و"]
)
# => ["هي", "سامي", "وداني"]

Passing in a custom regexp

The default regexp accounts for letters, hyphenated tokens, and apostrophes. This means twenty-one is treated as one token. So is Mohamad's.

/[\p{Alpha}\-']+/

You can pass your own criteria as a Ruby regular expression to split your string as desired.

For example, if you wanted to include numbers, you can override the regular expression:

counter = WordsCounted.count("Numbers 1, 2, and 3", pattern: /[\p{Alnum}\-']+/)
counter.tokens
#=> ["numbers", "1", "2", "and", "3"]

Opening and reading files

Use the from_file method to open files. from_file accepts the same options as .count. The file path can be a URL.

counter = WordsCounted.from_file("url/or/path/to/file.text")

Gotchas

A hyphen used in leu of an em or en dash will form part of the token. This affects the tokeniser algorithm.

counter = WordsCounted.count("How do you do?-you are well, I see.")
counter.token_frequency

[
  ["do",   2],
  ["how",  1],
  ["you",  1],
  ["-you", 1], # WTF, mate!
  ["are",  1],
  # ...
]

In this example -you and you are separate tokens. Also, the tokeniser does not include numbers by default. Remember that you can pass your own regular expression if the default behaviour does not fit your needs.

A note on case sensitivity

The program will normalise (downcase) all incoming strings for consistency and filters.

Roadmap

Ability to open URLs

def self.from_url
  # open url and send string here after removing html
end

Are you using WordsCounted to do something interesting? Please tell me about it.

Gem Version 

RubyDoc documentation.

Demo

Visit this website for one example of what you can do with WordsCounted.


Contributors

See contributors.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Author: Abitdodgy
Source Code: https://github.com/abitdodgy/words_counted 
License: MIT license

#ruby #nlp