Skip to main content

Simple utilities to read/write brat standoff files (peek module)

Project description

brat Peek 👀

Peek into corpora annotated using brat rapid annotation tool (brat).

brat Peek 👀 is a Python framework for working with annotations in brat's standoff format (.ann files).

Main features

  • Load .ann files using an object-oriented framework that allows easy access and manipulation to complete corpora as well as to individual documents and annotations.
  • Load .txt files to see annotations in context, check annotation spans and extract individual sentences.
  • Print different annotation statistics and output corpus contents in multiple formats.
  • Calculate evaluation metrics such as inter-annotator agreement and F-1 score between document collections.

How to use brat peek 👀

A full documentation and example notebooks are in the works. Meanwhile, take a look at some examples of how to use brat peek 👀:

  • Framework for working with .ann files and collections.

      import peek
      corpus = peek.AnnCorpus('dummy_data/')
      # Access a random document...
      doc = corpus.get_random_doc()
      # ...or get one by its name
      doc = corpus.get_doc_by_name('PMID-1590827')
      # Or maybe just get those you're interested in
      docs = [doc for doc in corpus.docs if 'Organism' in doc.count['entities']]
      # Print document name and path
      print(doc.name, doc.path)
      # See the individual annotations in a document
      print(doc.anns.items())
    
  • See the annotations in a corpus at a glance with stats and graphs.

      print('Corpus stats:', corpus.count)
      print('Entity labels found in corpus: ', corpus.text_labels)
      print('Document 42 annotations:', corpus.docs[41].anns)
      # Create a plot
      peek.stats.plot_tags(corpus)
      # Generate .tsv with statistics
      peek.stats.generate_corpus_stats_tsv(corpus, include_txt=True)
    
  • Check out the most common annotated text spans.

      print(corpus.text_freq)
      print(corpus.text_freq['Organism'].most_common(5))
      print(corpus.text_freq_lower)
    
  • Print a corpus's content to a .tsv file.

      # Create .tsv file from corpus (to_ignore is an optional argument)
      peek.rwsl.print_tsv_from_corpus(corpus, 'output_folder/', to_ignore=['Organism'])
      # Create .tsv with text frequencies
      peek.rwsl.print_tsv_from_text_freq(corpus, 'output_folder/', to_ignore=['Organism'], lower=False)
      # Create .tsv with codes column for normalization with a code reference file.
      peek.rwsl.print_tsv_for_norm(corpus, 'output_folder/', 'reference.tsv', to_ignore=['Organism'])
    
  • Calculate metrics for different corpora.

      # Calculate IAA and print .tsv file with disagreements [code based on https://github.com/TeMU-BSC/iaa-computation]
      peek.metrics.show_iaa([corpus1, corpus2], ['filename', 'label', 'offset'], ['Organism'], tsv=True)
      # You can use specific labels, as shown above, or use the text_labels attribute to use all the labels in the corpus at once.
      peek.metrics.show_iaa([corpus1, corpus2], ['filename', 'label', 'offset'], corpus1.text_labels)
      # Calculate precision, recall and F-score between a Gold Standard and a set of predictions [code based on https://github.com/TeMU-BSC/meddoprof-evaluation-library/]
      peek.metrics.show_fscore(gs, pred, gs.text_labels)
    
  • Extract sentences from documents to create customizable annotation files.

      # Set txt to True when creating an AnnCorpus object to also read .txt files
      corpus = peek.AnnCorpus('dummy_data/', txt=True)
      # Separate document into individual sentences, adjusting annotation spans in the way.
      sentences = [peek.txt.doc2sent(doc) for doc in corpus.docs]
      # Create a new document only with sentences that have organisms annotated.
      new_doc = peek.txt.sent2doc([sent for sent in sentences if any(ann.tag == 'Organism' for ann in frase_med.anns['entities'])])
    
  • Save corpora as pickle objects to load them later (useful for big corpora).

      # Save
      peek.rwsl.save_corpus(corpus, 'temp/')
      # Load
      corpus = peek.rwsl.load_corpus('temp/dummy_data.pckl')
    
  • Suggest annotations to speed up your annotation process (on the works - mostly untested)

      peek.txt.generate_suggestions_from_tsv(temp, tsv)
    
  • Convert brat files into spaCy objects

      corpus = peek.AnnCorpus('dummy_data/', txt=True)
      nlp = spacy.load(...)
      spacy_docs = peek.rwsl.brat2spacy(corpus, nlp)
    

Contact

brat peek is a personal project, which means that currently new features are added as I personally need them. If you have any questions or suggestions, you can contact me at the following address:

  • Salvador Lima: <salvador.limalopez gmail com>

For more information on brat, please visit its GitHub repository or homepage.

Project details


Download files

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

Source Distribution

brat_peek-0.1.1.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

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

brat_peek-0.1.1-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

Details for the file brat_peek-0.1.1.tar.gz.

File metadata

  • Download URL: brat_peek-0.1.1.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.6

File hashes

Hashes for brat_peek-0.1.1.tar.gz
Algorithm Hash digest
SHA256 8180c57ec8566eee5c3a690e0d7711f81933d7d1e22d0bf82bd2f1b969e4ecc0
MD5 55e4417947983606a7b6c18dc2e3e538
BLAKE2b-256 06492c95335e3c499757e6a9d4381bc010578d491d5ef5a1fcc172089e8cd28b

See more details on using hashes here.

File details

Details for the file brat_peek-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: brat_peek-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 24.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.6

File hashes

Hashes for brat_peek-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cb6f48109b9d99fba3f4f10609f37d3f4e29b88fba2085f951468c49a5874a84
MD5 16c7d38a413f485b5a960f08362a768d
BLAKE2b-256 a222b37045a21e7c53f745b734f53e4106bae930a7dca44c70f98bd6a9e52627

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page