Source code for uccaapp.convert_and_evaluate
import sys
import argparse
from glob import glob
from requests.exceptions import HTTPError
from ucca.evaluation import evaluate, Scores
from ucca.ioutil import read_files_and_dirs
from uccaapp.download_task import TaskDownloader
from uccaapp.upload_task import TaskUploader
try:
from simplejson.scanner import JSONDecodeError
except ImportError:
from json.decoder import JSONDecodeError
desc = """Convert a passage file to JSON format and upload to UCCA-App as a completed task,
then download task from UCCA-App and convert to a passage in standard format again,
then evaluate the result against the original"""
[docs]def main(filenames, write, **kwargs):
uploader = TaskUploader(**kwargs)
downloader = TaskDownloader(**kwargs)
scores = []
try:
for pattern in filenames:
filenames = sorted(glob(pattern))
if not filenames:
raise IOError("Not found: " + pattern)
for ref in read_files_and_dirs(filenames):
print("Converting passage " + ref.ID + "... ", end="")
task = uploader.upload_task(ref)
guessed, *_ = downloader.download_task(task["id"], write=write, **kwargs)
score = evaluate(guessed, ref, **kwargs)
print("F1=%.3f" % score.average_f1())
scores.append(score)
except HTTPError as e:
try:
raise ValueError(e.response.json()) from e
except JSONDecodeError:
raise ValueError(e.response.text) from e
print()
if len(scores) > 1:
print("Aggregated scores:")
Scores.aggregate(scores).print()
if __name__ == "__main__":
argument_parser = argparse.ArgumentParser(description=desc)
TaskUploader.add_arguments(argument_parser)
argument_parser.add_argument("--write", action="store_true", help="Write converted passage to file")
TaskDownloader.add_write_arguments(argument_parser)
main(**vars(argument_parser.parse_args()))
sys.exit(0)