flexicon: a user-centric Python library for FieldWorks Language Explorer (FLEx) projects via the SIL Language and Culture Model (LCM) API
Project description
flexicon is a library for accessing FieldWorks Language Explorer (FLEx) [1] projects.
flexicon handles the necessary initialisation of the FLEx engine, and provides a class (FLExProject) for opening a FLEx project and working with its contents.
For the GUI application that runs Python scripts/plugins on FLEx databases see FLExTools [2].
Requirements
Python 3.8 - 3.13.
Python for .NET [3] version 3.0.3+.
FieldWorks Language Explorer 9.0.17 - 9.3.1.
32-bit vs 64-bit
The Python architecture must match that of FieldWorks. I.e. Install 32-bit Python for 32-bit Fieldworks, and 64-bit Python for 64-bit Fieldworks.
Installation
Run: pip install pyflexicon
Usage
Basic usage:
import flexicon
flexicon.FLExInitialize()
p = flexicon.FLExProject()
p.OpenProject('parser-experiments')
p.GetPartsOfSpeech()
# ['Adverb', 'Noun', 'Pro-form', 'Pronoun', 'Verb', 'Copulative verb', 'Ditransitive verb', 'Intransitive verb', 'Transitive verb', 'Coordinating connective']
# The API documentation is an HTML file
os.startfile(flexicon.APIHelpFile)
...
p.CloseProject()
flexicon.FLExCleanup()
Version 2.0+ Operations Classes
Version 2.0 introduces comprehensive Operations classes providing CRUD (Create, Read, Update, Delete) methods for all major FLEx data types. These are organized into topic areas matching FLEx’s structure:
Grammar: Parts of Speech, Phonemes, Grammatical Categories, Morphology
Lexicon: Entries, Senses, Examples, Pronunciations, Variants, Etymology
Texts & Words: Texts, Wordforms, Analyses, Paragraphs, Segments
Notebook: Notes, People, Locations, Anthropology data
Lists: Publications, Agents, Overlays, Possibility Lists
System: Writing Systems, Custom Fields, Project Settings
Example usage:
import flexicon
flexicon.FLExInitialize()
project = flexicon.FLExProject()
project.OpenProject('MyProject', writeEnabled=True)
# Create a new lexical entry
entry = project.LexEntry.Create("run", "stem")
# Add a sense with gloss
sense = project.LexEntry.AddSense(entry, "to move rapidly on foot")
project.Senses.SetGloss(sense, "run", "en")
# Set part of speech
verb = project.POS.Find("Verb")
project.Senses.SetPOS(sense, verb)
# Add an example sentence
example = project.Examples.Create(sense,
"The dog runs in the park.", "en")
project.CloseProject()
flexicon.FLExCleanup()
All v1.x API methods remain available for backward compatibility.
What’s New in v2.2
Version 2.2 introduces Wrapper Classes and Smart Collections that simplify working with polymorphic types in FieldWorks. These eliminate the need for manual type checking and casting.
Key Features:
Automatic Type Casting: No more checking ClassName or casting to concrete types
Smart Collections: Type-aware display showing diversity of data
Convenience Filters: Easy filtering without manual type checks
Capability-Based API: Check what’s available instead of checking type
Zero Breaking Changes: All existing code continues to work
Example - Phonological Rules (v2.2):
from flexicon import FLExProject
from flexicon.wrappers import PhonologicalRule
project = FLExProject()
project.OpenProject('MyProject')
# Get all rules - returns smart collection with wrapped objects
rules = project.PhonologicalRuleOperations().GetAll()
# Type-aware display
print(rules) # Shows: PhRegularRule: 7, PhMetathesisRule: 3, etc.
# Convenience filters
regular_rules = rules.regular_rules
metathesis_rules = rules.metathesis_rules
# Transparent property access across types
for rule in rules:
if rule.has_output_specs:
print(f"Outputs: {rule.output_segments}")
if rule.has_metathesis_parts:
print(f"Metathesis: {rule.left_part}, {rule.right_part}")
Currently Supported Domains:
Grammar: Phonological Rules, Phonological Contexts
Lexicon: Morphosyntactic Analyses (MSAs)
More domains coming in v2.3+
Migration Guide: See MIGRATION.md for detailed examples comparing old and new API.
Contract Testing
A pre-commit hook verifies that LibLCM API dependencies stay consistent as you develop. On machines with FieldWorks installed, the full suite checks every type and member flexicon depends on and detects regressions across LibLCM upgrades.
Setup: python hooks/install.py
See Contract Testing Guide for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyflexicon-4.1.0.tar.gz.
File metadata
- Download URL: pyflexicon-4.1.0.tar.gz
- Upload date:
- Size: 758.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f97c843faf4352b36ba05125fdb4459758d7ccd7e72d583b1b0aa207c02f19d
|
|
| MD5 |
76040db125581052ae618e6c8c12272b
|
|
| BLAKE2b-256 |
e0bfcfca53834bb0c4b593735f3f4e2e7963c4f4d4a692b62ca84699398122ee
|
Provenance
The following attestation bundles were made for pyflexicon-4.1.0.tar.gz:
Publisher:
publish.yml on MattGyverLee/flexicon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyflexicon-4.1.0.tar.gz -
Subject digest:
2f97c843faf4352b36ba05125fdb4459758d7ccd7e72d583b1b0aa207c02f19d - Sigstore transparency entry: 2066096750
- Sigstore integration time:
-
Permalink:
MattGyverLee/flexicon@9b82ffaf940a74857b1cf41b6ce2cea02af3322d -
Branch / Tag:
refs/tags/v4.1.0 - Owner: https://github.com/MattGyverLee
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9b82ffaf940a74857b1cf41b6ce2cea02af3322d -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyflexicon-4.1.0-py3-none-any.whl.
File metadata
- Download URL: pyflexicon-4.1.0-py3-none-any.whl
- Upload date:
- Size: 780.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1efeb818ad8ed6aac419e00044f3c576c62ae2f2a70f64fdb2e563f6c9d42ae1
|
|
| MD5 |
bd14a3d7ed2fab69ba8a641cb8f19c37
|
|
| BLAKE2b-256 |
8bdabe73254eac157553debf0f5b1746355c6bf20e6655221bcf47f2ca02aec1
|
Provenance
The following attestation bundles were made for pyflexicon-4.1.0-py3-none-any.whl:
Publisher:
publish.yml on MattGyverLee/flexicon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyflexicon-4.1.0-py3-none-any.whl -
Subject digest:
1efeb818ad8ed6aac419e00044f3c576c62ae2f2a70f64fdb2e563f6c9d42ae1 - Sigstore transparency entry: 2066096803
- Sigstore integration time:
-
Permalink:
MattGyverLee/flexicon@9b82ffaf940a74857b1cf41b6ce2cea02af3322d -
Branch / Tag:
refs/tags/v4.1.0 - Owner: https://github.com/MattGyverLee
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9b82ffaf940a74857b1cf41b6ce2cea02af3322d -
Trigger Event:
push
-
Statement type: