Compare commits
1 Commits
add-kanjiv
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
c70838d1bf
|
@@ -4,7 +4,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
jobs:
|
jobs:
|
||||||
evals:
|
build:
|
||||||
runs-on: debian-latest
|
runs-on: debian-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
@@ -69,3 +69,6 @@ jobs:
|
|||||||
ssh-key: ${{ secrets.OYSTEIKT_GITEA_WEBDOCS_SSH_KEY }}
|
ssh-key: ${{ secrets.OYSTEIKT_GITEA_WEBDOCS_SSH_KEY }}
|
||||||
host: microbel.pvv.ntnu.no
|
host: microbel.pvv.ntnu.no
|
||||||
known-hosts: "microbel.pvv.ntnu.no ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEq0yasKP0mH6PI6ypmuzPzMnbHELo9k+YB5yW534aKudKZS65YsHJKQ9vapOtmegrn5MQbCCgrshf+/XwZcjbM="
|
known-hosts: "microbel.pvv.ntnu.no ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEq0yasKP0mH6PI6ypmuzPzMnbHELo9k+YB5yW534aKudKZS65YsHJKQ9vapOtmegrn5MQbCCgrshf+/XwZcjbM="
|
||||||
|
|
||||||
|
- name: Run benchmarks
|
||||||
|
run: nix develop .# --command dart run benchmark_harness:bench --flavor jit
|
||||||
|
|||||||
5
benchmark/benchmark.dart
Normal file
5
benchmark/benchmark.dart
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import './search/word_search.dart';
|
||||||
|
|
||||||
|
Future<void> main() async {
|
||||||
|
await WordSearchBenchmark.main();
|
||||||
|
}
|
||||||
45
benchmark/search/word_search.dart
Normal file
45
benchmark/search/word_search.dart
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import 'package:benchmark_harness/benchmark_harness.dart';
|
||||||
|
import 'package:jadb/search.dart';
|
||||||
|
import 'package:sqflite_common/sqlite_api.dart';
|
||||||
|
|
||||||
|
import '../../test/search/setup_database_connection.dart';
|
||||||
|
|
||||||
|
class WordSearchBenchmark extends AsyncBenchmarkBase {
|
||||||
|
Database? connection;
|
||||||
|
|
||||||
|
static final List<String> searchTerms = [
|
||||||
|
'kana',
|
||||||
|
'kanji',
|
||||||
|
'kawaii',
|
||||||
|
'sushi',
|
||||||
|
'ramen',
|
||||||
|
];
|
||||||
|
|
||||||
|
WordSearchBenchmark() : super('WordSearchBenchmark');
|
||||||
|
|
||||||
|
static Future<void> main() async {
|
||||||
|
print('Running WordSearchBenchmark...');
|
||||||
|
await WordSearchBenchmark().report();
|
||||||
|
print('Finished WordSearchBenchmark');
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> setup() async {
|
||||||
|
connection = await setupDatabaseConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> run() async {
|
||||||
|
for (final term in searchTerms) {
|
||||||
|
await connection!.jadbSearchWord(term);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> teardown() async {
|
||||||
|
await connection?.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// Future<void> exercise() => run();
|
||||||
|
}
|
||||||
17
flake.lock
generated
17
flake.lock
generated
@@ -36,22 +36,6 @@
|
|||||||
"url": "https://www.edrdg.org/kanjidic/kanjidic2.xml.gz"
|
"url": "https://www.edrdg.org/kanjidic/kanjidic2.xml.gz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kanjivg-src": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1772352482,
|
|
||||||
"narHash": "sha256-8EG3Y1daI2B24NELQwU+eXl/7OmWnW/RXMAQSRVLzWw=",
|
|
||||||
"ref": "refs/heads/master",
|
|
||||||
"rev": "0b4309cf6d74799b0e4b72940d8267fbe73f72d0",
|
|
||||||
"revCount": 2212,
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.pvv.ntnu.no/mugiten/kanjivg.git"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.pvv.ntnu.no/mugiten/kanjivg.git"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1771848320,
|
"lastModified": 1771848320,
|
||||||
@@ -84,7 +68,6 @@
|
|||||||
"jmdict-src": "jmdict-src",
|
"jmdict-src": "jmdict-src",
|
||||||
"jmdict-with-examples-src": "jmdict-with-examples-src",
|
"jmdict-with-examples-src": "jmdict-with-examples-src",
|
||||||
"kanjidic2-src": "kanjidic2-src",
|
"kanjidic2-src": "kanjidic2-src",
|
||||||
"kanjivg-src": "kanjivg-src",
|
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
"radkfile-src": "radkfile-src"
|
"radkfile-src": "radkfile-src"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,11 +24,6 @@
|
|||||||
url = "https://www.edrdg.org/kanjidic/kanjidic2.xml.gz";
|
url = "https://www.edrdg.org/kanjidic/kanjidic2.xml.gz";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
kanjivg-src = {
|
|
||||||
url = "git+https://git.pvv.ntnu.no/mugiten/kanjivg.git";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
@@ -37,8 +32,7 @@
|
|||||||
jmdict-src,
|
jmdict-src,
|
||||||
jmdict-with-examples-src,
|
jmdict-with-examples-src,
|
||||||
radkfile-src,
|
radkfile-src,
|
||||||
kanjidic2-src,
|
kanjidic2-src
|
||||||
kanjivg-src,
|
|
||||||
}: let
|
}: let
|
||||||
inherit (nixpkgs) lib;
|
inherit (nixpkgs) lib;
|
||||||
systems = [
|
systems = [
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
import 'package:jadb/_data_ingestion/sql_writable.dart';
|
|
||||||
|
|
||||||
/// Enum set in the kvg:position attribute, used by `<g>` elements in the KanjiVG SVG files.
|
|
||||||
enum KanjiPathGroupPosition {
|
|
||||||
bottom,
|
|
||||||
kamae,
|
|
||||||
kamaec,
|
|
||||||
left,
|
|
||||||
middle,
|
|
||||||
nyo,
|
|
||||||
nyoc,
|
|
||||||
right,
|
|
||||||
tare,
|
|
||||||
tarec,
|
|
||||||
top,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Contents of a \<g> element in the KanjiVG SVG files.
|
|
||||||
class KanjiPathGroupTreeNode extends SQLWritable {
|
|
||||||
final String id;
|
|
||||||
final List<KanjiPathGroupTreeNode> children;
|
|
||||||
final String? element;
|
|
||||||
final String? original;
|
|
||||||
final KanjiPathGroupPosition? position;
|
|
||||||
final String? radical;
|
|
||||||
final int? part;
|
|
||||||
|
|
||||||
KanjiPathGroupTreeNode({
|
|
||||||
required this.id,
|
|
||||||
this.children = const [],
|
|
||||||
this.element,
|
|
||||||
this.original,
|
|
||||||
this.position,
|
|
||||||
this.radical,
|
|
||||||
this.part,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Map<String, Object?> get sqlValue => {
|
|
||||||
'id': id,
|
|
||||||
'element': element,
|
|
||||||
'original': original,
|
|
||||||
'position': position?.name,
|
|
||||||
'radical': radical,
|
|
||||||
'part': part,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Contents of a `<text>` element in the StrokeNumber's group in the KanjiVG SVG files
|
|
||||||
class KanjiStrokeNumber extends SQLWritable {
|
|
||||||
final int num;
|
|
||||||
final double x;
|
|
||||||
final double y;
|
|
||||||
|
|
||||||
KanjiStrokeNumber(this.num, this.x, this.y);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Map<String, Object?> get sqlValue => {'num': num, 'x': x, 'y': y};
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Contents of a `<path>` element in the KanjiVG SVG files
|
|
||||||
class KanjiVGPath extends SQLWritable {
|
|
||||||
final String id;
|
|
||||||
final String type;
|
|
||||||
final String svgPath;
|
|
||||||
|
|
||||||
KanjiVGPath({required this.id, required this.type, required this.svgPath});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Map<String, Object?> get sqlValue => {
|
|
||||||
'id': id,
|
|
||||||
'type': type,
|
|
||||||
'svgPath': svgPath,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
class KanjiVGItem extends SQLWritable {
|
|
||||||
final String character;
|
|
||||||
final List<KanjiVGPath> paths;
|
|
||||||
final List<KanjiStrokeNumber> strokeNumbers;
|
|
||||||
final List<KanjiPathGroupTreeNode> pathGroups;
|
|
||||||
|
|
||||||
KanjiVGItem({
|
|
||||||
required this.character,
|
|
||||||
required this.paths,
|
|
||||||
required this.strokeNumbers,
|
|
||||||
required this.pathGroups,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Map<String, Object?> get sqlValue => {'character': character};
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
import 'package:sqflite_common/sqflite.dart';
|
|
||||||
|
|
||||||
Future<void> seedKanjiVGData(Iterable<String> xmlContents, Database db) async {
|
|
||||||
final b = db.batch();
|
|
||||||
|
|
||||||
await b.commit(noResult: true);
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'package:jadb/table_names/jmdict.dart';
|
import 'package:jadb/table_names/jmdict.dart';
|
||||||
import 'package:jadb/table_names/kanjidic.dart';
|
import 'package:jadb/table_names/kanjidic.dart';
|
||||||
import 'package:jadb/table_names/kanjivg.dart';
|
|
||||||
import 'package:jadb/table_names/radkfile.dart';
|
import 'package:jadb/table_names/radkfile.dart';
|
||||||
import 'package:jadb/table_names/tanos_jlpt.dart';
|
import 'package:jadb/table_names/tanos_jlpt.dart';
|
||||||
import 'package:sqflite_common/sqlite_api.dart';
|
import 'package:sqflite_common/sqlite_api.dart';
|
||||||
@@ -22,7 +21,6 @@ Future<void> verifyTablesWithDbConnection(DatabaseExecutor db) async {
|
|||||||
...KANJIDICTableNames.allTables,
|
...KANJIDICTableNames.allTables,
|
||||||
...RADKFILETableNames.allTables,
|
...RADKFILETableNames.allTables,
|
||||||
...TanosJLPTTableNames.allTables,
|
...TanosJLPTTableNames.allTables,
|
||||||
...KanjiVGTableNames.allTables,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
final missingTables = expectedTables.difference(tables);
|
final missingTables = expectedTables.difference(tables);
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
abstract class KanjiVGTableNames {
|
|
||||||
static const String version = 'KanjiVG_Version';
|
|
||||||
static const String entry = 'KanjiVG_Entry';
|
|
||||||
static const String path = 'KanjiVG_Path';
|
|
||||||
static const String strokeNumber = 'KanjiVG_StrokeNumber';
|
|
||||||
static const String pathGroup = 'KanjiVG_PathGroup';
|
|
||||||
|
|
||||||
static Set<String> get allTables => {version, entry, path, strokeNumber, pathGroup};
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
CREATE TABLE "KanjiVG_Version" (
|
|
||||||
"version" VARCHAR(10) PRIMARY KEY NOT NULL,
|
|
||||||
"date" DATE NOT NULL,
|
|
||||||
"hash" VARCHAR(64) NOT NULL
|
|
||||||
) WITHOUT ROWID;
|
|
||||||
|
|
||||||
CREATE TRIGGER "KanjiVG_Version_SingleRow"
|
|
||||||
BEFORE INSERT ON "KanjiVG_Version"
|
|
||||||
WHEN (SELECT COUNT(*) FROM "KanjiVG_Version") >= 1
|
|
||||||
BEGIN
|
|
||||||
SELECT RAISE(FAIL, 'Only one row allowed in KanjiVG_Version');
|
|
||||||
END;
|
|
||||||
|
|
||||||
CREATE TABLE "KanjiVG_Entry" (
|
|
||||||
"character" CHAR(1) PRIMARY KEY NOT NULL
|
|
||||||
) WITHOUT ROWID;
|
|
||||||
|
|
||||||
CREATE TABLE "KanjiVG_StrokeNumber" (
|
|
||||||
"character" CHAR(1) NOT NULL REFERENCES "KanjiVG_Entry"("character"),
|
|
||||||
"strokeNum" INTEGER NOT NULL,
|
|
||||||
"x" REAL NOT NULL,
|
|
||||||
"y" REAL NOT NULL,
|
|
||||||
PRIMARY KEY ("character", "strokeNum")
|
|
||||||
) WITHOUT ROWID;
|
|
||||||
|
|
||||||
CREATE TABLE "KanjiVG_Path" (
|
|
||||||
"character" CHAR(1) NOT NULL REFERENCES "KanjiVG_Entry"("character"),
|
|
||||||
"pathId" TEXT NOT NULL,
|
|
||||||
"type" VARCHAR(10) NOT NULL,
|
|
||||||
"svgPath" TEXT NOT NULL,
|
|
||||||
PRIMARY KEY ("character", "pathId")
|
|
||||||
) WITHOUT ROWID;
|
|
||||||
|
|
||||||
CREATE TABLE "KanjiVG_PathGroup" (
|
|
||||||
"character" CHAR(1) NOT NULL REFERENCES "KanjiVG_Entry"("character"),
|
|
||||||
"groupId" TEXT NOT NULL,
|
|
||||||
"parentGroupId" TEXT REFERENCES "KanjiVG_PathGroup"("groupId"),
|
|
||||||
"element" TEXT,
|
|
||||||
"original" TEXT,
|
|
||||||
"position" VARCHAR(10),
|
|
||||||
"radical" TEXT,
|
|
||||||
"part" INTEGER,
|
|
||||||
PRIMARY KEY ("character", "groupId"),
|
|
||||||
CHECK ("position" IN ('bottom', 'kamae', 'kamaec', 'left', 'middle', 'nyo', 'nyoc', 'right', 'tare', 'tarec', 'top') OR "position" IS NULL)
|
|
||||||
) WITHOUT ROWID;
|
|
||||||
@@ -33,6 +33,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.13.0"
|
version: "2.13.0"
|
||||||
|
benchmark_harness:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: benchmark_harness
|
||||||
|
sha256: a2d3c4c83cac0126bf38e41eaf7bd9ed4f6635f1ee1a0cbc6f79fa9736c62cbd
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.0"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ dependencies:
|
|||||||
xml: ^6.5.0
|
xml: ^6.5.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
benchmark_harness: ^2.4.0
|
||||||
lints: ^6.0.0
|
lints: ^6.0.0
|
||||||
test: ^1.25.15
|
test: ^1.25.15
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user