Skip to content

v0.2.1

Choose a tag to compare

@aaronstevenwhite aaronstevenwhite released this 28 Oct 16:00
25044e1

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 glazing

Important: You must reconvert FrameNet data to benefit from this fix:

glazing init --force

Requirements remain unchanged:

  • Python 3.13 or higher

🔧 Technical Changes

Converter Improvements

  • Added _parse_lu_from_index() method to parse lexical units from luIndex.xml
  • Added convert_lu_index_file() method to convert entire LU index
  • Modified convert_frames_directory() to load LUs and associate with frames by frame_id
  • Improved CLI output to show "Converting FrameNet frames and lexical units..."

Validation Updates

  • Relaxed LU_NAME_PATTERN from strict format to permissive ^.+\.[a-z]+$
  • Relaxed LEXEME_NAME_PATTERN from 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


Full Changelog: v0.2.0...v0.2.1