v0.2.1
This patch release fixes a critical data completeness issue where FrameNet lexical units were not being loaded during dataset conversion.
Fixes: #4
🐛 What's Fixed
FrameNet Lexical Units Now Properly Loaded
Lexical units are now correctly parsed from luIndex.xml and associated with their frames during conversion. This fixes a critical issue where all frames had empty lexical_units fields despite the raw FrameNet data containing 13,575 lexical units.
Before v0.2.1:
>>> from glazing.framenet.loader import FrameNetLoader
>>> loader = FrameNetLoader()
>>> index = loader.build_frame_index(loader.frames)
>>> frame = index.get_frame_by_name("Abandonment")
>>> len(frame.lexical_units)
0 # All frames had empty lexical units!After v0.2.1:
>>> from glazing.framenet.loader import FrameNetLoader
>>> loader = FrameNetLoader()
>>> index = loader.build_frame_index(loader.frames)
>>> frame = index.get_frame_by_name("Abandonment")
>>> len(frame.lexical_units)
5 # Lexical units now properly loaded
>>> frame.lexical_units[0].name
'abandon.v'
>>> frame.lexical_units[0].pos
'V'Real-World Data Support
Validation patterns have been updated to handle all actual FrameNet data, including:
- Proper nouns (e.g., "April.n", "Monday.n")
- Multi-word expressions (e.g., "a bit.n", "give up.v")
- Special characters (e.g., "(can't) help.v", "American [N and S Am].n")
- Complex lexeme names (e.g., "Boxing Day", "Scud-B missile")
Conversion Success Rate:
- Before: ~12,400 out of 13,575 LUs successfully parsed (91.3%)
- After: 13,572 out of 13,575 LUs successfully parsed (99.98%)
📦 Updating
To get the latest version:
pip install --upgrade glazingImportant: You must reconvert FrameNet data to benefit from this fix:
glazing init --forceRequirements remain unchanged:
- Python 3.13 or higher
🔧 Technical Changes
Converter Improvements
- Added
_parse_lu_from_index()method to parse lexical units fromluIndex.xml - Added
convert_lu_index_file()method to convert entire LU index - Modified
convert_frames_directory()to load LUs and associate with frames byframe_id - Improved CLI output to show "Converting FrameNet frames and lexical units..."
Validation Updates
- Relaxed
LU_NAME_PATTERNfrom strict format to permissive^.+\.[a-z]+$ - Relaxed
LEXEME_NAME_PATTERNfrom strict format to permissive^.+$ - Updated tests to match new validation behavior
Data Completeness
- Approximately 13,500 lexical units now correctly associated with their frames
- Enables querying frames by lexical unit name via the frame index
- Full metadata preserved: POS tags, annotation status, sentence counts, lexeme structures
🔧 Compatibility
- Fully backwards compatible with v0.2.0
- No API changes
- Existing code continues to work, but will now have access to lexical unit data
- Dataset reconversion required to populate lexical units
📜 Citation
If you use this version of Glazing in your research, please cite:
@software{glazing2025,
author = {White, Aaron Steven},
title = {Glazing: Unified Data Models and Interfaces for Syntactic and Semantic Frame Ontologies},
year = {2025},
url = {https://github.com/aaronstevenwhite/glazing},
version = {0.2.1},
doi = {10.5281/zenodo.17185626}
}🙏 Acknowledgments
This project is funded by the National Science Foundation (BCS-2040831).
📮 Contact
- Author: Aaron Steven White (aaron.white@rochester.edu)
- Repository: https://github.com/aaronstevenwhite/glazing
- Documentation: https://glazing.readthedocs.io
- PyPI: https://pypi.org/project/glazing/
Full Changelog: v0.2.0...v0.2.1