Softanza
DémarrerEnglish
Softanza
Langage et intelligence

Traitement du langage et linguistique

Une chaîne classique, déterministe et entièrement embarquée ; plus simple que NLTK, un cran sous les modèles neuronaux de spaCy.

3 Strong · 5 Solid · 3 Partial · 1 Emerging

Mesuré contre : spaCy · NLTK · Stanza · Dossiers : base/linguistic(s'ouvre dans un nouvel onglet) · base/natural(s'ouvre dans un nouvel onglet) · base/learning(s'ouvre dans un nouvel onglet) · Pour les programmeurs : la référence de ce domaine

les mots d'un paragraphe, à la taille de leur fréquence
les mots d'un paragraphe, à la taille de leur fréquence. dessiné le 2026-10-01 par le script du site tools/areas-figurative.ring, exécuté dans la bibliothèque au commit 0e72e2e2c · la source(s'ouvre dans un nouvel onglet)

Repensé depuis les premiers principes

Ce que Softanza a gardé de ce qui marche, et ce qu'elle a repensé, tel que la bibliothèque l'a écrit dans ses documents de conception et ses narrations.

La manière SoftanzaUne chaîne est faite de caractères ; un texte est une chaîne élevée au sens, et toute capacité linguistique doit fonctionner en local, sans rien installer ni télécharger.

