ratingsFromTurtle static method
- String ttlContent
Parses ratings from TTL content using proper RDF parsing.
Implementation
static Map<String, double> ratingsFromTurtle(String ttlContent) {
try {
// First try JSON backup for backward compatibility.
final jsonMatch = RegExp(r'# JSON_DATA: (.+)').firstMatch(ttlContent);
if (jsonMatch != null) {
final jsonData = jsonMatch.group(1)!;
final decoded = jsonDecode(jsonData) as Map<String, dynamic>;
return decoded.map((key, value) => MapEntry(key, value.toDouble()));
}
// Parse using proper RDF.
final triples = turtleToTripleMap(ttlContent);
final ratings = <String, double>{};
// Find rating resources.
for (final subject in triples.keys) {
final predicates = triples[subject]!;
// Check if this is a rating resource.
final typeValues =
predicates['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] ?? [];
final isRating = typeValues.any(
(type) => type.toString().contains('Rating') || type == '#Rating',
);
if (isRating) {
final movieIdValues = predicates['#movieId'] ?? [];
final valueValues = predicates['#value'] ?? [];
if (movieIdValues.isNotEmpty && valueValues.isNotEmpty) {
final movieId = movieIdValues.first.toString();
final rating = double.tryParse(valueValues.first.toString()) ?? 0.0;
ratings[movieId] = rating;
}
}
}
return ratings;
} catch (e) {
return {};
}
}