Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

simple_NER

Lightweight named-entity recognition library with pluggable annotators, multi-language support, and an async pipeline.

PyPI - Version PyPI - Python Version GitHub Actions Workflow Status

Installation

pip install simple_NER
pip install "simple_NER[dev]"   # + testing tools

Quick Start

from simple_NER import create_pipeline

pipe = create_pipeline(["email", "phone", "url", "temporal", "currency"])
for entity in pipe.process("Call +1-800-555-0100 or email info@example.com by 2025-06-01"):
    print(entity.entity_type, entity.value, entity.confidence)
# phone    +1-800-555-0100   0.9
# email    info@example.com  1.0
# date     2025-06-01        0.85

Annotators

Factory key(s) Class Detects Language
email, email_regex EmailAnnotator / EmailNER Email addresses Any
names NamesNER Person names (noun heuristic, confidence 0.65-0.8) English / Latin
locations, countries, cities LocationNER Countries, capitals, cities All (wordlist)
temporal, datetime, duration TemporalNER Dates, times, durations lang param
numbers, written_numbers NumberNER Numeric and written numbers lang param
Factory key(s) Class Detects Language
lookup, wordlist LookUpNER Custom wordlists lang param
url, urls URLAnnotator HTTP/HTTPS URLs Any
phone, phone_number PhoneAnnotator Phone numbers Any
currency, money CurrencyAnnotator Amounts + currency symbol/code Any
organization, org, company OrganizationAnnotator Org/company names lang param
Factory key(s) Class Detects Language
hashtag, hashtags, tag HashtagAnnotator #hashtags Any
date, dates DateAnnotator Structured date strings lang param

Key annotator parameters

LocationNER: include_countries=True, include_capitals=True, include_cities=False, label_confidence={"City": 0.7, "Country": 0.95}

PhoneAnnotator: require_country_code=False, min_length=7

OrganizationAnnotator: strict_mode=False (when True, requires corporate suffix like Inc./GmbH)

TemporalNER / NumberNER / DateAnnotator / LookUpNER: lang="en-us", optionally anchor_date for TemporalNER

Entity Data Fields

Each Entity carries a data dict with annotator-specific fields:

Annotator Extra fields in data
EmailAnnotator local_part, domain, start, end
URLAnnotator protocol, start, end
PhoneAnnotator digits, digit_count, type (international/us_national/local/other), has_country_code, start, end
CurrencyAnnotator amount (float), currency (ISO code), currency_symbol, start, end
LocationNER country_code, label, start, end
Annotator Extra fields in data
HashtagAnnotator tag_type (shouting/lowercase/CamelCase/underscored/alphanumeric/mixed), start, end
OrganizationAnnotator org_type (company/educational/medical/other), start, end
NumberNER number (str, digit form), start, end
DateAnnotator year, month, day, format, start, end

Pipeline Dedup Strategies

NERPipeline and AsyncNERPipeline accept a dedup_strategy argument:

Strategy Behaviour
keep_all Return every entity span, including overlaps
keep_longest When spans overlap, keep the longer one
keep_higher_confidence When spans overlap, keep the higher-confidence one
keep_first When spans overlap, keep the first one encountered
pipe = create_pipeline(["currency", "numbers"], dedup_strategy="keep_longest")

Locale / i18n System

Annotators load language-specific patterns from simple_NER/locale/<lang>/:

Extension Content Loader
.rx One raw regex per line load_rx(name, lang)
.intent NL templates {var} → named capture load_intents(name, lang)
.txt Plain wordlist, one entry per line load_wordlist(name, lang)

All loaders fall back to en-us when no language-specific file exists. intent_to_regex("{amount} dollars") converts an intent template to a compiled re.Pattern.

Adding a new language: create simple_NER/locale/<lang>/ and place .rx, .intent, or .txt files that override the en-us defaults. Only the files you add are used. Everything else falls back automatically. Inside a BaseAnnotator subclass, self._load_rx("name") and self._load_intents("name") resolve to self.lang automatically.

Existing locale data: en-us (phone, email, url, hashtag, currency, organization, date_months), de-de (currency, organization, date_months), es/fr/it/nl/pt (date_months).

Async Batch Processing

import asyncio
from simple_NER.annotators.async_pipeline import AsyncNERPipeline

pipe = AsyncNERPipeline(dedup_strategy="keep_longest")
pipe.add_annotator(...)

async def run():
    results = await pipe.process_batch_async(sentences, max_concurrency=10)

asyncio.run(run())

OVOS Plugin

simple_NER ships an intent-transformer plugin for the OpenVoiceOS / OVOS ecosystem. Entry-point group: opm.transformer.intent, key: simple-ner-transformer, priority 50, class: SimpleNERIntentTransformer.

{
  "intent_transformers": {
    "simple-ner-transformer": {
      "annotators": ["email", "phone", "temporal", "currency"],
      "confidence_threshold": 0.6,
      "lang": "en-us"
    }
  }
}

The transformer runs the configured pipeline on every utterance and injects recognized entities into match_data before intent handling proceeds.

Documentation

New to simple_NER? Start here:

Need details?

Learn by example:

  • examples/README.md: 15+ runnable scripts (quick start, all annotators, async, custom types, OVOS plugin, etc.)

Project info:

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simple_ner-0.9.1a3.tar.gz (2.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

simple_ner-0.9.1a3-py3-none-any.whl (2.2 MB view details)

Uploaded Python 3

File details

Details for the file simple_ner-0.9.1a3.tar.gz.

File metadata

  • Download URL: simple_ner-0.9.1a3.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for simple_ner-0.9.1a3.tar.gz
Algorithm Hash digest
SHA256 584bb65c62f5d1c257e37e43bec523ea25c34a23ad05d095bb8b84ee7db67351
MD5 2f22ce4721377d427b795e7256279362
BLAKE2b-256 4b5c7c83942d1dc3cff92f8936ebfa144e1f9affc8d31c5e30aa9dae9742dff7

See more details on using hashes here.

File details

Details for the file simple_ner-0.9.1a3-py3-none-any.whl.

File metadata

  • Download URL: simple_ner-0.9.1a3-py3-none-any.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for simple_ner-0.9.1a3-py3-none-any.whl
Algorithm Hash digest
SHA256 02c0a3c8ba0c3b22ad468661451aab65d2f2034a5b2b1a697667f4929c883316
MD5 328795abdf0dfb56f744af97fbdc0a8a
BLAKE2b-256 cfd45d0ff08a9ac3eeea93cbcbc0d0ad72b9716678c3c765ad7382a961f30c27

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.9.1a3 This release

2 files

0.8.1

1 file

0.8.0

1 file

0.7.0

1 file

0.6.1

1 file

0.6.0

1 file

0.5.0

1 file

0.4.4

1 file

0.4.3

1 file

0.4.1

1 file

0.4.0

1 file

0.3.1

1 file

0.3.0

1 file

0.2

1 file

0.1.11

1 file

0.1.10

1 file

0.1.9.2

1 file

0.1.9.1

1 file

0.1.9

1 file

0.1.8.3

1 file

0.1.8.2

1 file

0.1.8.1

1 file

0.1.8

1 file

0.1.7

1 file

0.1.5

1 file

0.1.3

1 file

0.1.1

1 file

0.1

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page