Gardé des meilleures pratiques

  • Des algorithmes de référence publiés, pas des recettes maison : racinisation Snowball en 25 langues, sentiment VADER, étiquetage grammatical par perceptron moyenné et résumés TextRank. source(s'ouvre dans un nouvel onglet)
  • Mots et phrases sont découpés selon les règles de segmentation Unicode (UAX #29), avec quelques écarts documentés, choisis pour obtenir de bons jetons linguistiques. source(s'ouvre dans un nouvel onglet)
  • L'apprentissage automatique classique et explicable — plus proches voisins, Bayes naïf, arbres de décision, règles d'association — sert de socle, en local, et justifie ses réponses. source(s'ouvre dans un nouvel onglet)

Repensé

  • Tout est embarqué : une ligne suffit, sans installation, sans téléchargement ni internet, au lieu de récupérer des paquets de données fonctionnalité par fonctionnalité. source(s'ouvre dans un nouvel onglet)
  • Les verdicts portent leur degré de certitude — certainement, probablement, apparemment — et Why() les explique, car la langue dit aussi avec quelle assurance on sait. source(s'ouvre dans un nouvel onglet)
  • Le même appel s'affine quand un modèle local est présent — les entités par règles deviennent des entités par transformeur — sans jamais exiger de service payant ou distant. source(s'ouvre dans un nouvel onglet)
  • Dans le code quasi naturel, c'est le programmeur qui analyse : les chaînes de méthodes suivent la grammaire anglaise (articles, accord, « which »), et la machine n'a jamais à deviner. source(s'ouvre dans un nouvel onglet)

A deterministic, fully-embedded classic NLP pipeline (UAX#29 tokenization, 25-language Snowball stemming, an averaged-perceptron POS tagger reimplemented in Zig, VADER sentiment, RAKE + TextRank + TF-IDF keywords, WordNet, phonetics) with zero downloads and a one-line first contact. Its stated target is to beat NLTK on simplicity, and against NLTK it largely does. But it sits a full tier below spaCy and Stanza: NER is gazetteer-rule not neural, there is no dependency parsing, and the neural upgrades are wired but no-op without a local model, gated on the still-unstarted ggml/GGUF foundry.

Ce qu'un artisan en fait, et ce qui se distingue

  • Zero downloads: every model and lexicon is @embedFile'd, one-line first contact
  • RAKE, TextRank and TF-IDF plus extractive summary in one engine
  • NLTK's own averaged-perceptron POS model reimplemented in Zig with no ML runtime
  • 25-language Snowball stemming at reference parity

Ce qui est dû

  • The ggml bridge + GGUF foundry that turns every neural delegator real
  • Statistical or neural NER above the gazetteer floor
  • Restore the full WordNet graph (hyponyms, meronyms, antonyms, glosses)
  • Dependency parsing, entirely absent

La manière Softanza, exécutée

Ce que Softanza fait autrement dans ce domaine, montré par du code tiré de ses narrations et de ses gardes, et exécuté pour cette page.

Sans rien télécharger, une phrase est étiquetée et ses groupes nominaux sont trouvés par un motif sur les classes de mots.

Softanza
o = new stzText("The quick brown fox jumps over the lazy dog")
aNP = o.NounPhrases()
? "  NounPhrases: " + @@(aNP)
chk("the classic NP grammar finds both phrases",
	len(aNP) = 2 and aNP[1] = "The quick brown fox" and aNP[2] = "the lazy dog")
chk("any tag grammar works (VBZ IN)", o.Chunks("VBZ IN")[1] = "jumps over")
Sortie
  NounPhrases: [ "The quick brown fox", "the lazy dog" ]
  [OK] the classic NP grammar finds both phrases
  [OK] any tag grammar works (VBZ IN)

exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/linguistic/chunker_narrated.ring(s'ouvre dans un nouvel onglet)

Un verdict s'énonce avec son degré de certitude : une preuve forte, bonne ou faible devient certainement, probablement ou apparemment.

Softanza
Then("strong evidence", StzEvidentialVerdict(1, 0.95), "certainly yes")
Then("good evidence", StzEvidentialVerdict(1, 0.7), "probably yes")
Then("weak evidence", StzEvidentialVerdict(1, 0.3), "apparently yes")
Then("strong evidence AGAINST", StzEvidentialVerdict(0, 0.9), "certainly not")
Sortie
  THEN  strong evidence  [PASS]
  THEN  good evidence  [PASS]
  THEN  weak evidence  [PASS]
  THEN  strong evidence AGAINST  [PASS]

exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/natural/evidentiality_narrated.ring(s'ouvre dans un nouvel onglet)

Un code qui se lit comme de l'anglais vérifie une affirmation, la refuse et explique pourquoi en mots.

Softanza
Then("'at most 2 vowels' refuses on 3", Q("AnnIE").AtMost(2).VowelNB(), FALSE)
Then("...and explains itself", Why(), "no: expected atmost 2, found 3")
Sortie
  THEN  'at most 2 vowels' refuses on 3  [PASS]
  THEN  ...and explains itself  [PASS]

exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/natural/nnl_narrated.ring(s'ouvre dans un nouvel onglet)

Les articles de ce domaine (10)

Les couloirs, un par un

Les couloirs et leurs notes sont cités tels qu'ils ont été lus à la source, le Read from the source on 2026-09-16.

Tokenization and sentence segmentation
Strong
word_break.zig implements the full UAX#29 state machine; WordIter / SentenceIter are the shared seam every lane routes through; CJK and Thai break per-codepointengine/src/string/word_break.zig
Stemming
Strong
Vendored Snowball (stem.zig) across 25 languages, engine-backed, with per-language and auto-detect entry points; at reference parity because it is Snowballstem.zig
Keyword and keyphrase extraction
Strong
RAKE (textutil.zig), TextRank keywords + extractive summary (textrank.zig), TF-IDF (textstats.zig, corpus IDF via stzCorpus), all engine-backedtextutil.zig / textrank.zig / textstats.zig
POS tagging
Solid
pos.zig averaged perceptron, a faithful reimplementation of NLTK's tagger (Penn Treebank), ~75k weights @embedFile'd; English only, below neural taggerspos.zig
Sentiment (VADER)
Solid
sentiment.zig faithful VADER: 7,500-term lexicon plus five rule heuristics with an explainable breakdown; English only, rule-basedsentiment.zig; build-time tally over 1,000 reviews
Lemmatization
Solid
lemma.zig dictionary lookup for en / fr / ar (fr table 4.5 MB) plus English suffix rules; POS-blind, ambiguous forms resolve by an alphabetical tie-breaklemma.zig
Statistical text (collocations, readability, lang-detect)
Solid
PMI collocations, n-grams + frequency, cosine similarity, Flesch readability, stopwords, lexical diversity, language detection; mostly English-tunedtextstats.zig / textutil.zig
Phonetics
Solid
phonetics.zig: Soundex (4-char) and Metaphone (6-char), pure algorithm with no data file; no Double Metaphone, NYSIIS or Caverphonephonetics.zig
Named-entity recognition
Partial
ner.zig deterministic gazetteer + POS-chunk + rules into PERSON / ORGANIZATION / LOCATION / ENTITY; four types, English gazetteers, no learned disambiguationner.zig
WordNet
Partial
wordnet.zig over a compacted Princeton WordNet 3.1 (8.6 MB, ~140k words): synonyms and hypernyms only; hyponyms, meronyms, antonyms and glosses droppedwordnet.zig
Parsing (chunk and constituency)
Partial
Haro-side Chunks, NounPhrases and a cascaded constituency parse tree (stzParseTree, Penn bracket notation); no dependency parsing at allstzParseTree
Neural NLP and embeddings
Emerging
stzText exposes Embedding(), SemanticSimilarityWith(), Classify(labels), SummarizedAbstractively() gated on HasSemanticModel(); no-op without a GGUF modelstzText HasSemanticModel()