From f9a7c842771f9389a0d8d0df7f5bb86880d366ac Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Tue, 14 May 2024 15:14:08 +0200 Subject: [PATCH 01/17] Bump version to 0.9.1 --- CITATION.cff | 2 +- frontend/src/environments/version.ts | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 7755d98d..9d02749d 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -41,5 +41,5 @@ abstract: >- transcripts, to aid clinical linguists and research into language development and language disorders. license: BSD-3-Clause -version: 0.9.0 +version: 0.9.1 date-released: '2024-01-31' diff --git a/frontend/src/environments/version.ts b/frontend/src/environments/version.ts index 40fc290e..e1a6487e 100644 --- a/frontend/src/environments/version.ts +++ b/frontend/src/environments/version.ts @@ -1,2 +1,2 @@ // TODO: Compile this from toplevel package.json -export const version = '0.9.0'; +export const version = '0.9.1'; diff --git a/package.json b/package.json index cfafca77..b8ff7a98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sasta", - "version": "0.9.0", + "version": "0.9.1", "description": "Annotate and analyze transcripts", "author": "UU Digital Humanities Lab", "license": "BSD-3-Clause", From c7a2c72e7fe74fbbca13ed2fb12d85202ab0e79e Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Tue, 14 May 2024 15:14:35 +0200 Subject: [PATCH 02/17] Add sentry --- backend/requirements.in | 1 + backend/requirements.txt | 8 +++++++- backend/sasta/urls.py | 7 +++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/backend/requirements.in b/backend/requirements.in index 70612e33..12cd1766 100644 --- a/backend/requirements.in +++ b/backend/requirements.in @@ -21,3 +21,4 @@ openpyxl xlrd>=1.2,<2 xlsxwriter sastadev +sentry-sdk[django] diff --git a/backend/requirements.txt b/backend/requirements.txt index 77541270..34794358 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -32,7 +32,9 @@ celery==5.2.7 # -r requirements.in # django-celery-results certifi==2023.7.22 - # via requests + # via + # requests + # sentry-sdk cffi==1.15.1 # via cryptography chamd==0.5.8 @@ -74,6 +76,7 @@ django==3.1.14 # django-rest-auth # django-revproxy # djangorestframework + # sentry-sdk django-allauth==0.51.0 # via django-rest-auth django-celery-results==2.4.0 @@ -216,6 +219,8 @@ sastadev==0.2.0 # via # -r requirements.in # auchann +sentry-sdk[django]==2.1.1 + # via -r requirements.in six==1.16.0 # via # click-repl @@ -263,6 +268,7 @@ urllib3==1.26.18 # via # django-revproxy # requests + # sentry-sdk vine==5.0.0 # via # amqp diff --git a/backend/sasta/urls.py b/backend/sasta/urls.py index 2e4d8965..f9e991e8 100644 --- a/backend/sasta/urls.py +++ b/backend/sasta/urls.py @@ -28,6 +28,12 @@ from .index import index from .proxy_frontend import proxy_frontend + +def trigger_error(request): + '''For testing sentry''' + division_by_zero = 1 / 0 + return division_by_zero + api_router = routers.DefaultRouter() # register viewsets with this router api_router.register(r'upload_files', analysis_views.UploadFileViewSet) api_router.register(r'transcripts', analysis_views.TranscriptViewSet) @@ -49,6 +55,7 @@ path('api/', include(api_router.urls)), path('api/analysis/', include(analysis_urls)), path('api/parse/', include(parse_urls)), + path('api/sentry-debug/', trigger_error), path('api-auth/', include( 'rest_framework.urls', namespace='rest_framework', From d7255349a77ce17bce34941318d89c0bffb73e9c Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Tue, 14 May 2024 15:53:07 +0200 Subject: [PATCH 03/17] Word-break for error messages so close button does not hide --- frontend/src/styles.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 26b09d58..99625d20 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -34,3 +34,7 @@ .p-button:disabled { @extend .button } + +.p-toast-detail { + word-break: break-all; +} \ No newline at end of file From 55244732ea8d00da408cb1f3ea0eebc104bbdeac Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 13:21:21 +0200 Subject: [PATCH 04/17] Resolve bug with CHAT writer --- backend/annotations/writers/saf_chat.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/backend/annotations/writers/saf_chat.py b/backend/annotations/writers/saf_chat.py index 36793db7..dc0e0767 100644 --- a/backend/annotations/writers/saf_chat.py +++ b/backend/annotations/writers/saf_chat.py @@ -28,6 +28,10 @@ def _find_doc_line(lines: List[ChatLine], uttno: int) -> ChatLine: return next((x for x in lines if x.uttid == uttno), None) +def _find_doc_line_byuttid(lines: List[ChatLine], uttid: int) -> ChatLine: + return next((x for x in lines if x.uttid == uttid), None) + + def enrich_chat(transcript: Transcript, allresults: AllResults, method: AssessmentMethod) -> ChatDocument: @@ -37,9 +41,9 @@ def enrich_chat(transcript: Transcript, # construct a mapping of uttno to uttid # because uttid is unknown to CHAT marked_utts = (x for x in transcript.utterances.all() if x.for_analysis) - id_no_mapping = { - u.utt_id: u.uttno for u in marked_utts - } + # id_no_mapping = { + # u.utt_id: u.uttno for u in marked_utts + # } # create mapping of query_ids to items items_mapping = {q.query_id: q.item for q in method.queries.all()} @@ -48,14 +52,16 @@ def enrich_chat(transcript: Transcript, allresults.exactresults, items_mapping) for utt_id, words in results_by_word.items(): - uttno = id_no_mapping.get(int(utt_id)) - doc_line = _find_doc_line(doc.lines, uttno) + # uttno = id_no_mapping.get(int(utt_id)) + doc_line = _find_doc_line_byuttid(doc.lines, int(utt_id)) utt_hits = [] for w in natsorted(words.keys()): utt_hits.extend(words[w]) annotation_str = ', '.join(utt_hits) + if doc_line is None: + print(utt_id) doc_line.tiers['xsyn'] = ChatTier(id='xsyn', text=annotation_str) # id_headers = [h for h in doc.headers if h.line.startswith('@ID')] # last_id_header = max(id_headers, key=attrgetter('linestartno')) From f15b55d6aee5f48d30d03eb9f7d0fc70f03e0e03 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 13:52:46 +0200 Subject: [PATCH 05/17] Revert "Resolve bug with CHAT writer" This reverts commit 55244732ea8d00da408cb1f3ea0eebc104bbdeac. --- backend/annotations/writers/saf_chat.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/backend/annotations/writers/saf_chat.py b/backend/annotations/writers/saf_chat.py index dc0e0767..36793db7 100644 --- a/backend/annotations/writers/saf_chat.py +++ b/backend/annotations/writers/saf_chat.py @@ -28,10 +28,6 @@ def _find_doc_line(lines: List[ChatLine], uttno: int) -> ChatLine: return next((x for x in lines if x.uttid == uttno), None) -def _find_doc_line_byuttid(lines: List[ChatLine], uttid: int) -> ChatLine: - return next((x for x in lines if x.uttid == uttid), None) - - def enrich_chat(transcript: Transcript, allresults: AllResults, method: AssessmentMethod) -> ChatDocument: @@ -41,9 +37,9 @@ def enrich_chat(transcript: Transcript, # construct a mapping of uttno to uttid # because uttid is unknown to CHAT marked_utts = (x for x in transcript.utterances.all() if x.for_analysis) - # id_no_mapping = { - # u.utt_id: u.uttno for u in marked_utts - # } + id_no_mapping = { + u.utt_id: u.uttno for u in marked_utts + } # create mapping of query_ids to items items_mapping = {q.query_id: q.item for q in method.queries.all()} @@ -52,16 +48,14 @@ def enrich_chat(transcript: Transcript, allresults.exactresults, items_mapping) for utt_id, words in results_by_word.items(): - # uttno = id_no_mapping.get(int(utt_id)) - doc_line = _find_doc_line_byuttid(doc.lines, int(utt_id)) + uttno = id_no_mapping.get(int(utt_id)) + doc_line = _find_doc_line(doc.lines, uttno) utt_hits = [] for w in natsorted(words.keys()): utt_hits.extend(words[w]) annotation_str = ', '.join(utt_hits) - if doc_line is None: - print(utt_id) doc_line.tiers['xsyn'] = ChatTier(id='xsyn', text=annotation_str) # id_headers = [h for h in doc.headers if h.line.startswith('@ID')] # last_id_header = max(id_headers, key=attrgetter('linestartno')) From 90049cafc96e471648f4e1cc8ed1ab59ee86bbca Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 14:58:48 +0200 Subject: [PATCH 06/17] Add media to proxyconf --- proxy.conf.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/proxy.conf.json b/proxy.conf.json index c3652abe..4eef3cb8 100644 --- a/proxy.conf.json +++ b/proxy.conf.json @@ -14,5 +14,9 @@ "/rest-auth": { "target": "http://localhost:8000", "secure": false + }, + "/media": { + "target": "http://localhost:8000", + "secure": false } } From 132b61ee3d1428497cb70293bee62a8700735137 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 14:59:07 +0200 Subject: [PATCH 07/17] Outfactor corpus2alpino part of parsing --- backend/parse/parse_utils.py | 42 ++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/backend/parse/parse_utils.py b/backend/parse/parse_utils.py index 64116290..c73b9adc 100644 --- a/backend/parse/parse_utils.py +++ b/backend/parse/parse_utils.py @@ -1,6 +1,7 @@ import io import logging import os +from typing import Any, Generator from analysis.models import Transcript, Utterance from bs4 import BeautifulSoup @@ -9,6 +10,7 @@ from corpus2alpino.converter import Converter from corpus2alpino.targets.filesystem import FilesystemTarget from corpus2alpino.writers.lassy import LassyWriter +from corpus2alpino.targets.memory import MemoryTarget from django.conf import settings from django.core.files import File from lxml import etree @@ -17,6 +19,12 @@ logger = logging.getLogger('sasta') +# Parser setup +ALPINO = AlpinoAnnotator( + settings.ALPINO_HOST, + settings.ALPINO_PORT +) + def parse_and_create(transcript): try: @@ -39,22 +47,7 @@ def parse_transcript(transcript, output_dir, output_path): try: logger.info(f'Parsing:\t{transcript.name}...\n') - - # Parser setup - alpino = AlpinoAnnotator( - settings.ALPINO_HOST, - settings.ALPINO_PORT - ) - - converter = Converter( - collector=FilesystemCollector([transcript.content.path]), - annotators=[alpino], - target=FilesystemTarget(output_path, merge_files=True), - writer=LassyWriter(merge_treebanks=True), - ) - - # Alpino parsing - parses = converter.convert() + parses = corpus2alpino_parse(transcript.content.path, output_path) for _parse in parses: logger.info(f'Succesfully parsed:\t{transcript.name}\n') transcript.save() @@ -92,6 +85,23 @@ def parse_transcript(transcript, output_dir, output_path): transcript.save() +def corpus2alpino_parse( + inpath: str, + outpath: str, + annotator: AlpinoAnnotator = ALPINO, + in_memory: bool = False +) -> Generator[Any, Any, None]: + target = MemoryTarget() if in_memory else FilesystemTarget(outpath, merge_files=True) + converter = Converter( + collector=FilesystemCollector([inpath]), + annotators=[annotator], + target=target, + writer=LassyWriter(merge_treebanks=True), + ) + # actual parsing + return converter.convert() + + def create_utterance_objects(transcript): parse_file = transcript.best_available_treebank From 770f5866ba0e50b14e1920516411dfb676bcc02e Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 14:59:19 +0200 Subject: [PATCH 08/17] Simple corpus2alpino parsing test --- backend/parse/tests/parse_tests.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 backend/parse/tests/parse_tests.py diff --git a/backend/parse/tests/parse_tests.py b/backend/parse/tests/parse_tests.py new file mode 100644 index 00000000..63ea888f --- /dev/null +++ b/backend/parse/tests/parse_tests.py @@ -0,0 +1,20 @@ +import os.path as op + +from parse.parse_utils import corpus2alpino_parse +from lxml import etree + + +def test_c2a_parse(cha_testfiles_dir, tmp_path): + infile = op.join(cha_testfiles_dir, 'single_utt.cha') + outfile = op.join(tmp_path, 'single_utt.xml') + parses = corpus2alpino_parse(infile, outfile, in_memory=True) + parsed = next(parses) + assert parsed # is the file parsed? + + parsed_tree = etree.fromstring(bytes(parsed, encoding='utf-8')) + assert parsed_tree # can it be converted to an etree? + + uttids = parsed_tree.findall('.//meta[@name="uttid"]') + uttid_values = [node.attrib['value'] for node in uttids] + assert len(set(uttid_values)) == len( + uttid_values) # does it have unique uttids? From 68d8e96f4c9b99219bda75303a3f06fd973074d0 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 16:58:55 +0200 Subject: [PATCH 09/17] Only write inform queries --- backend/annotations/writers/saf_xlsx.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/annotations/writers/saf_xlsx.py b/backend/annotations/writers/saf_xlsx.py index 7dbf1010..3a5328c4 100644 --- a/backend/annotations/writers/saf_xlsx.py +++ b/backend/annotations/writers/saf_xlsx.py @@ -16,6 +16,12 @@ from natsort import natsorted +def cast_to_bool(value) -> bool: + if isinstance(value, bool): + return value + elif isinstance(value, str): + return value == 'yes' + @dataclass class SAFWriter(): method: Method @@ -76,7 +82,10 @@ def _make_annotations_worksheet(self) -> Worksheet: # Fill with values for qid, qresults in self.results.exactresults.items(): - self._fill_query(qid, qresults) + query = self.method.queries.get(qid[0]) + inform = cast_to_bool(query.inform) + if inform: + self._fill_query(qid, qresults) return self.anno_ws def _annotations_header_row(self) -> List[str]: From d47e7fecbd60c533ae8ae80e803f236b6ea85147 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 17:36:35 +0200 Subject: [PATCH 10/17] Bump sastadev to fix unaligned items --- backend/parse/parse_utils.py | 5 +++++ backend/requirements.txt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/parse/parse_utils.py b/backend/parse/parse_utils.py index c73b9adc..d2cfacc8 100644 --- a/backend/parse/parse_utils.py +++ b/backend/parse/parse_utils.py @@ -176,3 +176,8 @@ def correct_treebank(transcript: Transcript): except Exception as e: logger.exception(e) raise + + +def correct_uncorrected_transcripts(): + uncorrected = Transcript.objects.filter(corrected_content='') + print(uncorrected.count()) diff --git a/backend/requirements.txt b/backend/requirements.txt index 34794358..1e1a3a4f 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -215,7 +215,7 @@ requests==2.28.1 # spacy requests-oauthlib==1.3.1 # via django-allauth -sastadev==0.2.0 +sastadev==0.2.1 # via # -r requirements.in # auchann From e2272430d122c049c09fb84d3667c1da6c41f4d5 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 17:58:28 +0200 Subject: [PATCH 11/17] Split parsing and correcting treebank --- backend/parse/parse_utils.py | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/backend/parse/parse_utils.py b/backend/parse/parse_utils.py index d2cfacc8..18589fe3 100644 --- a/backend/parse/parse_utils.py +++ b/backend/parse/parse_utils.py @@ -60,19 +60,7 @@ def parse_transcript(transcript, output_dir, output_path): # Correcting and reparsing logger.info(f'Correcting:\t{transcript.name}...\n') - try: - corrected, error_dict, _origandalts = correct_treebank(transcript) - corrected_content = etree.tostring(corrected, encoding='utf-8') - corrected_filename = parsed_filename.replace('.xml', '_corrected.xml') - corrected_file = File(io.BytesIO(corrected_content)) - transcript.corrected_content.save(corrected_filename, corrected_file) - logger.info(f'Successfully corrected:\t{transcript.name}, {len(error_dict)} corrections.\n') - # Save corrections - transcript.corrections = error_dict - - except Exception as err: - transcript.corrections = {'error': str(err)} - logger.warning(f'Correction failed for transcript:\t {transcript.name}') + correct_transcript(transcript) transcript.status = Transcript.PARSED transcript.save() @@ -85,6 +73,27 @@ def parse_transcript(transcript, output_dir, output_path): transcript.save() +def correct_transcript(transcript: Transcript) -> None: + try: + corrected, error_dict, _origandalts = correct_treebank(transcript) + corrected_content = etree.tostring(corrected, encoding='utf-8') + corrected_filename = os.path.basename( + transcript.parsed_content.name.replace('.xml', '_corrected.xml')) + corrected_file = File(io.BytesIO(corrected_content)) + transcript.corrected_content.save(corrected_filename, corrected_file) + # Save corrections + transcript.corrections = error_dict + transcript.save() + logger.info( + f'Successfully corrected:\t{transcript.name}, {len(error_dict)} corrections.\n') + + except Exception as err: + transcript.corrections = {'error': str(err)} + logger.exception( + f'Correction failed for transcript:\t {transcript.name}') + raise + + def corpus2alpino_parse( inpath: str, outpath: str, From 025f71ef9fe8fc08136b6f9ac4e59dc00092cc23 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 18:08:48 +0200 Subject: [PATCH 12/17] Fallback for analyzing uncorrected transcripts --- backend/analysis/query/query_transcript.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/analysis/query/query_transcript.py b/backend/analysis/query/query_transcript.py index a74b1689..35cf5dc0 100644 --- a/backend/analysis/query/query_transcript.py +++ b/backend/analysis/query/query_transcript.py @@ -6,6 +6,7 @@ from sastadev.methods import Method from annotations.reader import read_saf +from parse.parse_utils import correct_transcript def prepare_parameters(infilename: str, method: Method, targets: int, annotationinput: bool) -> SastaCoreParameters: @@ -19,7 +20,12 @@ def prepare_parameters(infilename: str, method: Method, targets: int, annotation def prepare_treebanks(transcript: Transcript) -> Tuple[Tuple[str, etree.ElementTree]]: orig_fp = transcript.parsed_content.path + + # TODO: FIX THIS PROPERLY + if not transcript.corrected_content: + correct_transcript(transcript) corr_fp = transcript.corrected_content.path + orig_treebank = etree.parse(orig_fp).getroot() corr_treebank = etree.parse(corr_fp).getroot() return ( From bfbebc4238b28ef7089c2cab4f4c9521a01ecac1 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Wed, 15 May 2024 18:08:58 +0200 Subject: [PATCH 13/17] Utility for correcting transcripts --- backend/parse/parse_utils.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/backend/parse/parse_utils.py b/backend/parse/parse_utils.py index 18589fe3..30a7816f 100644 --- a/backend/parse/parse_utils.py +++ b/backend/parse/parse_utils.py @@ -59,7 +59,6 @@ def parse_transcript(transcript, output_dir, output_path): transcript.save() # Correcting and reparsing - logger.info(f'Correcting:\t{transcript.name}...\n') correct_transcript(transcript) transcript.status = Transcript.PARSED @@ -74,6 +73,7 @@ def parse_transcript(transcript, output_dir, output_path): def correct_transcript(transcript: Transcript) -> None: + logger.info(f'Correcting:\t{transcript.name}...\n') try: corrected, error_dict, _origandalts = correct_treebank(transcript) corrected_content = etree.tostring(corrected, encoding='utf-8') @@ -188,5 +188,10 @@ def correct_treebank(transcript: Transcript): def correct_uncorrected_transcripts(): - uncorrected = Transcript.objects.filter(corrected_content='') - print(uncorrected.count()) + uncorrected = list(Transcript.objects.filter(corrected_content='')) + print(f'{len(uncorrected)} uncorrected transcripts') + + while len(uncorrected): + t = uncorrected.pop() + print(f'{len(uncorrected)} left') + correct_transcript(t) From 8f5e26d3e020d66ec5628d724593382f90dc6a29 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Thu, 16 May 2024 11:20:01 +0200 Subject: [PATCH 14/17] Rearrange test files --- backend/analysis/conftest.py | 38 +---- backend/conftest.py | 30 +++- backend/parse/tests/parse_tests.py | 2 +- .../{ => single_utt}/single_utt.cha | 0 backend/test_files/single_utt/single_utt.xml | 136 ++++++++++++++++++ .../{ => single_utt}/single_utt_corrected.xml | 4 +- .../single_utt_newstyle.xml} | 8 +- .../single_utt_newstyle_corrected.xml | 129 +++++++++++++++++ backend/test_files/single_utt_saf.xlsx | Bin 28405 -> 0 bytes 9 files changed, 301 insertions(+), 46 deletions(-) rename backend/test_files/{ => single_utt}/single_utt.cha (100%) create mode 100644 backend/test_files/single_utt/single_utt.xml rename backend/test_files/{ => single_utt}/single_utt_corrected.xml (99%) rename backend/test_files/{single_utt.xml => single_utt/single_utt_newstyle.xml} (98%) create mode 100644 backend/test_files/single_utt/single_utt_newstyle_corrected.xml delete mode 100644 backend/test_files/single_utt_saf.xlsx diff --git a/backend/analysis/conftest.py b/backend/analysis/conftest.py index 174a9b67..8b79a1fd 100644 --- a/backend/analysis/conftest.py +++ b/backend/analysis/conftest.py @@ -1,44 +1,10 @@ -import glob -import json import os.path as op import pytest from analysis.convert.convert import convert -from analysis.models import (AnalysisRun, AssessmentMethod, Corpus, - MethodCategory, Transcript) -from django.conf import settings +from analysis.models import (AnalysisRun, Transcript) from django.core.files import File from parse.parse_utils import create_utterance_objects -from sastadev.conf import settings as sd_settings - -CORRECTIONS_TARSP_5 = '''{"Insertion": [["23", "Insertion", "['ik']", "SASTA", "Small Clause Treatment", "None", "fftje [: eventjes] passen?", "ik wil eventjes passen ?"], ["23", "Insertion", "['wil']", "SASTA", "Small Clause Treatment", "None", "fftje [: eventjes] passen?", "ik wil eventjes passen ?"]], "Retracing": [["36", "Retracing", "['di', 'zij', 'hem']", "CHAT", "None", "None", "nee dat wat [//] hij verkoopt.", "dat wat hij verkoopt ."]], "parsed_as": [["4", "parsed_as", "kan nog een dingetje eraan .", "SASTA", "Correction", "None", "ja kan no(g) een dingetje d(e)raan.", "kan nog een dingetje eraan ."], ["7", "parsed_as", "even kijken waar .", "SASTA", "Correction", "None", "effe kijken waar.", "even kijken waar ."], ["11", "parsed_as", "je moet dan eventjes erop zetten .", "SASTA", "Correction", "None", "je moet dan effjes erop zetten.", "je moet dan eventjes erop zetten ."], ["12", "parsed_as", "dan ga ik dit eventjes maken .", "SASTA", "Correction", "None", "dan ga ik dit effjes maken.", "dan ga ik dit eventjes maken ."], ["19", "parsed_as", "deze past nergens meer op .", "SASTA", "Correction", "None", "ja &de &de deze past nerke [: nergens] meer op.", "deze past nergens meer op ."], ["20", "parsed_as", "dan zetten we dit effje aan de kant .", "SASTA", "Correction", "None", "dan zetten we deze effje aan de kant.", "dan zetten we dit effje aan de kant ."], ["22", "parsed_as", "kijk hier hebben wij heel veel .", "SASTA", "Correction", "None", "ja kij(k) hier hebben wij heel veel.", "kijk hier hebben wij heel veel ."], ["23", "parsed_as", "ik wil eventjes passen ?", "SASTA", "Correction", "None", "fftje [: eventjes] passen?", "ik wil eventjes passen ?"], ["24", "parsed_as", "teil .", "SASTA", "Correction", "None", "klik.", "teil ."], ["28", "parsed_as", "trappetje .", "SASTA", "Correction", "None", "ja trarpje [: trappetje].", "trappetje ."], ["32", "parsed_as", "alleen maar worstjes .", "SASTA", "Correction", "None", "nee wee [: alleen] maar wortjes [: worstjes].", "alleen maar worstjes ."], ["36", "parsed_as", "dat wat hij verkoopt .", "SASTA", "Correction", "None", "nee dat wat [//] hij verkoopt.", "dat wat hij verkoopt ."]], "Replacement": [["16", "Replacement", "['gaan']", "CHAT", "None", "None", "ander(s) kaat [: gaan] te [: de] tiern [: dieren] door 't hek lopen.", null], ["16", "Replacement", "['de']", "CHAT", "None", "None", "ander(s) kaat [: gaan] te [: de] tiern [: dieren] door 't hek lopen.", null], ["16", "Replacement", "['dieren']", "CHAT", "None", "None", "ander(s) kaat [: gaan] te [: de] tiern [: dieren] door 't hek lopen.", null], ["19", "Replacement", "['nergens']", "CHAT", "None", "None", "ja &de &de deze past nerke [: nergens] meer op.", "deze past nergens meer op ."], ["23", "Replacement", "['eventjes']", "CHAT", "None", "None", "fftje [: eventjes] passen?", "ik wil eventjes passen ?"], ["28", "Replacement", "['trappetje']", "CHAT", "None", "None", "ja trarpje [: trappetje].", "trappetje ."], ["30", "Replacement", "['parasol']", "CHAT", "None", "None", "&oeps de parasel [: parasol].", null], ["32", "Replacement", "['alleen']", "CHAT", "None", "None", "nee wee [: alleen] maar wortjes [: worstjes].", "alleen maar worstjes ."], ["32", "Replacement", "['worstjes']", "CHAT", "None", "None", "nee wee [: alleen] maar wortjes [: worstjes].", "alleen maar worstjes ."], ["33", "Replacement", "['worstje']", "CHAT", "None", "None", "kijk hier zit een wortje [: worstje] in.", null], ["34", "Replacement", "['staat']", "CHAT", "None", "None", "wat taat [: staat] hierop?", null]], "GrammarError": [["20", "GrammarError", "deheterror", "SASTA", "Error", "None", "dan zetten we deze effje aan de kant.", "dan zetten we dit effje aan de kant ."]], "Disambiguation": [["24", "Disambiguation", "Avoid unknown reading", "SASTA", "Lexicon", "None", "klik.", "teil ."]], "ExtraGrammatical": [["4", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja kan no(g) een dingetje d(e)raan.", "kan nog een dingetje eraan ."], ["19", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja &de &de deze past nerke [: nergens] meer op.", "deze past nergens meer op ."], ["22", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja kij(k) hier hebben wij heel veel.", "kijk hier hebben wij heel veel ."], ["28", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja trarpje [: trappetje].", "trappetje ."], ["32", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "nee wee [: alleen] maar wortjes [: worstjes].", "alleen maar worstjes ."], ["36", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "nee dat wat [//] hij verkoopt.", "dat wat hij verkoopt ."]], "Phonological Fragment": [["8", "Phonological Fragment", "['&hoo']", "CHAT", "None", "None", "&hoo hij kom(t).", null], ["10", "Phonological Fragment", "['&oo']", "CHAT", "None", "None", "&oo hij fiet(st) niet meer.", null], ["15", "Phonological Fragment", "['&nie']", "CHAT", "None", "None", "hij kan &nie nie(t) meer daarheen (s)chuiven.", null], ["19", "Phonological Fragment", "['&de']", "CHAT", "None", "None", "ja &de &de deze past nerke [: nergens] meer op.", "deze past nergens meer op ."], ["19", "Phonological Fragment", "['&de']", "CHAT", "None", "None", "ja &de &de deze past nerke [: nergens] meer op.", "deze past nergens meer op ."], ["27", "Phonological Fragment", "['&uhh']", "CHAT", "None", "None", "&uhh wat i(s) dit ook alweer?", null], ["30", "Phonological Fragment", "['&oeps']", "CHAT", "None", "None", "&oeps de parasel [: parasol].", null]], "Informal Pronunciation": [["7", "Informal Pronunciation", "Alternative Pronunciation", "SASTA", "Pronunciation", "None", "effe kijken waar.", "even kijken waar ."], ["11", "Informal Pronunciation", "Alternative Pronunciation", "SASTA", "Pronunciation", "None", "je moet dan effjes erop zetten.", "je moet dan eventjes erop zetten ."], ["12", "Informal Pronunciation", "Alternative Pronunciation", "SASTA", "Pronunciation", "None", "dan ga ik dit effjes maken.", "dan ga ik dit eventjes maken ."]], "Insertion Token Mapping": [["23", "Insertion Token Mapping", "[None, None, 30, 50, 60]", "SASTA", "Token Mapping", "None", "fftje [: eventjes] passen?", "ik wil eventjes passen ?"]], "Alternative Pronunciation": [["4", "Alternative Pronunciation", "d-onset on er", "SASTA", "Pronunciation", "None", "ja kan no(g) een dingetje d(e)raan.", "kan nog een dingetje eraan ."]]}''' -CORRECTIONS_ASTA_16 = '{"Pause": [["15", "Pause", "[\'(..)\']", "CHAT", "None", "None", "uh (..) BEROEP1", "BEROEP1"], ["33", "Pause", "[\'(.)\']", "CHAT", "None", "None", "(.) ja (.) ja ik weet het niet", "ik weet het niet"], ["33", "Pause", "[\'(.)\']", "CHAT", "None", "None", "(.) ja (.) ja ik weet het niet", "ik weet het niet"], ["38", "Pause", "[\'(..)\']", "CHAT", "None", "None", "dat heb ik net nog gelezen (..)", null], ["45", "Pause", "[\'(..)\']", "CHAT", "None", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["45", "Pause", "[\'(..)\']", "CHAT", "None", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["46", "Pause", "[\'(..)\']", "CHAT", "None", "None", "ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh", "ik doe boekjes voor club geloof ik"], ["47", "Pause", "[\'(...)\']", "CHAT", "None", "None", "en uh (...) uh (.) uh sorry", "en"], ["47", "Pause", "[\'(.)\']", "CHAT", "None", "None", "en uh (...) uh (.) uh sorry", "en"]], "parsed_as": [["1", "parsed_as", "ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad", "SASTA", "Correction", "None", "ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad ", "ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad"], ["4", "parsed_as", "en nu krijg ik te horen", "SASTA", "Correction", "None", "en uh nu krijg ik te horen", "en nu krijg ik te horen"], ["6", "parsed_as", "en verder het gaat redelijk denk ik", "SASTA", "Correction", "None", "en verder ja het gaat redelijk denk ik", "en verder het gaat redelijk denk ik"], ["7", "parsed_as", "ik ben eerst naar een ziekenhuis geweest een aantal weken", "SASTA", "Correction", "None", "oh ja sorry ja ik ben eerst uh naar een ziekenhuis geweest een aantal weken", "ik ben eerst naar een ziekenhuis geweest een aantal weken"], ["8", "parsed_as", "toen een aantal weken in een iets van zorg", "SASTA", "Correction", "None", "toen een aantal weken in een een iets van zorg ", "toen een aantal weken in een iets van zorg"], ["9", "parsed_as", "ik weet niet in uh( . )", "SASTA", "Correction", "None", "ik weet niet uh in uh(.)", "ik weet niet in uh( . )"], ["10", "parsed_as", "buiten is Breda", "SASTA", "Correction", "None", "uh buiten Breda ", "buiten is Breda"], ["13", "parsed_as", "en toen ik zo ver weer was ben ik naar hier gekomen", "SASTA", "Correction", "None", "en en toen ik zo ver weer was ben ik naar hier gekomen", "en toen ik zo ver weer was ben ik naar hier gekomen"], ["14", "parsed_as", "dat heet de ZORGINSTELLING1", "SASTA", "Correction", "None", "dat heet de uh ZORGINSTELLING1", "dat heet de ZORGINSTELLING1"], ["15", "parsed_as", "BEROEP1", "SASTA", "Correction", "None", "uh (..) BEROEP1", "BEROEP1"], ["16", "parsed_as", "is heel erg leuk", "SASTA", "Correction", "None", "ja is heel erg leuk ja", "is heel erg leuk"], ["20", "parsed_as", "en is ook leuk kon kinderen zo gezellig zo lief zo fijn", "SASTA", "Correction", "None", "en is ook leuk kon kinderen zo gezellig zo lief zo fijn ja", "en is ook leuk kon kinderen zo gezellig zo lief zo fijn"], ["21", "parsed_as", "en ook ouders heel goed contact", "SASTA", "Correction", "None", "ja en ook ouders heel goed contact", "en ook ouders heel goed contact"], ["22", "parsed_as", "kinderen worden gebracht", "SASTA", "Correction", "None", "ki kinderen worden gebracht", "kinderen worden gebracht"], ["23", "parsed_as", "en dan is het contact goed met de ouders", "SASTA", "Correction", "None", "en uh dan is het contact goed met de ouders", "en dan is het contact goed met de ouders"], ["25", "parsed_as", "en kinderen zijn fijn lief", "SASTA", "Correction", "None", "en kinderen zijn ja fijn lief", "en kinderen zijn fijn lief"], ["26", "parsed_as", "en voelen zich wel gelukkig bij ons", "SASTA", "Correction", "None", "en voelen zich wel uh voelen zich wel gelukkig bij ons", "en voelen zich wel gelukkig bij ons"], ["28", "parsed_as", "ik werk drie dagen", "SASTA", "Correction", "None", "oo uh uh ik werk drie dagen", "ik werk drie dagen"], ["29", "parsed_as", "ik begin ik om half acht tot ik denk tot zes uur", "SASTA", "Correction", "None", "ja ik begin ik om uh half acht tot ik denk tot zes uur ja", "ik begin ik om half acht tot ik denk tot zes uur"], ["30", "parsed_as", "toevallig hierachter", "SASTA", "Correction", "None", "ja toevallig hierachter ", "toevallig hierachter"], ["31", "parsed_as", "kinderen met beperking", "SASTA", "Correction", "None", "uh kinderen met beperking", "kinderen met beperking"], ["33", "parsed_as", "ik weet het niet", "SASTA", "Correction", "None", "(.) ja (.) ja ik weet het niet", "ik weet het niet"], ["35", "parsed_as", "ik herken het", "SASTA", "Correction", "None", "ik ik herken het", "ik herken het"], ["36", "parsed_as", "daar ben ik veel geweest", "SASTA", "Correction", "None", "wauw daar ben ik veel geweest", "daar ben ik veel geweest"], ["37", "parsed_as", "ook hier de", "SASTA", "Correction", "None", "ook hier de uh", "ook hier de"], ["40", "parsed_as", "veel geweest voor", "SASTA", "Correction", "None", "veel geweest voor uh", "veel geweest voor"], ["42", "parsed_as", "net gekoppeld", "SASTA", "Correction", "None", "ja uh net gekoppeld", "net gekoppeld"], ["44", "parsed_as", "dus maar ben ik veel geweest maar ook als ik hier", "SASTA", "Correction", "None", "dus maar ben ik veel geweest maar ook als ik hier uh", "dus maar ben ik veel geweest maar ook als ik hier"], ["45", "parsed_as", "ik zing met oudere mensen", "SASTA", "Correction", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["46", "parsed_as", "ik doe boekjes voor club geloof ik", "SASTA", "Correction", "None", "ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh", "ik doe boekjes voor club geloof ik"], ["47", "parsed_as", "en", "SASTA", "Correction", "None", "en uh (...) uh (.) uh sorry", "en"]], "ExtraGrammatical": [["1", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad ", "ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad"], ["1", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad ", "ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad"], ["4", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "en uh nu krijg ik te horen", "en nu krijg ik te horen"], ["6", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "en verder ja het gaat redelijk denk ik", "en verder het gaat redelijk denk ik"], ["7", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oh ja sorry ja ik ben eerst uh naar een ziekenhuis geweest een aantal weken", "ik ben eerst naar een ziekenhuis geweest een aantal weken"], ["7", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oh ja sorry ja ik ben eerst uh naar een ziekenhuis geweest een aantal weken", "ik ben eerst naar een ziekenhuis geweest een aantal weken"], ["7", "ExtraGrammatical", "Interjection", "SASTA", "Syntax", "None", "oh ja sorry ja ik ben eerst uh naar een ziekenhuis geweest een aantal weken", "ik ben eerst naar een ziekenhuis geweest een aantal weken"], ["7", "ExtraGrammatical", "Repeated ja, nee, nou", "SASTA", "Syntax", "Repetition", "oh ja sorry ja ik ben eerst uh naar een ziekenhuis geweest een aantal weken", "ik ben eerst naar een ziekenhuis geweest een aantal weken"], ["7", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "oh ja sorry ja ik ben eerst uh naar een ziekenhuis geweest een aantal weken", "ik ben eerst naar een ziekenhuis geweest een aantal weken"], ["8", "ExtraGrammatical", "Repeated word token", "SASTA", "Tokenisation", "Repetition", "toen een aantal weken in een een iets van zorg ", "toen een aantal weken in een iets van zorg"], ["9", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ik weet niet uh in uh(.)", "ik weet niet in uh( . )"], ["10", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "uh buiten Breda ", "buiten is Breda"], ["13", "ExtraGrammatical", "Repeated word token", "SASTA", "Tokenisation", "Repetition", "en en toen ik zo ver weer was ben ik naar hier gekomen", "en toen ik zo ver weer was ben ik naar hier gekomen"], ["14", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "dat heet de uh ZORGINSTELLING1", "dat heet de ZORGINSTELLING1"], ["15", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "uh (..) BEROEP1", "BEROEP1"], ["16", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja is heel erg leuk ja", "is heel erg leuk"], ["16", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja is heel erg leuk ja", "is heel erg leuk"], ["20", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "en is ook leuk kon kinderen zo gezellig zo lief zo fijn ja", "en is ook leuk kon kinderen zo gezellig zo lief zo fijn"], ["21", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja en ook ouders heel goed contact", "en ook ouders heel goed contact"], ["22", "ExtraGrammatical", "Short Repetition", "SASTA", "Tokenisation", "Repetition", "ki kinderen worden gebracht", "kinderen worden gebracht"], ["23", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "en uh dan is het contact goed met de ouders", "en dan is het contact goed met de ouders"], ["25", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "en kinderen zijn ja fijn lief", "en kinderen zijn fijn lief"], ["26", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "en voelen zich wel uh voelen zich wel gelukkig bij ons", "en voelen zich wel gelukkig bij ons"], ["26", "ExtraGrammatical", "Word token of a repeated word token sequence", "SASTA", "Tokenisation", "Repetition", "en voelen zich wel uh voelen zich wel gelukkig bij ons", "en voelen zich wel gelukkig bij ons"], ["26", "ExtraGrammatical", "Word token of a repeated word token sequence", "SASTA", "Tokenisation", "Repetition", "en voelen zich wel uh voelen zich wel gelukkig bij ons", "en voelen zich wel gelukkig bij ons"], ["26", "ExtraGrammatical", "Word token of a repeated word token sequence", "SASTA", "Tokenisation", "Repetition", "en voelen zich wel uh voelen zich wel gelukkig bij ons", "en voelen zich wel gelukkig bij ons"], ["28", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oo uh uh ik werk drie dagen", "ik werk drie dagen"], ["28", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oo uh uh ik werk drie dagen", "ik werk drie dagen"], ["28", "ExtraGrammatical", "Interjection", "SASTA", "Syntax", "None", "oo uh uh ik werk drie dagen", "ik werk drie dagen"], ["29", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ja ik begin ik om uh half acht tot ik denk tot zes uur ja", "ik begin ik om half acht tot ik denk tot zes uur"], ["29", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja ik begin ik om uh half acht tot ik denk tot zes uur ja", "ik begin ik om half acht tot ik denk tot zes uur"], ["29", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja ik begin ik om uh half acht tot ik denk tot zes uur ja", "ik begin ik om half acht tot ik denk tot zes uur"], ["30", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja toevallig hierachter ", "toevallig hierachter"], ["31", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "uh kinderen met beperking", "kinderen met beperking"], ["33", "ExtraGrammatical", "Repeated ja, nee, nou", "SASTA", "Syntax", "Repetition", "(.) ja (.) ja ik weet het niet", "ik weet het niet"], ["33", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "(.) ja (.) ja ik weet het niet", "ik weet het niet"], ["35", "ExtraGrammatical", "Repeated word token", "SASTA", "Tokenisation", "Repetition", "ik ik herken het", "ik herken het"], ["36", "ExtraGrammatical", "Interjection", "SASTA", "Syntax", "None", "wauw daar ben ik veel geweest", "daar ben ik veel geweest"], ["37", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ook hier de uh", "ook hier de"], ["40", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "veel geweest voor uh", "veel geweest voor"], ["42", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ja uh net gekoppeld", "net gekoppeld"], ["42", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "ja uh net gekoppeld", "net gekoppeld"], ["44", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "dus maar ben ik veel geweest maar ook als ik hier uh", "dus maar ben ik veel geweest maar ook als ik hier"], ["45", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["45", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["45", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["45", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["45", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["45", "ExtraGrammatical", "Interjection", "SASTA", "Syntax", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["45", "ExtraGrammatical", "ja, nee or nou filled pause", "SASTA", "Syntax", "None", "oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh", "ik zing met oudere mensen"], ["46", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh", "ik doe boekjes voor club geloof ik"], ["46", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh", "ik doe boekjes voor club geloof ik"], ["46", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh", "ik doe boekjes voor club geloof ik"], ["46", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh", "ik doe boekjes voor club geloof ik"], ["46", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh", "ik doe boekjes voor club geloof ik"], ["46", "ExtraGrammatical", "Repeated word token", "SASTA", "Tokenisation", "Repetition", "ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh", "ik doe boekjes voor club geloof ik"], ["47", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "en uh (...) uh (.) uh sorry", "en"], ["47", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "en uh (...) uh (.) uh sorry", "en"], ["47", "ExtraGrammatical", "Filled Pause", "SASTA", "Syntax", "None", "en uh (...) uh (.) uh sorry", "en"], ["47", "ExtraGrammatical", "Interjection", "SASTA", "Syntax", "None", "en uh (...) uh (.) uh sorry", "en"]]}' - - -@pytest.fixture -def tarsp_corpus(db, admin_user, tarsp_method, tarsp_category): - obj = Corpus.objects.create( - user=admin_user, - name='tarsp_test_corpus', - status='created', - default_method=tarsp_method, - method_category=tarsp_category - ) - yield obj - obj.delete() - - -@pytest.fixture -def asta_corpus(db, admin_user, asta_method, asta_category): - obj = Corpus.objects.create( - user=admin_user, - name='asta_test_corpus', - status='created', - default_method=asta_method, - method_category=asta_category - ) - yield obj - obj.delete() @pytest.fixture @@ -53,7 +19,6 @@ def tarsp_transcript(db, tarsp_corpus, cha_testfiles_dir): convert(obj) with open(op.join(cha_testfiles_dir, 'sample_5.xml'), 'rb') as f: obj.parsed_content.save('sample_5.xml', File(f)) - obj.corrections = json.loads(CORRECTIONS_TARSP_5) create_utterance_objects(obj) obj.save() yield obj @@ -72,7 +37,6 @@ def asta_transcript(db, asta_corpus, cha_testfiles_dir): convert(obj) with open(op.join(cha_testfiles_dir, 'sample_16.xml'), 'rb') as f: obj.parsed_content.save('sample_16.xml', File(f)) - obj.corrections = json.loads(CORRECTIONS_ASTA_16) create_utterance_objects(obj) obj.save() yield obj diff --git a/backend/conftest.py b/backend/conftest.py index 66f4992c..c587c90e 100644 --- a/backend/conftest.py +++ b/backend/conftest.py @@ -3,7 +3,7 @@ from os import path as op import pytest -from analysis.models import AssessmentMethod, MethodCategory +from analysis.models import AssessmentMethod, Corpus, MethodCategory from django.conf import settings from django.core.files import File from sastadev.allresults import AllResults @@ -27,6 +27,19 @@ def tarsp_category(db): obj.delete() +@pytest.fixture +def tarsp_corpus(db, admin_user, tarsp_method, tarsp_category): + obj = Corpus.objects.create( + user=admin_user, + name='tarsp_test_corpus', + status='created', + default_method=tarsp_method, + method_category=tarsp_category + ) + yield obj + obj.delete() + + @pytest.fixture def stap_category(db): obj = MethodCategory.objects.create( @@ -51,6 +64,19 @@ def asta_category(db): obj.delete() +@pytest.fixture +def asta_corpus(db, admin_user, asta_method, asta_category): + obj = Corpus.objects.create( + user=admin_user, + name='asta_test_corpus', + status='created', + default_method=asta_method, + method_category=asta_category + ) + yield obj + obj.delete() + + @pytest.fixture def method_dir(): return op.join(sd_settings.SD_DIR, 'data', 'methods') @@ -83,7 +109,7 @@ def asta_method(db, asta_category, method_dir): @pytest.fixture def single_utt_allresults(cha_testfiles_dir): parsed = etree.parse( - op.join(cha_testfiles_dir, 'single_utt_corrected.xml')) + op.join(cha_testfiles_dir, 'single_utt', 'single_utt_corrected.xml')) utts = parsed.xpath('alpino_ds') return AllResults( diff --git a/backend/parse/tests/parse_tests.py b/backend/parse/tests/parse_tests.py index 63ea888f..ff214659 100644 --- a/backend/parse/tests/parse_tests.py +++ b/backend/parse/tests/parse_tests.py @@ -5,7 +5,7 @@ def test_c2a_parse(cha_testfiles_dir, tmp_path): - infile = op.join(cha_testfiles_dir, 'single_utt.cha') + infile = op.join(cha_testfiles_dir, 'single_utt', 'single_utt.cha') outfile = op.join(tmp_path, 'single_utt.xml') parses = corpus2alpino_parse(infile, outfile, in_memory=True) parsed = next(parses) diff --git a/backend/test_files/single_utt.cha b/backend/test_files/single_utt/single_utt.cha similarity index 100% rename from backend/test_files/single_utt.cha rename to backend/test_files/single_utt/single_utt.cha diff --git a/backend/test_files/single_utt/single_utt.xml b/backend/test_files/single_utt/single_utt.xml new file mode 100644 index 00000000..cb011165 --- /dev/null +++ b/backend/test_files/single_utt/single_utt.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kun u mij eens wat vertellen waarom u hier bent wat is er gebeurd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/test_files/single_utt_corrected.xml b/backend/test_files/single_utt/single_utt_corrected.xml similarity index 99% rename from backend/test_files/single_utt_corrected.xml rename to backend/test_files/single_utt/single_utt_corrected.xml index a10d7eb2..646fc354 100644 --- a/backend/test_files/single_utt_corrected.xml +++ b/backend/test_files/single_utt/single_utt_corrected.xml @@ -1,5 +1,5 @@ - + @@ -124,6 +124,6 @@ ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad - Q#ng1704292912|ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad|1|1|-12.662841177789993 + Q#ng1706799665|ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad|1|1|-12.662841177789993 \ No newline at end of file diff --git a/backend/test_files/single_utt.xml b/backend/test_files/single_utt/single_utt_newstyle.xml similarity index 98% rename from backend/test_files/single_utt.xml rename to backend/test_files/single_utt/single_utt_newstyle.xml index 5c98c69b..0caabe35 100644 --- a/backend/test_files/single_utt.xml +++ b/backend/test_files/single_utt/single_utt_newstyle.xml @@ -1,6 +1,6 @@ - + @@ -60,7 +60,7 @@ - + @@ -104,7 +104,7 @@ - ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad + ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad @@ -115,7 +115,7 @@ - + diff --git a/backend/test_files/single_utt/single_utt_newstyle_corrected.xml b/backend/test_files/single_utt/single_utt_newstyle_corrected.xml new file mode 100644 index 00000000..d067a9ff --- /dev/null +++ b/backend/test_files/single_utt/single_utt_newstyle_corrected.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kun u mij eens wat vertellen waarom u hier bent wat is er gebeurd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad + Q#ng1715779044|ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad|1|1|-12.662841177789993 + + \ No newline at end of file diff --git a/backend/test_files/single_utt_saf.xlsx b/backend/test_files/single_utt_saf.xlsx deleted file mode 100644 index 9046b16bf644fb480f9902bd1f51b28dc042459d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28405 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 NOF$C0a>D)g{{Z$ox;6j+ From 548c19ef9209de4512a1a68dc878c75288c37180 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Thu, 16 May 2024 13:41:58 +0200 Subject: [PATCH 15/17] Simple integration tests --- backend/analysis/conftest.py | 57 - .../analysis/convert/tests/convert_test.py | 4 +- backend/annotations/tests/__init__.py | 0 backend/annotations/tests/chat_tests.py | 25 + backend/annotations/writers/saf_chat.py | 23 +- backend/conftest.py | 100 +- backend/parse/tests/parse_tests.py | 4 +- .../{ => ASTA}/single_utt/single_utt.cha | 0 .../{ => ASTA}/single_utt/single_utt.xml | 0 .../ASTA/single_utt/single_utt_annotated.cha | 12 + .../single_utt/single_utt_corrected.xml | 0 .../single_utt_newstyle.cha | 11 + .../single_utt_newstyle.xml | 0 .../single_utt_newstyle_annotated.cha | 12 + .../single_utt_newstyle_corrected.xml | 0 .../test_files/TARSP/Tarsp_01/Tarsp_01.cha | 88 + .../test_files/TARSP/Tarsp_01/Tarsp_01.xml | 1623 ++++++++++ .../TARSP/Tarsp_01/Tarsp_01_corrected.xml | 1598 ++++++++++ backend/test_files/sample_1.cha | 30 - backend/test_files/sample_1.xml | 740 ----- backend/test_files/sample_16.cha | 125 - backend/test_files/sample_16.docx | Bin 20073 -> 0 bytes backend/test_files/sample_16.xml | 2744 ----------------- backend/test_files/sample_16_SAF.xlsx | Bin 27385 -> 0 bytes .../test_files/sample_16_SAF_corrected.xlsx | Bin 20191 -> 0 bytes backend/test_files/sample_1_SAF.xlsx | Bin 6840 -> 0 bytes backend/test_files/sample_5.cha | 84 - backend/test_files/sample_5.docx | Bin 13985 -> 0 bytes backend/test_files/sample_5.xml | 1467 --------- backend/test_files/sample_5_SAF.xlsx | Bin 18406 -> 0 bytes .../sample_5_SAF_with_comments.xlsx | Bin 23967 -> 0 bytes backend/tests/integration_tests.py | 9 + docs/local-installation (Docker).md | 2 +- 33 files changed, 3477 insertions(+), 5281 deletions(-) delete mode 100644 backend/analysis/conftest.py create mode 100644 backend/annotations/tests/__init__.py create mode 100644 backend/annotations/tests/chat_tests.py rename backend/test_files/{ => ASTA}/single_utt/single_utt.cha (100%) rename backend/test_files/{ => ASTA}/single_utt/single_utt.xml (100%) create mode 100644 backend/test_files/ASTA/single_utt/single_utt_annotated.cha rename backend/test_files/{ => ASTA}/single_utt/single_utt_corrected.xml (100%) create mode 100644 backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle.cha rename backend/test_files/{single_utt => ASTA/single_utt_newstyle}/single_utt_newstyle.xml (100%) create mode 100644 backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle_annotated.cha rename backend/test_files/{single_utt => ASTA/single_utt_newstyle}/single_utt_newstyle_corrected.xml (100%) create mode 100644 backend/test_files/TARSP/Tarsp_01/Tarsp_01.cha create mode 100644 backend/test_files/TARSP/Tarsp_01/Tarsp_01.xml create mode 100644 backend/test_files/TARSP/Tarsp_01/Tarsp_01_corrected.xml delete mode 100644 backend/test_files/sample_1.cha delete mode 100644 backend/test_files/sample_1.xml delete mode 100644 backend/test_files/sample_16.cha delete mode 100644 backend/test_files/sample_16.docx delete mode 100644 backend/test_files/sample_16.xml delete mode 100644 backend/test_files/sample_16_SAF.xlsx delete mode 100644 backend/test_files/sample_16_SAF_corrected.xlsx delete mode 100644 backend/test_files/sample_1_SAF.xlsx delete mode 100644 backend/test_files/sample_5.cha delete mode 100644 backend/test_files/sample_5.docx delete mode 100644 backend/test_files/sample_5.xml delete mode 100644 backend/test_files/sample_5_SAF.xlsx delete mode 100644 backend/test_files/sample_5_SAF_with_comments.xlsx create mode 100644 backend/tests/integration_tests.py diff --git a/backend/analysis/conftest.py b/backend/analysis/conftest.py deleted file mode 100644 index 8b79a1fd..00000000 --- a/backend/analysis/conftest.py +++ /dev/null @@ -1,57 +0,0 @@ -import os.path as op - -import pytest -from analysis.convert.convert import convert -from analysis.models import (AnalysisRun, Transcript) -from django.core.files import File -from parse.parse_utils import create_utterance_objects - - -@pytest.fixture -def tarsp_transcript(db, tarsp_corpus, cha_testfiles_dir): - obj = Transcript.objects.create( - name='tarsp_sample_5', - status=Transcript.PARSED, - corpus=tarsp_corpus - ) - with open(op.join(cha_testfiles_dir, 'sample_5.cha'), 'rb') as f: - obj.content.save('sample_5.cha', File(f)) - convert(obj) - with open(op.join(cha_testfiles_dir, 'sample_5.xml'), 'rb') as f: - obj.parsed_content.save('sample_5.xml', File(f)) - create_utterance_objects(obj) - obj.save() - yield obj - obj.delete() - - -@pytest.fixture -def asta_transcript(db, asta_corpus, cha_testfiles_dir): - obj = Transcript.objects.create( - name='asta_sample_16', - status=Transcript.PARSED, - corpus=asta_corpus - ) - with open(op.join(cha_testfiles_dir, 'sample_16.cha'), 'rb') as f: - obj.content.save('sample_16.cha', File(f)) - convert(obj) - with open(op.join(cha_testfiles_dir, 'sample_16.xml'), 'rb') as f: - obj.parsed_content.save('sample_16.xml', File(f)) - create_utterance_objects(obj) - obj.save() - yield obj - obj.delete() - - -@pytest.fixture -def asta_transcript_corrections(db, asta_transcript, asta_method, cha_testfiles_dir): - obj = AnalysisRun( - transcript=asta_transcript, - method=asta_method, - is_manual_correction=True - ) - with open(op.join(cha_testfiles_dir, 'sample_16_SAF_corrected.xlsx'), 'rb') as f: - obj.annotation_file.save('sample_16_SAF_corrected.xlsx', File(f)) - obj.save() - yield obj - obj.delete() diff --git a/backend/analysis/convert/tests/convert_test.py b/backend/analysis/convert/tests/convert_test.py index 03c6d71f..9ca4af2f 100644 --- a/backend/analysis/convert/tests/convert_test.py +++ b/backend/analysis/convert/tests/convert_test.py @@ -79,9 +79,9 @@ def test_quotemarks(quotemarks): assert replace_quotation_marks(line) == expected -def test_chat_replacements(cha_testfiles_dir, tarsp_category): +def test_chat_replacements(testfiles_dir, tarsp_category): '''Test if CHAT input handles replacements correctly''' - fn = op.join(cha_testfiles_dir, 'sample_1.cha') + fn = op.join(testfiles_dir, 'sample_1.cha') doc = ChatDocument.from_chatfile(fn, tarsp_category) line = doc.lines[1] diff --git a/backend/annotations/tests/__init__.py b/backend/annotations/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/annotations/tests/chat_tests.py b/backend/annotations/tests/chat_tests.py new file mode 100644 index 00000000..67d25009 --- /dev/null +++ b/backend/annotations/tests/chat_tests.py @@ -0,0 +1,25 @@ +from annotations.writers.saf_chat import enrich_chat + + +def test_chat_enrich(single_utt_allresults, asta_transcripts): + '''Tests the CHAT enrichment functionality''' + transcript = asta_transcripts.get(name='single_utt') + doc = enrich_chat(transcript=transcript, allresults=single_utt_allresults, + method=transcript.corpus.default_method) + + # Test the correct position of %xsyn annotations + assert doc.lines[0].tiers.get('xsyn') is None + assert doc.lines[1].tiers.get('xsyn') is not None + + +def test_chat_enrich_newids(single_utt_allresults, asta_transcripts, tmp_path): + '''Tests the CHAT enrichment using new Corpus2Alpino style + In this style, uttids are not overwritten by xsid. + ''' + transcript = asta_transcripts.get(name='single_utt_newstyle') + doc = enrich_chat(transcript=transcript, allresults=single_utt_allresults, + method=transcript.corpus.default_method) + + # Test the correct position of %xsyn annotations + assert doc.lines[0].tiers.get('xsyn') is None + assert doc.lines[1].tiers.get('xsyn') is not None diff --git a/backend/annotations/writers/saf_chat.py b/backend/annotations/writers/saf_chat.py index 36793db7..51ebec87 100644 --- a/backend/annotations/writers/saf_chat.py +++ b/backend/annotations/writers/saf_chat.py @@ -25,7 +25,17 @@ def _items_by_utt_word(exactresults: ExactResultsDict, items_mapping: Dict) -> D def _find_doc_line(lines: List[ChatLine], uttno: int) -> ChatLine: # TODO: more efficient way to do this? - return next((x for x in lines if x.uttid == uttno), None) + # return next((x for x in lines if x.uttno == uttno), None) + return lines[uttno - 1] + + +def find_doc_line_xsid(lines: List[ChatLine], xsid: int) -> ChatLine: + for x in lines: + line_xsid = x.tiers.get('xsid') + if line_xsid and line_xsid.text == str(xsid): + return x + return None + def enrich_chat(transcript: Transcript, @@ -34,12 +44,11 @@ def enrich_chat(transcript: Transcript, doc = ChatDocument.from_chatfile( transcript.content.path, transcript.corpus.method_category) + target_ids = transcript.target_ids + # construct a mapping of uttno to uttid # because uttid is unknown to CHAT marked_utts = (x for x in transcript.utterances.all() if x.for_analysis) - id_no_mapping = { - u.utt_id: u.uttno for u in marked_utts - } # create mapping of query_ids to items items_mapping = {q.query_id: q.item for q in method.queries.all()} @@ -48,8 +57,10 @@ def enrich_chat(transcript: Transcript, allresults.exactresults, items_mapping) for utt_id, words in results_by_word.items(): - uttno = id_no_mapping.get(int(utt_id)) - doc_line = _find_doc_line(doc.lines, uttno) + if target_ids: + doc_line = find_doc_line_xsid(doc.lines, int(utt_id)) + else: + doc_line = _find_doc_line(doc.lines, int(utt_id)) utt_hits = [] for w in natsorted(words.keys()): diff --git a/backend/conftest.py b/backend/conftest.py index c587c90e..d9b504b5 100644 --- a/backend/conftest.py +++ b/backend/conftest.py @@ -1,9 +1,11 @@ import glob from collections import Counter from os import path as op +import os import pytest -from analysis.models import AssessmentMethod, Corpus, MethodCategory +from analysis.convert.convert import convert +from analysis.models import AssessmentMethod, Corpus, MethodCategory, Transcript from django.conf import settings from django.core.files import File from sastadev.allresults import AllResults @@ -11,20 +13,66 @@ from lxml import etree +from parse.parse_utils import create_utterance_objects + + +def _get_transcript_filenames(name: str, dir: str): + return { + 'chat': f'{name}.cha', + 'parsed': f'{name}.xml', + 'corrected': f'{name}_corrected.xml' + } + + +def _make_transcript(corpus: Corpus, name: str, dir: str): + filenames = _get_transcript_filenames(name, str) + + obj = Transcript.objects.create( + name=name, + status=Transcript.PARSED, + corpus=corpus + ) + + with open(op.join(dir, filenames['chat']), 'rb') as f: + obj.content.save(filenames['chat'], File(f)) + + convert(obj) + + with open(op.join(dir, filenames['parsed']), 'rb') as f: + obj.parsed_content.save(filenames['parsed'], File(f)) + with open(op.join(dir, filenames['corrected']), 'rb') as f: + obj.corrected_content.save(filenames['corrected'], File(f)) + + create_utterance_objects(obj) + + obj.save() + return obj + + +def _make_method_transcripts(corpus: Corpus, testfiles_dir): + method_name = corpus.method_category.name + method_dir = op.join(testfiles_dir, method_name) + transcript_dirs = os.listdir(method_dir) + + for name in transcript_dirs: + _make_transcript(corpus, name, op.join(method_dir, name)) + + transcripts = corpus.transcripts.all() + assert transcripts.count() == len(transcript_dirs) + return transcripts + @pytest.fixture -def cha_testfiles_dir(): +def testfiles_dir(): return op.join(settings.BASE_DIR, 'test_files') @pytest.fixture def tarsp_category(db): - obj = MethodCategory.objects.create( + return MethodCategory.objects.create( name='TARSP', zc_embeddings=True, levels=['Sz', 'Zc', 'Wg', 'VVW'], marking_postcodes=['[+ G]']) - yield obj - obj.delete() @pytest.fixture @@ -36,8 +84,7 @@ def tarsp_corpus(db, admin_user, tarsp_method, tarsp_category): default_method=tarsp_method, method_category=tarsp_category ) - yield obj - obj.delete() + return obj @pytest.fixture @@ -46,13 +93,12 @@ def stap_category(db): name='STAP', zc_embeddings=False, levels=['Complexiteit', 'Grammaticale fout'], marking_postcodes=['[+ G]', '[+ VU]']) - yield obj - obj.delete() + return obj @pytest.fixture def asta_category(db): - obj = MethodCategory.objects.create( + return MethodCategory.objects.create( name='ASTA', zc_embeddings=False, levels=[ "Samplegrootte", "MLU", @@ -60,21 +106,17 @@ def asta_category(db): "Foutenanalyse", "Lemma" ], marking_postcodes=["[+ G]"]) - yield obj - obj.delete() @pytest.fixture def asta_corpus(db, admin_user, asta_method, asta_category): - obj = Corpus.objects.create( + return Corpus.objects.create( user=admin_user, name='asta_test_corpus', status='created', default_method=asta_method, method_category=asta_category ) - yield obj - obj.delete() @pytest.fixture @@ -84,14 +126,13 @@ def method_dir(): @pytest.fixture def tarsp_method(db, tarsp_category, method_dir): - file = glob.glob(f'{method_dir}/TARSP Index Current.xlsx')[0] + file = glob.glob(f'{method_dir}/TARSP_Index_Current.xlsx')[0] with open(file, 'rb') as f: wrapped_file = File(f) instance = AssessmentMethod( name='tarsp_test_method', category=tarsp_category) instance.content.save(op.basename(file), wrapped_file) - yield instance - instance.delete() + return instance @pytest.fixture @@ -102,14 +143,23 @@ def asta_method(db, asta_category, method_dir): instance = AssessmentMethod( name='asta_test_method', category=asta_category) instance.content.save(op.basename(file), wrapped_file) - yield instance - instance.delete() + return instance + + +@pytest.fixture(autouse=True) +def asta_transcripts(db, asta_corpus, testfiles_dir): + return _make_method_transcripts(asta_corpus, testfiles_dir) + + +@pytest.fixture(autouse=True) +def tarsp_transcripts(db, tarsp_corpus, testfiles_dir): + return _make_method_transcripts(tarsp_corpus, testfiles_dir) @pytest.fixture -def single_utt_allresults(cha_testfiles_dir): +def single_utt_allresults(testfiles_dir): parsed = etree.parse( - op.join(cha_testfiles_dir, 'single_utt', 'single_utt_corrected.xml')) + op.join(testfiles_dir, 'ASTA', 'single_utt', 'single_utt_corrected.xml')) utts = parsed.xpath('alpino_ds') return AllResults( @@ -137,5 +187,9 @@ def single_utt_allresults(cha_testfiles_dir): allutts={1: ['ja', 'uh', 'ik', 'vind', 'het', 'beetje', 'moeilijk', 'om', 'het', 'goed', 'te', 'vertellen', 'want', 'ik', 'heb', 'een', 'ongeluk', 'gehad']} - ) + + +@pytest.fixture +def all_transcripts(asta_transcripts, tarsp_transcripts): + return Transcript.objects.all() diff --git a/backend/parse/tests/parse_tests.py b/backend/parse/tests/parse_tests.py index ff214659..d24dd566 100644 --- a/backend/parse/tests/parse_tests.py +++ b/backend/parse/tests/parse_tests.py @@ -4,8 +4,8 @@ from lxml import etree -def test_c2a_parse(cha_testfiles_dir, tmp_path): - infile = op.join(cha_testfiles_dir, 'single_utt', 'single_utt.cha') +def test_c2a_parse(testfiles_dir, tmp_path): + infile = op.join(testfiles_dir, 'ASTA', 'single_utt', 'single_utt.cha') outfile = op.join(tmp_path, 'single_utt.xml') parses = corpus2alpino_parse(infile, outfile, in_memory=True) parsed = next(parses) diff --git a/backend/test_files/single_utt/single_utt.cha b/backend/test_files/ASTA/single_utt/single_utt.cha similarity index 100% rename from backend/test_files/single_utt/single_utt.cha rename to backend/test_files/ASTA/single_utt/single_utt.cha diff --git a/backend/test_files/single_utt/single_utt.xml b/backend/test_files/ASTA/single_utt/single_utt.xml similarity index 100% rename from backend/test_files/single_utt/single_utt.xml rename to backend/test_files/ASTA/single_utt/single_utt.xml diff --git a/backend/test_files/ASTA/single_utt/single_utt_annotated.cha b/backend/test_files/ASTA/single_utt/single_utt_annotated.cha new file mode 100644 index 00000000..c4ef3cc1 --- /dev/null +++ b/backend/test_files/ASTA/single_utt/single_utt_annotated.cha @@ -0,0 +1,12 @@ +@UTF8 +@Begin +@Languages: nld +@Participants: PMA pma Other, INV inv Other +@ID: nld||PMA|||||Other||| +@ID: nld||INV|||||Other||| +@Comment: ##META text samplenaam = ASTA-16 +*INV: Kun u mij eens wat vertellen waarom u hier bent wat is er gebeurd +*PMA: ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad +%xsid: 1 +%xsyn: X, X, K, PV, N, lemma, A, BIJZIN, LEX, lemma, BIJZIN, PV, N, lemma, LEX, lemma +@End \ No newline at end of file diff --git a/backend/test_files/single_utt/single_utt_corrected.xml b/backend/test_files/ASTA/single_utt/single_utt_corrected.xml similarity index 100% rename from backend/test_files/single_utt/single_utt_corrected.xml rename to backend/test_files/ASTA/single_utt/single_utt_corrected.xml diff --git a/backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle.cha b/backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle.cha new file mode 100644 index 00000000..774e30c9 --- /dev/null +++ b/backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle.cha @@ -0,0 +1,11 @@ +@UTF8 +@Begin +@Languages: nld +@Participants: PMA pma Other, INV inv Other +@ID: nld||PMA|||||Other||| +@ID: nld||INV|||||Other||| +@Comment: ##META text samplenaam = ASTA-16 + +*INV: Kun u mij eens wat vertellen waarom u hier bent wat is er gebeurd +*PMA: ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad +%xsid: 1 diff --git a/backend/test_files/single_utt/single_utt_newstyle.xml b/backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle.xml similarity index 100% rename from backend/test_files/single_utt/single_utt_newstyle.xml rename to backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle.xml diff --git a/backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle_annotated.cha b/backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle_annotated.cha new file mode 100644 index 00000000..8d83a18c --- /dev/null +++ b/backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle_annotated.cha @@ -0,0 +1,12 @@ +@UTF8 +@Begin +@Languages: nld +@Participants: PMA pma Other, INV inv Other +@ID: nld||PMA|||||Other||| +@ID: nld||INV|||||Other||| +@Comment: ##META text samplenaam = ASTA-16 +*INV: Kun u mij eens wat vertellen waarom u hier bent wat is er gebeurd +*PMA: ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad +%xsid: 1 +%xsyn: X, X, K, PV, N, lemma, A, BIJZIN, LEX, lemma, BIJZIN, PV, N, lemma, LEX, lemma +@End diff --git a/backend/test_files/single_utt/single_utt_newstyle_corrected.xml b/backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle_corrected.xml similarity index 100% rename from backend/test_files/single_utt/single_utt_newstyle_corrected.xml rename to backend/test_files/ASTA/single_utt_newstyle/single_utt_newstyle_corrected.xml diff --git a/backend/test_files/TARSP/Tarsp_01/Tarsp_01.cha b/backend/test_files/TARSP/Tarsp_01/Tarsp_01.cha new file mode 100644 index 00000000..8229b0b4 --- /dev/null +++ b/backend/test_files/TARSP/Tarsp_01/Tarsp_01.cha @@ -0,0 +1,88 @@ +@UTF8 +@Begin +@Languages: nld +@Participants: CHI chi Target_Child +@ID: nld||CHI|4;6|male|||Target_Child||| +@Comment: ##META text title = Tarsp_01 + +*CHI: allemaal varkens zit erin. +%xsid: 1 +*CHI: [/] die kan je de varken doen. +%xsid: 2 +*CHI: dit is een touw. +%xsid: 3 +*CHI: naar boven gaat. +%xsid: 4 +*CHI: al bijna. +%xsid: 5 +*CHI: hij wil naar boven. +%xsid: 6 +*CHI: is helemaal veilig in [: bij] die varken. +%xsid: 7 +*CHI: die open moet. +%xsid: 8 +*CHI: hij wil niet buiten. +%xsid: 9 +*CHI: emmer mee voor de varkens en voor de poesjes. +%xsid: 10 +*CHI: water en melk. +%xsid: 11 +*CHI: hij moet wel een beetje wachten. +%xsid: 12 +*CHI: in de kooi. +%xsid: 13 +*CHI: dat mag niet. +%xsid: 14 +*CHI: hij mag niet op de dak. +%xsid: 15 +*CHI: dat is gevaarlijk. +%xsid: 16 +*CHI: [//] ik wil kippen gebruiken. +%xsid: 17 +*CHI: ik pak alle varken hier gebruiken. +%xsid: 18 +*CHI: naar boven. +%xsid: 19 +*CHI: maar eigenlijk mag niet mensen opeten van deze hè? +%xsid: 20 +*CHI: en poes gaat ook eten. +%xsid: 21 +*CHI: heel vies. +%xsid: 22 +*CHI: hij vindt ook dit lekker hè? +%xsid: 23 +*CHI: hij gaat op de t(r)actor rijden. +%xsid: 24 +*CHI: ik ga de deur openmaken. +%xsid: 25 +*CHI: en hij gaat in de auto hè? +%xsid: 26 +*CHI: in deze. +%xsid: 27 +*CHI: alleen mensen. +%xsid: 28 +*CHI: hij mag gewoon op [: erop] staan. +%xsid: 29 +*CHI: hier kan ook hè? +%xsid: 30 +*CHI: mensen gaat op de bank. +%xsid: 31 +*CHI: dit is een kooi. +%xsid: 32 +*CHI: kijk, die kippen hier staat. +%xsid: 33 +*CHI: &oh &ja hier moeten ook nog. +%xsid: 34 +*CHI: dieren moeten nog. +%xsid: 35 +*CHI: wij gaan een hele grote kooi maken. +%xsid: 36 +*CHI: nog een hè? +%xsid: 37 +*CHI: konijntje vinden. +%xsid: 38 +*CHI: ik zie nog een muis. +%xsid: 39 +*CHI: waar is de ketting? +%xsid: 40 +@End diff --git a/backend/test_files/TARSP/Tarsp_01/Tarsp_01.xml b/backend/test_files/TARSP/Tarsp_01/Tarsp_01.xml new file mode 100644 index 00000000..991bbdec --- /dev/null +++ b/backend/test_files/TARSP/Tarsp_01/Tarsp_01.xml @@ -0,0 +1,1623 @@ + + + + + + + + + + + + + + + + + allemaal varkens zit erin . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + die kan je de varken doen . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dit is een touw . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + naar boven gaat . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + al bijna . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij wil naar boven . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + is helemaal veilig bij die varken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + die open moet . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij wil niet buiten . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + emmer mee voor de varkens en voor de poesjes . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + water en melk . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij moet wel een beetje wachten . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + in de kooi . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dat mag niet . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij mag niet op de dak . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dat is gevaarlijk . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ik wil kippen gebruiken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ik pak alle varken hier gebruiken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + naar boven . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + maar eigenlijk mag niet mensen opeten van deze hè ? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + en poes gaat ook eten . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + heel vies . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij vindt ook dit lekker hè ? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij gaat op de tractor rijden . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ik ga de deur openmaken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + en hij gaat in de auto hè ? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + in deze . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alleen mensen . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij mag gewoon erop staan . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hier kan ook hè ? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mensen gaat op de bank . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dit is een kooi . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hier moeten ook nog . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dieren moeten nog . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wij gaan een hele grote kooi maken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + nog een hè ? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + konijntje vinden . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ik zie nog een muis . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + waar is de ketting ? + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/test_files/TARSP/Tarsp_01/Tarsp_01_corrected.xml b/backend/test_files/TARSP/Tarsp_01/Tarsp_01_corrected.xml new file mode 100644 index 00000000..ac457eb2 --- /dev/null +++ b/backend/test_files/TARSP/Tarsp_01/Tarsp_01_corrected.xml @@ -0,0 +1,1598 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + allemaal varkens zit erin . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + die kan je de varken doen . + Q#ng1715850550|die kan je het varken doen .|1|1|-2.7428569551999997 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dit is een touw . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + naar boven gaat . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + al bijna . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij wil naar boven . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + is helemaal veilig in die varken . + Q#ng1715850559|is helemaal veilig bij dat varken .|1|1|-0.0074853642100013995 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + die open moet . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij wil niet buiten . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + emmer mee voor de varkens en voor de poesjes . + Q#ng1715850566|teil mee voor de varkens en voor de poesjes .|1|1|5.285930228190001 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + water en melk . + Q#ng1715850570|gas en teil .|1|1|2.39488040561 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij moet wel een beetje wachten . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + in de kooi . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dat mag niet . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij mag niet op de dak . + Q#ng1715850580|hij mag niet op het dak .|1|1|-0.8688523925899988 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dat is gevaarlijk . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ik wil kippen gebruiken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ik pak alle varken hier gebruiken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + naar boven . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + maar eigenlijk mag niet mensen opeten van deze hè ? + Q#ng1715850588|maar eigenlijk mag niet mensen opeten van hem ?|1|1|7.127717778499996 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + en poes gaat ook eten . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + heel vies . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij vindt ook dit lekker hè ? + Q#ng1715850592|hij vindt ook dit lekker ?|1|1|-3.1309373137299996 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij gaat op de tactor rijden . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ik ga de deur openmaken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + en hij gaat in de auto hè ? + Q#ng1715850598|en hij gaat in de auto ?|1|1|1.2284217131699997 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + in deze . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alleen mensen . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hij mag gewoon op staan . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hier kan ook hè ? + Q#ng1715850607|hier kan ook ?|1|2|2.6255676388799998 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mensen gaat op de bank . + Q#ng1715850609|mensen gaan op de bank .|1|1|1.4615825426199986 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dit is een kooi . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hier moeten ook nog . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dieren moeten nog . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wij gaan een hele grote kooi maken . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + nog een hè ? + Q#ng1715850619|nog een ?|1|1|3.76477465811 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + konijntje vinden . + Q#ng1715850621|ik wil konijntje vinden .|1|1|-3.36029476564 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ik zie nog een muis . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + waar is de ketting ? \ No newline at end of file diff --git a/backend/test_files/sample_1.cha b/backend/test_files/sample_1.cha deleted file mode 100644 index 91f0663f..00000000 --- a/backend/test_files/sample_1.cha +++ /dev/null @@ -1,30 +0,0 @@ -@UTF8 -@Begin -@Languages: nld -@Participants: CHI Target_Child, THE Therapist Investigator, UNK Other -@ID: nld||CHI|||||Target_Child||IDCode=123, Measurement=456| -@ID: nld||THE|||||Investigator||| -@ID: nld||UNK|||||Other||| -*THE: wat gebeurt er nu? -*CHI: NAAM1 fietst niet meer… -%xlit: oh, hij fietst niet meer -%com: algemene opmerking -*THE: nee die fietst niet meer -*CHI: je moet eerst je moet er eventjes erop zetten -*THE: ja het het wil er maar weer op -*CHI: dan ga ik dit eventjes maken -*THE: doe dat maar -*CHI: ik kon daar niet op -*THE: oh wat is hek -*CHI: hij kan niet meer -*THE: wat is er aan de hand -*CHI: hij kan niet meer daar heeft -*THE: oh nee dit gaat problemen geven -*CHI: dus uhm dieren door lopen -*THE: we moeten het hek repareren -*CHI: ja deze pot nergens meer op -*THE: ik het -*CHI: dan zitten we deze eventjes aan de kant -*THE: of we gebruiken er één van de staat -%com: sdsdsfd -@End diff --git a/backend/test_files/sample_1.xml b/backend/test_files/sample_1.xml deleted file mode 100644 index ef1a5f1e..00000000 --- a/backend/test_files/sample_1.xml +++ /dev/null @@ -1,740 +0,0 @@ - - - - - - - - - - - - - - - wat gebeurt er nu ? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hij fietst niet meer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - je moet eerst je moet er eventjes erop zetten - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dan ga ik dit eventjes maken - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - doe dat maar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ik kon daar niet op - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hij kan niet meer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wat is er aan de hand - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hij kan niet meer daar heeft unk - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dus uhm dieren door lopen - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - we moeten het hek repareren - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ik het - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dan zitten we deze eventjes aan de kant - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - of we gebruiken er één van de staat - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/backend/test_files/sample_16.cha b/backend/test_files/sample_16.cha deleted file mode 100644 index 4a85532f..00000000 --- a/backend/test_files/sample_16.cha +++ /dev/null @@ -1,125 +0,0 @@ -@UTF8 -@Begin -@Languages: nld -@Participants: PMA pma Other, INV inv Other -@ID: nld||PMA|||||Other||| -@ID: nld||INV|||||Other||| -@Comment: ##META text samplenaam = ASTA-16 - -*INV: Kun u mij eens wat vertellen waarom u hier bent wat is er gebeurd -*PMA: ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad -%xsid: 1 -*PMA: en daarvan weet ik niks -%xsid: 2 -*INV: oke -*PMA: ik heb zes weken weet ik helemaal niets -%xsid: 3 -*PMA: en uh nu krijg ik te horen -%xsid: 4 -*PMA: en dat vind ik wel lastig -%xsid: 5 -*PMA: en verder ja het gaat redelijk denk ik -%xsid: 6 -*INV: en bent u hier al een tijdje -*PMA: oh ja sorry ja ik ben eerst uh naar een ziekenhuis geweest een aantal weken -%xsid: 7 -*PMA: toen een aantal weken in een een iets van zorg -%xsid: 8 -*PMA: ik weet niet uh in uh(.) -%xsid: 9 -*PMA: uh buiten Breda -%xsid: 10 -%xano: 10|PLAATS1|Breda -*INV: oke -*PMA: niet zo ver denk ik -%xsid: 11 -*PMA: ik weet niet -%xsid: 12 -*PMA: en en toen ik zo ver weer was ben ik naar hier gekomen -%xsid: 13 -*PMA: dat heet de uh Rijnstate -%xsid: 14 -%xano: 15|ZORGINSTELLING1|Rijnstate -*INV: ga ik nu een ander uh vraag stellen wat was uw beroep -*PMA: uh (..) chirurgh -%xsid: 15 -%xano: 8|BEROEP1|chirurgh -*INV: oke kunt u daar wat meer over vertellen -*PMA: ja is heel erg leuk ja -%xsid: 16 -*PMA: kinderen in de groep van tien tot twaalf -%xsid: 17 -*PMA: en ze zijn de leeftijd is van nul tot bijna drie -%xsid: 18 -*INV: ja -*PMA: en als ze ouder worden dan gaan ze naar de andere groep -%xsid: 19 -*INV: ja -*PMA: en is ook leuk kon kinderen zo gezellig zo lief zo fijn ja -%xsid: 20 -*PMA: ja en ook ouders heel goed contact -%xsid: 21 -*PMA: ki kinderen worden gebracht -%xsid: 22 -*PMA: en uh dan is het contact goed met de ouders -%xsid: 23 -*PMA: en ook eind van de middag weer opgehaald -%xsid: 24 -*INV: ja -*PMA: en kinderen zijn ja fijn lief -%xsid: 25 -*PMA: en voelen zich wel uh voelen zich wel gelukkig bij ons -%xsid: 26 -*PMA: spelen graag -%xsid: 27 -*INV: en hoeveel uur werkt u -*PMA: oo uh uh ik werk drie dagen -%xsid: 28 -*INV: lange dagen denk ik -*PMA: ja ik begin ik om uh half acht tot ik denk tot zes uur ja -%xsid: 29 -*INV: ja oke en heeft u ook in uw leven ander werk gehad -*PMA: ja toevallig hierachter -%xsid: 30 -*PMA: uh kinderen met beperking -%xsid: 31 -*PMA: dat was dicht bij de Rijnstate -%xsid: 32 -%xano: 21|WERKINSTELLING1|Rijnstate -*INV: ja ja en dat was ook een dagopvang -*PMA: (.) ja (.) ja ik weet het niet -%xsid: 33 -%xpct: 0|#|(.), 7|#|(.) -*PMA: dat is jammer van nu op dit moment -%xsid: 34 -*PMA: ik ik herken het -%xsid: 35 -*PMA: wauw daar ben ik veel geweest -%xsid: 36 -*PMA: ook hier de uh -%xsid: 37 -*PMA: dat heb ik net nog gelezen (..) -%xsid: 38 -*PMA: Vogellanden -%xsid: 39 -%xano: 0|WERKINSTELLING2|Vogellanden -*INV: ja -*PMA: veel geweest voor uh -%xsid: 40 -*PMA: past bij mijn werk nu -%xsid: 41 -*PMA: ja uh net gekoppeld -%xsid: 42 -*INV: ja -*PMA: ik weet -%xsid: 43 -*PMA: dus maar ben ik veel geweest maar ook als ik hier uh -%xsid: 44 -*INV: ja oke kunt u mij wat vertellen over uw hobbies -*PMA: oo (..) uh ja uh uh (..) ik zing met uh oudere mensen uh -%xsid: 45 -*PMA: ik uh (..) uh ik doe uh boekjes voor uh club geloof ik uh -%xsid: 46 -*PMA: en uh (...) uh (.) uh sorry -%xsid: 47 -@End diff --git a/backend/test_files/sample_16.docx b/backend/test_files/sample_16.docx deleted file mode 100644 index 6e7270e848d58aa96580fad1bb96bb0c5370d589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20073 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
    Z$vo(t}r9x)mU0j><^VC;OKo@Ewe!5)ogW|l{N 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Kun u mij eens wat vertellen waarom u hier bent wat is er gebeurd - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja uh ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad - Q#ng1699535914|ik vind het beetje moeilijk om het goed te vertellen want ik heb een ongeluk gehad|1|1|-12.662841177789993 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en daarvan weet ik niks - - - - - oke - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ik heb zes weken weet ik helemaal niets - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en uh nu krijg ik te horen - Q#ng1699535921|en nu krijg ik te horen|1|1|0.1923325752099997 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en dat vind ik wel lastig - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en verder ja het gaat redelijk denk ik - Q#ng1699535923|en verder het gaat redelijk denk ik|1|2|3.4648723212599988 - - - - - - - - - - - - - - - - - - - en bent u hier al een tijdje - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - oh ja sorry ja ik ben eerst uh naar een ziekenhuis geweest een aantal weken - Q#ng1699535924|ik ben eerst naar een ziekenhuis geweest een aantal weken|1|1|-8.04287764489 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - toen een aantal weken in een een iets van zorg - Q#ng1699535925|toen een aantal weken in een iets van zorg|1|2|2.6670418012899995 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ik weet niet uh in uh( . ) - Q#ng1699535927|ik weet niet in uh( . )|1|1|-1.5799665774000007 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uh buiten is Breda - Q#ng1699535929|buiten is Breda|1|1|1.046710481759999 - - - - - - - oke - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - niet zo ver denk ik - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ik weet niet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en en toen ik zo ver weer was ben ik naar hier gekomen - Q#ng1699535933|en toen ik zo ver weer was ben ik naar hier gekomen|1|1|-6.924020875550005 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dat heet de uh Rijnstate - Q#ng1699535934|dat heet de Rijnstaten|1|1|-0.4477186049599994 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ga ik nu een ander uh vraag stellen wat was uw beroep - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uh chirurgh - Q#ng1699535937|chirurgh|1|1|0.5886019999999997 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja is heel erg leuk ja - Q#ng1699535938|is heel erg leuk|1|1|-4.78336550295 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - kinderen in de groep van tien tot twaalf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en ze zijn de leeftijd is van nul tot bijna drie - - - - - ja - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en als ze ouder worden dan gaan ze naar de andere groep - - - - - ja - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en is ook leuk kon kinderen zo gezellig zo lief zo fijn ja - Q#ng1699535947|en is ook leuk kon kinderen zo gezellig zo lief zo fijn|1|2|5.555597863169984 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja en ook ouders heel goed contact - Q#ng1699535949|en ook ouders heel goed contact|1|1|2.6244477218799966 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ki kinderen worden gebracht - Q#ng1699535951|kinderen worden gebracht|1|1|-1.4226060098999993 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en uh dan is het contact goed met de ouders - Q#ng1699535952|en dan is het contact goed met de ouders|1|1|3.835047491639995 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en ook eind van de middag weer opgehaald - - - - - ja - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en kinderen zijn ja fijn lief - Q#ng1699535956|en kinderen zijn fijn lief|1|1|3.3756422091800005 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en voelen zich wel uh voelen zich wel gelukkig bij ons - Q#ng1699535957|en voelen zich wel gelukkig bij ons|1|1|-0.11310258963000253 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - spelen graag - - - - - - - - - - - - - - - - - - en hoeveel uur werkt u - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - oo uh uh ik werk drie dagen - Q#ng1699535960|ik werk drie dagen|1|1|-0.06668924663999931 - - - - - - - - - - - lange dagen denk ik - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja ik begin ik om uh half acht tot ik denk tot zes uur ja - Q#ng1699535961|ik begin ik om half acht tot ik denk tot zes uur|1|2|4.776017459679991 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja toevallig hierachter - Q#ng1699535963|toevallig hierachter|1|1|3.1740006442599995 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uh kinderen met beperking - Q#ng1699535964|kinderen met beperking|1|1|2.85980687515 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dat was dicht bij de Rijnstate - Q#ng1699535965|dat was dicht bij de Rijnstaten|1|1|-3.961170843459999 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja ja ik weet het niet - Q#ng1699535970|ik weet het niet|1|1|-3.1934260798 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dat is jammer van nu op dit moment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ik ik herken het - Q#ng1699535973|ik herken het|1|1|0.3249225631100008 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wauw daar ben ik veel geweest - Q#ng1699535974|daar ben ik veel geweest|1|1|-5.353241436460001 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ook hier de uh - Q#ng1699535975|ook hier de|1|2|0.2363647608900002 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dat heb ik net nog gelezen - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Vogellanden - - - - - ja - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - veel geweest voor uh - Q#ng1699535978|veel geweest voor|1|1|6.287694428459999 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - past bij mijn werk nu - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja uh net gekoppeld - Q#ng1699535981|net gekoppeld|1|1|3.64780386377 - - - - - - - ja - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ik weet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dus maar ben ik veel geweest maar ook als ik hier uh - Q#ng1699535983|dus maar ben ik veel geweest maar ook als ik hier|1|1|0.8965879978199991 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - oo uh ja uh uh ik zing met uh oudere mensen uh - Q#ng1699535984|ik zing met oudere mensen|1|1|-0.19140639580999919 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en uh uh uh sorry - Q#ng1699535986|en|1|1|0.0 - - \ No newline at end of file diff --git a/backend/test_files/sample_16_SAF.xlsx b/backend/test_files/sample_16_SAF.xlsx deleted file mode 100644 index 671a99e37dce4cb4a4188f3d85f6ce84f83d8697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27385 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 a@?WQ!sv`0|+XM%Pet(JHCnt+vp#LA^lk)8V diff --git a/backend/test_files/sample_5.cha b/backend/test_files/sample_5.cha deleted file mode 100644 index d7f263f8..00000000 --- a/backend/test_files/sample_5.cha +++ /dev/null @@ -1,84 +0,0 @@ -@UTF8 -@Begin -@Languages: nld -@Participants: CHI chi Target_Child -@ID: nld||CHI|5;8|female|||Target_Child||| -@Comment: ##META text title = Tarsp_05 - -*CHI: neerzetten. -%xsid: 1 -*CHI: en dit ook. -%xsid: 2 -*CHI: die moet hieraan. -%xsid: 3 -*CHI: ja kan no(g) een dingetje d(e)raan. -%xsid: 4 -*CHI: deed ik. -%xsid: 5 -*CHI: die moet ook nog ergens. -%xsid: 6 -*CHI: effe kijken waar. -%xsid: 7 -*CHI: &hoo hij kom(t). -%xsid: 8 -*CHI: wat i(s) dit? -%xsid: 9 -*CHI: &oo hij fiet(st) niet meer. -%xsid: 10 -*CHI: je moet dan effjes erop zetten. -%xsid: 11 -*CHI: dan ga ik dit effjes maken. -%xsid: 12 -*CHI: die kan daar niet op. -%xsid: 13 -*CHI: hij kan nie(t) meer. -%xsid: 14 -*CHI: hij kan &nie nie(t) meer daarheen (s)chuiven. -%xsid: 15 -*CHI: ander(s) kaat [: gaan] te [: de] tiern [: dieren] door 't hek lopen. -%xsid: 16 -*CHI: da(n) passen d(e)r niet aan. -%xsid: 17 -*CHI: paar. -%xsid: 18 -*CHI: ja &de &de deze past nerke [: nergens] meer op. -%xsid: 19 -*CHI: dan zetten we deze effje aan de kant. -%xsid: 20 -*CHI: dingetje. -%xsid: 21 -*CHI: ja kij(k) hier hebben wij heel veel. -%xsid: 22 -*CHI: fftje [: eventjes] passen? -%xsid: 23 -*CHI: klik. -%xsid: 24 -*CHI: kan wel. -%xsid: 25 -*CHI: maar deze kan er niet op. -%xsid: 26 -*CHI: &uhh wat i(s) dit ook alweer? -%xsid: 27 -*CHI: ja trarpje [: trappetje]. -%xsid: 28 -*CHI: wat i(s) dit? -%xsid: 29 -*CHI: &oeps de parasel [: parasol]. -%xsid: 30 -*CHI: (i)k wee(t) nie(t) wat dit is. -%xsid: 31 -*CHI: nee wee [: alleen] maar wortjes [: worstjes]. -%xsid: 32 -*CHI: kijk hier zit een wortje [: worstje] in. -%xsid: 33 -*CHI: wat taat [: staat] hierop? -%xsid: 34 -*CHI: hele kleine letter. -%xsid: 35 -*CHI: nee dat wat [//] hij verkoopt. -%xsid: 36 -*CHI: die kan d(e)r op weer. -%xsid: 37 -*CHI: hoop ik. -%xsid: 38 -@End diff --git a/backend/test_files/sample_5.docx b/backend/test_files/sample_5.docx deleted file mode 100644 index e24e9c981ab9c2440c99160e5f77ec8eb5e897f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13985 zcmeIZ1$P~}(k{GBu^ltT6f-k3Gcz+gW@dH_F*7s7%*@Qp95XXRV!C_g+_^I+=X~EE zc;8-YYb{CrRBNlNx}>K{@={>nsDKXuC;$LJ0NDIKYo!SS0N_Ia04M+`P%R-_8z&PR zCp~3%I}=A8S~qJe{5)__@*Dst@c#e3{s+%MeZrVcFFm5jW8yD_*d`Ujqr6f|&~V-) z8pUHs3{Ozi*SMkfw@wsL1r?Ckk5+^vOphB(s)GSDt7%ryNDZzer|3LM{_(ozY*Z^t zdo;ern55eY^cw;rtbSI^?H!oXtRVD64SjJFN+0Di@-qU^)Sm!Rl!?)*#2%4MxPdR9 zn6@4}Ho%fMNbD%&8X&RZb#stm;%k>!ylun@F^pFn=hVL>N(buKqlTV%9nWVccqPln zIIIOY;#@^xVeqBMt3^ScIpH}mD^Lv&5*E4|l!RA#DQmm8RDY+IUHiOsr&2&t|7(>- zm<}X%@<&=;g?jFK);l?5VI)X9x5(}q4gy8&78Zc(P&N=vny*UqdaNDgd)|-G6s%@$ zQOkAcSTnF(_lK#2<<*R^@00d-Am;hIe1jWRRuz-xTL6aRIbWT0@x?DwkoVR({5Zo0 zYtPnCU;x1TI~YLz-%JuW7OUwJsAsZ3i-Q50q@II`l_MSPALaj=;{Ra#`^R4|kL$7M zqle|c40sKg=}=hh!N`}TGn!t*Sb>Dnl8{DOTeetwd*xnU2Guz>5F4AFi=Xyz%n)_n zO3=B&N>YIf>wsSTsoSUZ-0lWQ3~Dc6a9gz7flWVnFnt{*lAst32-iRho5K1K`xKHg z(T%cCDg3Zs1Y=G}F*R>QT$i6^ud?)*;=`1a%CN9#A+F^KS;`~Q8I039iRtsvl&>b4 zi6$nxccWIPU-=}ynK9CW;+`7Iik^-nBi69|Bi2>>%!x;SSJ6Od5H)lzbST}km#H?g z=G$S|0VW^oC4ol0-nK1vhK|53&@ug|eJmQ+Dck`kg8^tgp8-%HuC@-wbpJ9EV_PF< zYoPb~!)^U#Fd#tR1(fqY`zntc11b#g+a2^4km60lh5bah&pFU7P9&bB&nyEXo;nKs<`5@?4^HE5WV05J0q4vpmJ2#E8|` z($%%fnzoRYn!ooK&SO`cX86{SV9fcM*@QPoiY_ub;DC8h^@FvpbGSp|p(~>-rhFFt zK&2|8>pe?|1?&@Eqix#8RsfqV7$>h10iWG_#P~70q&kk4F+@DQlyJ{X?OlWNw+~(S(i?2)*S6yBi`U;b&6xN#%%6&6jetPN_6%SIe{Fn$4}r==0CMY z6v<}y@go3$><<7S0hQrTt@)?EoayK|t~O(J@-aQ*aXU@gILzqdd%5HaAs-!!d|^y? zdN3rb%hv~iZ`_Yfte!ZF=8LlqGqKWWw927iBf;pxn|1rOC82s z#6tIw37CY%EUd#=?A(yse6&at^D_d#aM-Cof9O~pnxT9D>CHnweYO$|KU4g12)lfJ zrMi*0A7}n_!wTAZOK152mIz^DWB_)>nK?V1NnMY~YChdV=<(fwAx&T^|Dn?V7PMWn zcyePQSo>%i?+|LuZ@S7&p$SBnr|q)D1s(Brre69c@??<8fH7sqv@O;Olt!SF!r>RyEc8%j5rBS||p^Hm(SaHgq%=1nNfw0tcU2Ln9( zkYs+RnO$wRX{x*j)x2jdN}BO|#Wys)Cr-E~1ZXa&hgFW41`Ds%dMMWXyjV{jc~vL6 z!plR7SC_{g)mK_b1(b3qs6b?W{cy(_X`i3X7gv*0kA0q=Uh*E^+-7uMD1?zFM?WXp z*`nO-m}|0*Srk8Wf)8jqUhVhLM zjxJJ2KXxETwQD^ce4RMl5_b{$T1Q`>tfwHS1AzxKfFKLGZ*{(HU4o9H{DqDrP-V~u z@lsnhD0#G3Q#jKKb)%yV@BP}`p~}0X>)p#yjlLlWe-p9?InzSUY_6$<#g4My_^VQT zTc=WPaG-1?KUYv1+_@eBrpN|_Li5|^7qkZxYz*?Bkm@G!JI5H-<+RS0bcJ#I@oCe$^Ww{0KoQFKSU zCyGS~@(}m9k!U{i_U(li*Y18H60a|SW&nsN2^k{x8D8=4b-lQcOkui%4)nyYkF9=W zPYV!++phK^g{uy#pLEp7q>%BOo>}IFAeNJ7+DixB4cN>|JJ>M zTr*XUinF{Dq&x57jw{lKPaXLu$n+c)7>{S@WmUHepD~2GdZt~hMxI+xauIuIsignd ztkJH-m~3GMdkN$U zfrG*@#VF>fcE@W`t@@E*30_ zXL#}CgrWU!nJv)aHkKEG0=$Wy91bl9^5`tsy(eWEM8x)`PrMQt5HY)-&De?LX8qRs z=BEHrSV6lekz^Rz{GUkdSAXG%Rwi}S-K%OWbJtWS_^%G@`l}c&ftnqRZc;zj9GL_x zOi7e4hN|x)mhGTPHA0vG`~nPNL*=>-`YmYHMHAGZ#>T=7O4!mo$T}Z&NvZ4LpbSze zXrZMz)k;1mX?)mY>WG&iJT5`xcr2o}C07}e6HA&1&DW3>f8aG(oiHD^@dZ_%1Nq+B zs*O~yWLUOGiN4RML5^L`Z8>Ive^vLDFM)O?6)LvYUaSjC&Vfy&IdS-yJDVnZB0017 z7AY6aQ*|!-6B;WV<%s$|AiZ(_Qts&ExT?UW?L|S)lg}4Xd1A%9jh2ik6W8?KbdG$G zd!jDX5uXeSlpp*2xOB;#xETndidw<$ z+c()yqTD8@B)E(33k{j!0;?a^CQBt-+oYOjsUOao%GZ0tv04Vh?j&2rYx2@beXyuN z?MG^QL-5LEhSICKcM?ns{rV!vkAtuUL!b14yGDdHLv)6-UG7&5#*%!17Y_ zY^d17k#U)KzbK?XCYyI_3WXr35Ej}{Ws%2I(n??^LVSA}QbR421_wJ+?Rb$a5}A)W zt!-%f77mun!Yj1g;B8dUM9tS^Ns5(bt zYKpGEbuRsJY-+p{#~6o_t|_octyI9fsKT|1j!M|O5rp7`X@Eq*_fwT4Os|g5x}FbR zE`Qbm>`br51ga;gOlU<0*RzN8H>R}11_G*Pe zlQ)7wQR2&2E`CIM%1NEft+n&_?os-blpi(A%+BYC%1Eo=bs|f-?lB(r)YFp5gg2a+ z;`O-dQI`6|M@)J}*v{dP9;-)AcVn9=x<9rHaj1gUz6HB?D5A`riJlQlQja={5^AHX zG3}INT7y!0BR3~$yd@cv%;D(V;^s50%IQghxVWYO!=g*p;_I!59}c60 zmo={Fu2pwM_tlGLch0`54c~oTJt}m!g4&)yy&z+ys`OY}edJQYNmhKkg#+@9gCe|i&f0hh? z?5xf-WWur8FgnqH;r0K(i9W~lrM~{)X+?H^K}ygjF`|$a%QI>rDjMgy6v!_T6(ne` z>0y@Bge$qm58Cm)%XBS)HRvTs5-Xag)+C7;TV2rV>S)(pkHxl$*@nk;p{ zahdi(u2t|0a%PV5LnOIWPK*jGtr#q>R2MXbnog6hEWRvGOs{b3x_?Pd0!8xl%4Fta z=!*n|8XSSa^C$}=4Kq7uc`;1(wI975xWrm4n8@7|AQK7_aX9GAjH~jEegAxHKL`m4 z+X}`7>@{_50xqwww9#mHyLbB5t7=2zX$e5MX#XnOwNXX)Vh(^6;#i1~LOONTTF>Ge z`oym>v(vV8v_ScxbE~T{`10w*a*KtW%ER)h2VZ@#8Za8xNkSTFv4!adHyU=&;?;M4 z*Bs~Wv$^`^d!C~T~?az%Ih0MO>Vh00vlZTS!=4E8J=vsf_qccH& zC45s9=C8TnA7Zu$`t;GGjaqI<=?k=3+f-b)7Wb-td9;2P0&PO1R{tVHpl7KV2tdHh z3TeD8xjR9{uhM&Y`8B{~_v`BCao?sa9uKGYQ`x`?mh_NFnHrzZ{bl@A58srJ+x-(Z zR~GuU@7v7)UYD;mWEkPqev{n0$J^b$tKQq|oDocW-&QpgUpMs57ANP2CNn}ZQ%nHd zO1j49enfN{&f}CmR7z}^Rysp4Z|@J#^;@mO5nDK<&b=SnIXk`}ZbYvr>%-WQ$--{o z7JQdVb(ZC_C^tkcJYMEyPyb}!gwI_YiBrDU#Fse?5p7KyfPu+ui=67fE=qySe?KD> zNNwuMz`E1=O-Pgj2igujfVO`z=JQr=OJ&!l)v#0c`ld&o;cWynM&q-Ijc6oaP z&%!YU+O)^Gl5fL5)GDaeFYE{yAdl^Maf7j$$|r;5?=VsCykf}iv7_197GRp+BQ1W!0mk0FOO zjVsm=XTBL^5aZ|92V3&(1^uGbbyujL zHdm=xxTL5(MK<>#wAX=20yW71mZ*N!YqG_LM#*AYDObH{#;h}3n+i>1=0jW>iyif& z_C&IcAiFsik-H^%_=xbYT}gHV%pz+t)LZ^{Jd;#Te)g}Sj3Fs23=_| ziR2%Y3&Cl-5F|?ubh>+Y1u4eNSh@06W*Vv{dI$Zh&q?|!xk?fqd{I$7G14nEMx(u_<2015JRh& zMoY%x&`n4l!={FrEfeX`8>_rh)0uydEvdEf!R0Ibg;!EF{00TwXBPD`jjfW5aV#`2=K~XVAT=huO80Rr46n3 zie-zK3GKQ~8Ws@uHYI8ZSRDd%SLqc!V3429tCvb3bUQYw7pMf}Z%!)nHmwq|bQ@N$ zu`*3JPq|ZuG$*;c4z?HC8-bkme{n7%Cy%Gm-~hk|>^~?NM-wL}bDJ-Ye>j$UHLdt` zR#cx$>Gyzdu2mq8HRc(x7-p<>vW(Xc1-78ZT6Lfdan(!5cU_P8(;giPOlzh$#`c|# zb2BYJC)$S6WTR4Gdeaj3e=IM8vyqgE*Xe2a{y3ZqVnIS?LCY)ep*oESy1zKD>T2f@ z0hNNbG6bc>LR#1#B9;&!k3CGa zT=QosHJ~cnm0>PTS^T~yU7dL*LfE(#iyY0T`L%2C0za;{w#=R=aR74&)k{B;Jx0~c z`u=_4!vFL?%EAOO&^o; ztc<)*x5yhG99A1DG!T@}h~g=bXhaUD%%V{i1vDMM27M*aw`xihH;nm2Q>eVaFTnun zS!6b)0Jl;`5g^$vgp>GKyezp0I)~KLAn3`^{ms#{J94y!FV}0< z7~IlwQGBxaKncDoSCO52k39F}z+n}h1qvCilmJo9xxoPKg6ERm{Z;E8bhI@;lNrl! znu)#S%KIIlL`Dn}d2+zF)${n-uleh~Tnyvm;ip545%}J__=u9^ zVG47$K*vGb^pA?CMVLfwI0yQE{IoXs9Z+A$&<-ClRHjRPr!UUju>^Lj0(rd*q%Bm} zbV+khAp?qdJOpym&hgm@J2Tl$Q@h7@844S7s|Ko+$}1>gg$2nvPHeu$)QLi-E9R(BboFX=`r0+eGLqp z{&?j|M97ne8v65}JhppT2d%f)9NAb1#=13VBavPoe`p-^tg;T`H?H@yi88~V5l>2s zBR`qjMBJ~!)wz||SrY4v&k-{dq#iz}Dv)Zmy4Z}zaJw+-4d}D-%gZ>=(}88T@ZMM0 zDzu3v$xo_k`)ZG&6_%U#Su23@CSK@m>+>*Y?RP#CtF^xWH%m@HvAezdJ)P18v^^J&bKJbtgL!V(L?x5{o-1TjRD; zfS8TChdNo6n`ikKn<^G%aY7!-%0QK{uB(Dge@W2eW}c-16XzDp&qc!BZk7gPu@RPM zY(X5In!bBH#@ArnXXx!xG2IIxD&_4JzcOuNevXA&(@7ZGVv$Ah+$RaJ$}qBJ9MFfx z;otZ5>%8!&=Dr!-JmCG;rLl6Ai+2|=kZ=#Amy!Qk8k+*6<;n(zRwjRZzJA1STCCBd z4qiffLgqgY*2dRomME=O`1dS}9OLpU7(dg$GH^<^x4%XilLaL5JJ!IN2E=qa-p$Q? zn_PcI$gk_Tftp+_Pq9y;pj!WArB!E3cUq>EWPs>GRbN+X3K?|fbN{x!F3&RgVce{1 zV01Xmncz+(EB`D3iQTcI7S$?)jc|IlsRilnxw0#6@{X|k19PB|u7l46X@oD#01KS> z{m4kB0_*qJ7PYjHNkd2;T=PCHvw+*R4XzTz<4MtIZlZ1=LBE4G>~{yRgJSBGT9Ox- zcMc)PlAdL+RZ5I=0S zZE;bzG_8C>(`cm$QEm^(;pI=8Z0wOH9sgc=e~e>UAx?LnB*BQs^b)_qHFyH24qC7n z5!_IM@2(kKZ!s};>t$z6NkL1a^Bufm4(cmKBBcb@U4=$+9Jb{^ z6-Xv5h0yF!6o$@BoZ2UxE}NTf6jQZc!hZQi7wsiA)2S%RXMQQwXSt=Oa)%u8Vs!C15#XfE3?K#eFhM(;6px*ettzbYmb#Kfban5)`(1XdZWm1~(bAZO+)tB|^n}?}>ZFON#e1Ebl3VKDEzeD+NetzF)6>0-G zZCk)q03t9z2aK}FJJ{Me(izy<{b47-DE9vb<$x-cq10ouMi1M8u*`?i$`%$tZ3ZSf z5My{`pas)!J(VU+)@v*gGoQ1v6kUrhx8jl}7ah%fe<$8^u4P+F6kMFSUhTp91x<5b z)A|wnVcx5?)l@}#wsDp{9NVRL*k<6_^$H_nD2913Omn%};9J5=+HEoX@)&!5eS!3$ zARS7O!IaLDd627Y$AcM)-uNL^lr6M%_<3SBR&CAhuavhY^Hb$T^z8KbA|Ft!vyNEk zfu)zC)CSu7Zn95U$=}VLqIWz*UQm1Te;A>%Tp@Lb!&sw+55Qd^^*-PSD2Gy`-WxW6 z>mpvwc;+Wc?^QnKso2dpmv~?htF?e!)q)>kaVb{`6vd~2(Fr}3TPF$Lg@|j#JmbIm zgPZs(fpd|-*^Ge9NT47+*@9ju931mXWyr68! znb#nmPE+OMY+R3*pz+n?(;l{Ka?@_|w`606NAyg1E;^O0$(ur2wjA-ED0M6I?{o5` zpclsY~>@1q9Hk?sMq zq;JQQvH>|kb)0=%%vOMEi z#aUfiD!^hfP0yEqc{`MRpk`EXssoMhPAU@i5oVal172vaD=8bln&%=85eD*e9-hg*{Yuo~HX+_a8|zOdo9BV}`PD`B>n9~QtgXK4c4P9ukze)TD-yiw{N(Il{#?{3{Y3?0RRNxYxy%=?&#!hW%B1v ztvz$iVT~O*__E1j)4!l>1!gEITEZfOVoidyQieNgctu-?*w_FTSrd21E!zhqCIO#K zpr!{`Zv}Y;PvGS>zznxv&-XcX^ayeaCb#x>HSeyxT zJmv0TJejVvkLTl*@5`^JM)GW8IzqVNuqJaaUX7&vlk+zpBs%xeFg1$-rVhK@n}oz) zMm}BHwJ*7v=L3{FHHzawsQYto+dVzU-+T6i$SrCR8GNgDDEBqYcOM;TSrkkL6wAYs z9@qmPif@b)%TmyTHjb4S+Y>^qB2#g}A=$OT zW}nXQy$c;!lUpC1r3m5D+vnD^i=TM(swI}_Vnut*MXKvI6 ze;2&v)iDlAIU>nG+ZQ2FKkO~|S>!08oiMqSOo$ZkT{p1f>#>bMIz{&F+c}$BA%xbZ zMACZGrisJlLET#1E%ekw=ft?0;{;E3wU@1n0qA2oPT4zWTbsw*h>hETp+QsMCz7R9 z79JjYc?xMlysUO}KCcSt&Dv7s2~p~tx3;&kZHd z=r}i3oqAZW3|gI@k+ME|DqwZGQN-r-E`iJJm=D(Nnh&Nvxcm__jQm!|O85gd=VHh0 zN63NOc<_N+d*Fdv`PT!t48H?6WSoiXJ%+Sh2_^6%#S&=N8A5p=|21le`kNs7B%>w1eZo#fUn$R7hJDNgV9Q)4;|1 z+u0OhL}KUB9qmZlG(+RvzAp+9msDV(v{V!vNTUz>3cwmBs17$F)rI0-T+7jUlI}mNu%Aard*C^OVr% zh-2vPr#>0SN#<4)j<%^43(VBI*>!c-?3%R}_(2P%m(qAGoP>D7R6L+y24I-NsZWTi7-QnVL5)}s!nES4ZiqNK5y%T^+$_MQ-G3jR=e8uYK!CfX1Ae zz~^1}{`q;mB$0wiW@s8fr=n4s5V4X0{j$%M{T^QEkKPJ3nHBQz@b%~}CP)YRYk;(j zA~ceO9FqvCcvNoEqwO2B8nv96SrbQZ z1(ge1iTpW=;KD85(4&VCoY^P|IhgLmR90`JT}mzUkL`AgptYK>mB7midAU2ZuPjb`b~v(ET&&*X5U z{^rNEj-EO64J99g~#9qxFPxwDZF7fAG22k zi<=H?4oJZB$F0~x0%6naarB@T^QAvz8U?41MQ1GQET;m3CFm+pz?$3zQ+ z#6(k^77c=`S0DiPu!Hnrq7CjweB2d^_((w@8ie|UiwHQnb2Zv!Fh`Mpm- zh-8QY0mPp}`|Ck}j3?wjhv->j7pP#sJy}f8+g}`mY^W?Q@c+j4F9@(IFAA|O@b~DC z#-WuYL}xyrb~adhbQkvP=msTNVO*xS5eNlsGP=+}V&(-G{tWFGRm; z9NKRlor-?#+p^!xvGiWqNXSDF!*8}tvHx0>b=5hu3jIyz2b(CDfAzO#QByKR7rRZj zGw>{7Q#&7AZ^r6u*`>#1P(eLT&Oj!3Bw`^~D}F$jNhLkfn5LJ^1Kz->d3Ve^HE)T?c?dm5MB9QKMuDrl7Dsn@eq=(f9pJn`)vd~3$t&#i!dp$Yn?IDRoc82%|GF64*gTVzroEO z5a#Gyb24=8m~L2^`s|JLrw3HJyn){rol!fk^DM#y|zz5UrF0q&??vAv6HFQ)and+T0+*vuM!9lxa(O98%xo06# zxjE9X!vAVm+3I|5*<>}<(;1cATDN;}nD27W!t^}#KuqWC7Ydnq`Ex*hZCr-5-jXe~ zp@mSps>%7jX#+;?R4U$GNV8IHZ#JIN`R&*0Qz64%rRWLigh?jouk6$Dy;Y-lA!nob z>~hiLeKqY-x^i8uikC9UPV&=&Ik4wjkg24pQ@!5X!9$nfJJ5$FY$e|_xs+c`*Xfo& zvuxfoZ>7V!!fNw}&O1nqxIE|DAG&td-+}wce}(QrKxu&F)PFzA^XG2rAH{z;*&{FY z?*jh)~<9C}i(0|buzr%muH~uXEgZ!`A b`+vJgc_|2>di-(91qRRqBt}M={;2&QsGMam diff --git a/backend/test_files/sample_5.xml b/backend/test_files/sample_5.xml deleted file mode 100644 index c0cd9188..00000000 --- a/backend/test_files/sample_5.xml +++ /dev/null @@ -1,1467 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - neerzetten . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - en dit ook . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - die moet hieraan . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja kan no een dingetje draan . - Q#ng1699369360|kan nog een dingetje eraan .|1|1|2.0061761748099993 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - deed ik . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - die moet ook nog ergens . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - effe kijken waar . - Q#ng1699369366|even kijken waar .|1|1|1.877568910779999 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hij kom . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wat i dit ? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hij fiet niet meer . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - je moet dan effjes erop zetten . - Q#ng1699369374|je moet dan eventjes erop zetten .|1|1|-6.070739874989998 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dan ga ik dit effjes maken . - Q#ng1699369377|dan ga ik dit eventjes maken .|1|1|-1.0320685360200004 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - die kan daar niet op . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hij kan nie meer . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hij kan nie meer daarheen chuiven . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ander kaat te tiern door 't hek lopen . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - da passen dr niet aan . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - paar . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja deze past nerke meer op . - Q#ng1699369397|deze past nergens meer op .|1|1|-0.16345256290999877 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dan zetten we deze effje aan de kant . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dingetje . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja kij hier hebben wij heel veel . - Q#ng1699369405|kijk hier hebben wij heel veel .|1|1|-0.3288037130699988 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fftje passen ? - Q#ng1699369408|ik wil eventjes passen ?|1|1|-3.3482075462499994 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - klik . - Q#ng1699369410|teil .|1|1|1.4565085851 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - kan wel . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - maar deze kan er niet op . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wat i dit ook alweer ? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ja trarpje . - Q#ng1699369416|trappetje .|1|1|1.4565085851 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wat i dit ? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - de parasel . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - k wee nie wat dit is . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nee wee maar wortjes . - Q#ng1699369424|alleen maar worstjes .|1|1|2.2140319823 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wat taat hierop ? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hele kleine letter . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nee dat wat hij verkoopt . - Q#ng1699369432|dat wat hij verkoopt .|1|1|1.7576414638099995 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - die kan dr op weer . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hoop ik . \ No newline at end of file diff --git a/backend/test_files/sample_5_SAF.xlsx b/backend/test_files/sample_5_SAF.xlsx deleted file mode 100644 index 716dfe1a8427459386f7180ffccdac6a9b2599d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18406 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 `Assessment methods` -> `Add new` 4. Choose the following settings: - Category: `TARSP` - - File: `/backend/sastadev/methods/Tarsp index current.xlsx` (xlsx spreadsheet) + - File: `/backend/sastadev/methods/Tarsp_index_current.xlsx` (xlsx spreadsheet) 5. Repeat step 3 & 4 for STAP and ASTA From 03af295c470ace8bc5f221c579df563f7c989bdf Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Thu, 16 May 2024 16:43:28 +0200 Subject: [PATCH 16/17] Only write inform queries in CHAT output --- backend/annotations/utils.py | 7 +++++++ backend/annotations/writers/saf_chat.py | 4 +++- backend/annotations/writers/saf_xlsx.py | 9 +-------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/backend/annotations/utils.py b/backend/annotations/utils.py index fa3cd833..a2ad4fce 100644 --- a/backend/annotations/utils.py +++ b/backend/annotations/utils.py @@ -62,3 +62,10 @@ def autosize_columns(worksheet) -> None: dim_holder[get_column_letter(col)] = ColumnDimension( worksheet, min=col, max=col, auto_size=True) worksheet.column_dimensions = dim_holder + + +def cast_to_bool(value) -> bool: + if isinstance(value, bool): + return value + elif isinstance(value, str): + return value == 'yes' diff --git a/backend/annotations/writers/saf_chat.py b/backend/annotations/writers/saf_chat.py index 51ebec87..1bae72a1 100644 --- a/backend/annotations/writers/saf_chat.py +++ b/backend/annotations/writers/saf_chat.py @@ -4,6 +4,7 @@ from analysis.models import AssessmentMethod, Transcript from analysis.results.results import AllResults from chamd.chat_reader import ChatLine, ChatTier +from annotations.utils import cast_to_bool from convert.chat_reader import ChatDocument from natsort import natsorted from sastadev.sastatypes import ExactResultsDict @@ -51,7 +52,8 @@ def enrich_chat(transcript: Transcript, marked_utts = (x for x in transcript.utterances.all() if x.for_analysis) # create mapping of query_ids to items - items_mapping = {q.query_id: q.item for q in method.queries.all()} + items_mapping = { + q.query_id: q.item for q in method.queries.all() if cast_to_bool(q.inform)} results_by_word = _items_by_utt_word( allresults.exactresults, items_mapping) diff --git a/backend/annotations/writers/saf_xlsx.py b/backend/annotations/writers/saf_xlsx.py index 3a5328c4..3bdb1765 100644 --- a/backend/annotations/writers/saf_xlsx.py +++ b/backend/annotations/writers/saf_xlsx.py @@ -12,16 +12,9 @@ from sastadev.sastatypes import ExactResults from annotations.constants import (POST_WORDS_HEADERS, PRE_WORDS_HEADERS, SAF_COMMENT_LEVEL, SAF_UTT_LEVEL) -from annotations.utils import autosize_columns, format_worksheet, get_max_words, ljust +from annotations.utils import autosize_columns, cast_to_bool, format_worksheet, get_max_words, ljust from natsort import natsorted - -def cast_to_bool(value) -> bool: - if isinstance(value, bool): - return value - elif isinstance(value, str): - return value == 'yes' - @dataclass class SAFWriter(): method: Method From 2a64e672d6e8d82436a17711f129ca093d886bc1 Mon Sep 17 00:00:00 2001 From: Jelte van Boheemen Date: Thu, 16 May 2024 16:59:18 +0200 Subject: [PATCH 17/17] Ensure no empty mappings are passed in chat enrich --- backend/annotations/writers/saf_chat.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/annotations/writers/saf_chat.py b/backend/annotations/writers/saf_chat.py index 1bae72a1..f4f65aa0 100644 --- a/backend/annotations/writers/saf_chat.py +++ b/backend/annotations/writers/saf_chat.py @@ -19,7 +19,9 @@ def _items_by_utt_word(exactresults: ExactResultsDict, items_mapping: Dict) -> D for (qid, _), hits in results.items(): for (utt_id, wordno) in hits: - out[utt_id][wordno].append(items_mapping.get(qid)) + mapped = items_mapping.get(qid) + if mapped: + out[utt_id][wordno].append(mapped) return out @@ -38,7 +40,6 @@ def find_doc_line_xsid(lines: List[ChatLine], xsid: int) -> ChatLine: return None - def enrich_chat(transcript: Transcript, allresults: AllResults, method: AssessmentMethod) -> ChatDocument: