PHPackages                             iankov/keywords - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. iankov/keywords

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

iankov/keywords
===============

Automatic keywords out of given text

v1.0.0(7y ago)016PHP

Since Jul 24Pushed 7y ago1 watchersCompare

[ Source](https://github.com/iankov/keywords)[ Packagist](https://packagist.org/packages/iankov/keywords)[ RSS](/packages/iankov-keywords/feed)WikiDiscussions master Synced 2w ago

READMEChangelog (1)DependenciesVersions (2)Used By (0)

Usage
=====

[](#usage)

The package groups and counts similar words. The most used words in the text are used for building keywords `$keywords->string($wordsCount, $delimiter)`

```
$keywords = new Keywords;

$keywords->config([
    'min_keyword_length' => 3, //ignore words with length less then 3
    'min_keyword_similarity' => 80, //group similar words with similarity at least 80%
    'encoding' => 'utf-8' //text encoding
]);

$keywords->content($text_or_html); //set text or html which would be scanned for keywords

$keywords->content(); //get content

$keywords->ignore($string, $type); //ignore $string of $type(word, symbol, regex) from content
$keywords->ignoreWord('are'); //ignore word
$keywords->ignoreSymbol('@'); //ignore symbol
$keywords->ignoreRegex('/[0-9]+/i'); //ignore regex

$keywords->replace('/halo/i', 'hello'); //replace

$keywords->generate(); //generate keywords

$keywords->get(); //get Collection of keywords (not sorted)
$keywords->string(10, ' '); //get 10 most used keywords as a string separated by space
```

Also it is possible to use functions in a chain

```
$keywords = new Keywords;
$stringOfKeywords = $keywords->content($text_or_html)->generate()->string(20);

$collectionOfKeywords = (new Keywords)->content($text)->ignoreWord(['hello', 'world'])->generate()->get();
```

###  Health Score

26

—

LowBetter than 41% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2897d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3382329?v=4)[Dmitriy Yankov](/maintainers/iankov)[@iankov](https://github.com/iankov)

---

Top Contributors

[![iankov](https://avatars.githubusercontent.com/u/3382329?v=4)](https://github.com/iankov "iankov (3 commits)")

### Embed Badge

![Health badge](/badges/iankov-keywords/health.svg)

```
[![Health](https://phpackages.com/badges/iankov-keywords/health.svg)](https://phpackages.com/packages/iankov-keywords)
```

###  Alternatives

[dominicwatts/contactattachment

Magento 2 field and functionality to attach files to the contact form

134.4k](/packages/dominicwatts-contactattachment)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
