From 341f44090d397548d13d8b2e7cda63cd0f715761 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 18 Dec 2024 16:08:33 -0500 Subject: [PATCH] =?UTF-8?q?use=20target=20tokens=20instead=20of=20target?= =?UTF-8?q?=20constructs=20to=20get=20practice=20activi=E2=80=A6=20(#1274)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * use target tokens instead of target constructs to get practice activity uses * save morph construct for token parts of speech --- .../message_analytics_controller.dart | 10 ++- .../controllers/put_analytics_controller.dart | 10 +++ .../models/analytics/constructs_model.dart | 2 +- .../practice_activity_record_model.dart | 62 ++++++++++++++----- .../models/representation_content_model.dart | 35 +++++++++++ 5 files changed, 103 insertions(+), 16 deletions(-) diff --git a/lib/pangea/controllers/message_analytics_controller.dart b/lib/pangea/controllers/message_analytics_controller.dart index 87367fbfe..ec7c9dcf0 100644 --- a/lib/pangea/controllers/message_analytics_controller.dart +++ b/lib/pangea/controllers/message_analytics_controller.dart @@ -38,7 +38,15 @@ class TargetTokensAndActivityType { .where(activityType.constructFilter) .toList(); - return listEquals(activity.tgtConstructs, relevantConstructs); + final List? otherRelevantConstructs = activity + .targetTokens + ?.map((t) => t.constructs) + .expand((e) => e) + .map((c) => c.id) + .where(activityType.constructFilter) + .toList(); + + return listEquals(otherRelevantConstructs, relevantConstructs); } @override diff --git a/lib/pangea/controllers/put_analytics_controller.dart b/lib/pangea/controllers/put_analytics_controller.dart index 8ced8b76b..6e90b4a86 100644 --- a/lib/pangea/controllers/put_analytics_controller.dart +++ b/lib/pangea/controllers/put_analytics_controller.dart @@ -184,6 +184,16 @@ class PutAnalyticsController extends BaseController { // get all our grammar constructs for (final token in tokensToSave) { + uses.add( + OneConstructUse( + useType: useType, + lemma: token.pos, + form: token.text.content, + category: "POS", + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); for (final entry in token.morph.entries) { uses.add( OneConstructUse( diff --git a/lib/pangea/models/analytics/constructs_model.dart b/lib/pangea/models/analytics/constructs_model.dart index d71ff69f9..914fa3c0c 100644 --- a/lib/pangea/models/analytics/constructs_model.dart +++ b/lib/pangea/models/analytics/constructs_model.dart @@ -79,7 +79,7 @@ class OneConstructUse { required this.lemma, required this.constructType, required this.metadata, - category, + required category, required this.form, this.id, }) : _category = category ?? "other"; diff --git a/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart b/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart index d60ee3575..6f33f87c2 100644 --- a/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart +++ b/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart @@ -5,6 +5,7 @@ import 'dart:developer'; import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; +import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; @@ -153,20 +154,53 @@ class ActivityRecordResponse { List toUses( PracticeActivityModel practiceActivity, ConstructUseMetaData metadata, - ) => - practiceActivity.tgtConstructs - .map( - (construct) => OneConstructUse( - lemma: construct.lemma, - // TODO - add form to practiceActivity target_construct data somehow - form: null, - constructType: construct.type, - useType: useType(practiceActivity.activityType), - metadata: metadata, - category: construct.category, - ), - ) - .toList(); + ) { + if (practiceActivity.targetTokens == null) { + return []; + } + final uses = practiceActivity.targetTokens! + .map( + (token) => OneConstructUse( + lemma: token.lemma.text, + form: token.text.content, + constructType: ConstructTypeEnum.vocab, + useType: useType(practiceActivity.activityType), + metadata: metadata, + category: token.pos, + ), + ) + .toList(); + + uses.addAll( + practiceActivity.targetTokens!.map((token) { + return OneConstructUse( + lemma: token.pos, + form: token.text.content, + constructType: ConstructTypeEnum.morph, + useType: useType(practiceActivity.activityType), + metadata: metadata, + category: "POS", + ); + }), + ); + + for (final token in practiceActivity.targetTokens!) { + for (final entry in token.morph.entries) { + uses.add( + OneConstructUse( + useType: useType(practiceActivity.activityType), + lemma: entry.value, + form: token.text.content, + category: entry.key, + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); + } + } + + return uses; + } factory ActivityRecordResponse.fromJson(Map json) { return ActivityRecordResponse( diff --git a/lib/pangea/models/representation_content_model.dart b/lib/pangea/models/representation_content_model.dart index 3d21d7ff6..93d915ab8 100644 --- a/lib/pangea/models/representation_content_model.dart +++ b/lib/pangea/models/representation_content_model.dart @@ -154,6 +154,18 @@ class PangeaRepresentation { MatrixState.pangeaController.languageController.activeL2Code(); final useType = inUserL2 ? ConstructUseTypeEnum.wa : ConstructUseTypeEnum.unk; + + uses.add( + OneConstructUse( + useType: useType, + lemma: token.pos, + form: token.text.content, + category: "POS", + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); + for (final entry in token.morph.entries) { uses.add( OneConstructUse( @@ -206,6 +218,18 @@ class PangeaRepresentation { metadata, ), ); + + uses.add( + OneConstructUse( + useType: ConstructUseTypeEnum.ga, + lemma: token.pos, + form: token.text.content, + category: "POS", + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); + for (final entry in token.morph.entries) { uses.add( OneConstructUse( @@ -223,6 +247,17 @@ class PangeaRepresentation { } } + uses.add( + OneConstructUse( + useType: ConstructUseTypeEnum.wa, + lemma: token.pos, + form: token.text.content, + category: "POS", + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); + // the token wasn't found in any IT or IGC step, so it was wa for (final entry in token.morph.entries) { uses.add(