PHPackages                             talan-hdf/semantic-suggestion - 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. talan-hdf/semantic-suggestion

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

talan-hdf/semantic-suggestion
=============================

TYPO3 extension for suggesting semantically related pages using advanced NLP and TF-IDF analysis

4.1.4(3w ago)112.6k5[1 issues](https://github.com/friteuseb/semantic_suggestion/issues)GPL-2.0-or-laterPHPPHP ^8.1

Since Jul 30Pushed 3w ago5 watchersCompare

[ Source](https://github.com/friteuseb/semantic_suggestion)[ Packagist](https://packagist.org/packages/talan-hdf/semantic-suggestion)[ RSS](/packages/talan-hdf-semantic-suggestion/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (10)Dependencies (6)Versions (55)Used By (0)

TYPO3 Extension: Semantic Suggestion
====================================

[](#typo3-extension-semantic-suggestion)

[![TYPO3 12](https://camo.githubusercontent.com/08afacc49187e63c796f7d1c4401d0f0563bab574d9c525312b2827acb09a7c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31322d6f72616e67652e737667)](https://get.typo3.org/version/12)[![TYPO3 13](https://camo.githubusercontent.com/2cf6570821614808899422f68a66a381a2de1dd0746ba9cdba6155def1f4f396/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31332d6f72616e67652e737667)](https://get.typo3.org/version/13)[![TYPO3 14](https://camo.githubusercontent.com/382ff45949671f1b9c4431781f1961eb04a15376fe22523e03a9893c6d4ec278/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31342d6f72616e67652e737667)](https://get.typo3.org/version/14)[![Latest Stable Version](https://camo.githubusercontent.com/fab1044462f78310d9707b1d97a6d9455a2db1e5fcff7abcd469a3e367507db9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f74616c616e2d6864662f73656d616e7469632d73756767657374696f6e2e737667)](https://packagist.org/packages/talan-hdf/semantic-suggestion)[![License](https://camo.githubusercontent.com/d5d771a72866da8488b61e15da1a007d218b236012bed3ef32607fb82a1a4ae9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f74616c616e2d6864662f73656d616e7469632d73756767657374696f6e2e737667)](https://packagist.org/packages/talan-hdf/semantic-suggestion)

Suggests related pages on a TYPO3 site by comparing the text of the pages themselves, instead of relying on categories or manual links.

A scheduler task walks a page tree, builds a TF-IDF vector per page (via [nlp\_tools](https://github.com/cywolf/nlp_tools)), compares them pairwise and stores the resulting scores in `tx_semanticsuggestion_similarities`. The frontend plugin only reads that table, so displaying suggestions costs one indexed query.

📖 **Full manual: [Documentation/](Documentation/Index.rst)** — configuration reference, multi-site setup, upgrade notes and troubleshooting.

Requirements
------------

[](#requirements)

TYPO312.4 → 14.xPHP8.1+Required extension`cywolf/nlp-tools` ^2.0 (`nlp_tools`)`nlp_tools` is **not optional**: without it no vector can be built and no similarity is ever stored. It is a declared dependency in both `composer.json` and `ext_emconf.php`, so Composer and the Extension Manager pull it in for you.

Installation
------------

[](#installation)

```
composer require talan-hdf/semantic-suggestion
vendor/bin/typo3 extension:setup --extension=semantic_suggestion
vendor/bin/typo3 cache:flush
```

Installing from the TER instead? Install `nlp_tools` first; the Extension Manager will refuse to activate the extension without it.

**Upgrading from 3.x or 4.0.0?** Run the migration wizards, otherwise suggestions disappear for any task that started on a subtree:

```
vendor/bin/typo3 upgrade:run semanticSuggestionMigrateRootPageId
vendor/bin/typo3 upgrade:run semanticSuggestionLabelAnalysisRows
```

See [Upgrade](Documentation/Upgrade/Index.rst) for what these do and how to verify them.

Quick start
-----------

[](#quick-start)

1. **Create the scheduler task** — *Scheduler → Add task → "Semantic Suggestion: Generate Similarities"*:

    FieldValueStart page IDthe site root (or any subtree to restrict the scope)Quality level`0.3` — pairs scoring below this are not storedExclude pagesoptional list of UIDs, e.g. `42,56`Language`-1` (all languages of the site, in one run)Run it once manually. It logs to the TYPO3 log and to `typo3temp/logs/semantic_suggestion.log`.
2. **Display the suggestions** — either add the *Semantic Suggestions* content element to a page, or call the plugin from your Fluid page template:

    ```

    ```

    Bootstrap Package users can instead enable the shipped page templates, **in that site's constants only**:

    ```
    plugin.tx_semanticsuggestion_suggestions.settings.overrideBootstrapTemplates = 1

    ```
3. **Check the result** in *Web → Semantic Suggestion*, which shows the stored pairs, the score distribution and the pages with the most links.

Configuration in one table
--------------------------

[](#configuration-in-one-table)

Everything under `plugin.tx_semanticsuggestion_suggestions.settings` (Constant Editor category *semantic\_suggestion*):

SettingDefaultEffect`qualityLevel``0.3`Display filter: stored pairs scoring below it are not shown`maxSuggestions``3`Number of suggestions rendered`excludePages`*(empty)*UIDs never shown **as** a suggestion`excerptLength``100`Characters of the excerpt`excerptSources``bodytext,description,abstract`First non-empty field wins`recencyWeight``0.2`Share of the score taken from the recency comparison`analyzedFields.*``title 1.5`, `keywords 2.0`, `abstract 1.2`, `description 1.0`, `content 1.0`Field weights, applied by repeating the text `round(weight)` times`enableStemming``1`Stem before vectorizing`debugMode``0`Verbose log **and** debug output in the rendered HTML`overrideBootstrapTemplates``0`Opt-in Bootstrap Package page templates`show*``1`Section toggles of the backend moduleTwo things are worth knowing before tuning:

- **Weights are coarse.** They are applied by repeating a field's text `max(1, round(weight))` times, so `1.0`, `1.2` and `1.3` are identical, and `0` does **not** disable a field.
- **Storage and display are separate thresholds.** The task's quality level decides what is written to the database; the TypoScript `qualityLevel` filters what is displayed among those rows. Setting the display value *below* the task's simply shows everything stored.

Details, and the settings that are accepted but currently ignored, are listed in [Configuration](Documentation/Configuration/Index.rst).

Multi-site
----------

[](#multi-site)

One task per site, `startPageId` on each site root. Suggestions can never cross a site boundary: the frontend lookup filters on the stored `root_page_id`. Non-admin editors only see the analyses of sites they have a webmount on. See [Multi-site and multilingual](Documentation/MultiSite/Index.rst).

Troubleshooting
---------------

[](#troubleshooting)

```
# is the NLP stack working?
vendor/bin/typo3 semantic:diagnostic

# what was stored?
SELECT root_page_id, scope_page_id, sys_language_uid, COUNT(*), MAX(similarity_score)
FROM tx_semanticsuggestion_similarities GROUP BY 1, 2, 3;
```

Common causes of "no suggestions at all" and how to tell them apart: [Troubleshooting](Documentation/Troubleshooting/Index.rst).

Development
-----------

[](#development)

```
composer require --dev phpunit/phpunit typo3/testing-framework
vendor/bin/phpunit --configuration phpunit.xml.dist --testsuite unit
```

The extension ships `phpunit.xml.dist` but declares no `require-dev`, so PHPUnit has to be installed in the host project first.

License, support
----------------

[](#license-support)

GPL-2.0-or-later — see [LICENSE](LICENSE). Changelog: [CHANGELOG.md](CHANGELOG.md).

- Author: Wolfangel Cyril —
- Issues: [https://github.com/friteuseb/semantic\_suggestion/issues](https://github.com/friteuseb/semantic_suggestion/issues)

###  Health Score

53

—

FairBetter than 96% of packages

Maintenance93

Actively maintained with recent releases

Popularity28

Limited adoption so far

Community17

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 56% 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

Every ~20 days

Recently: every ~0 days

Total

37

Last Release

23d ago

Major Versions

1.5.2.x-dev → 2.0.02025-03-27

2.3.0 → 3.1.02025-09-18

1.1.0-beta → 3.2.02025-10-08

3.3.0 → 4.0.02025-12-24

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1471455?v=4)[Cyril Wolfangel](/maintainers/friteuseb)[@friteuseb](https://github.com/friteuseb)

---

Top Contributors

[![friteuseb](https://avatars.githubusercontent.com/u/1471455?v=4)](https://github.com/friteuseb "friteuseb (153 commits)")[![cyril-wolfangelTalanCOP](https://avatars.githubusercontent.com/u/220198517?v=4)](https://github.com/cyril-wolfangelTalanCOP "cyril-wolfangelTalanCOP (108 commits)")[![Gloumi](https://avatars.githubusercontent.com/u/6616874?v=4)](https://github.com/Gloumi "Gloumi (6 commits)")[![VincentFoulon80](https://avatars.githubusercontent.com/u/26797476?v=4)](https://github.com/VincentFoulon80 "VincentFoulon80 (5 commits)")[![colinatkins](https://avatars.githubusercontent.com/u/3305205?v=4)](https://github.com/colinatkins "colinatkins (1 commits)")

### Embed Badge

![Health badge](/badges/talan-hdf-semantic-suggestion/health.svg)

```
[![Health](https://phpackages.com/badges/talan-hdf-semantic-suggestion/health.svg)](https://phpackages.com/packages/talan-hdf-semantic-suggestion)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103574.3k70](/packages/friendsoftypo3-content-blocks)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

40543.5k](/packages/wazum-sluggi)[typo3/cms-redirects

TYPO3 CMS Redirects - Create manual redirects, list existing redirects and automatically createredirects on slug changes.

167.6M84](/packages/typo3-cms-redirects)[typo3/cms-form

TYPO3 CMS Form - Flexible TYPO3 frontend form framework that comes with a backend editor interface.

147.8M288](/packages/typo3-cms-form)[typo3/cms-sys-note

TYPO3 CMS System Notes - Records with messages which can be placed on any page and contain instructions or other information related to a page or section.

116.5M41](/packages/typo3-cms-sys-note)[typo3/cms-impexp

TYPO3 CMS Import/Export - Tool for importing and exporting records using XML or the custom T3D format.

107.0M93](/packages/typo3-cms-impexp)

PHPackages © 2026

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