1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# README
This program provides a fast local dictionary, with the option to add any word &
its definition to Anki.
You'll need a working Go runtime in order to build this program. Usually you can
get this from your distribution's package manager, or from
https://go.dev/doc/install.
## Getting started
You need a copy of
https://kaikki.org/frwiktionary/raw-wiktextract-data.jsonl.gz. Uncompress it to
raw-wiktextract-data.jsonl. This is a structured dump of French wiktionary.
To be able to add Anki cards, you need to install the `anki-connect` extension.
You can find instructions to do so here: https://git.sr.ht/~foosoft/anki-connect
When you're running this app, you'll also need to have Anki open (with the
`anki-connect` plugin installed) in order to add new cards.
Also from Anki, take note of the name of the Deck where you want to add new
cards, and the `Type` of these cards (appears in the upper-left of the 'add new
cards' dialog in Anki).
(Note: currently this application assumes that your card type has two fields:
"Front" and "Back". Eventually, this may be configurable. If the fields are
called something else in your card type, you'll currently have to update the
json tags for the `fields` struct in `add.go`.)
With all this done, you can now run the app! The first time you run it, the app
will build a SQLite database of words and definitions from the Wiktionary data,
which will take a minute or two. From the root of this repository, you can use a
command like this to start the app:
```
go run . -rawDictionary=raw-wiktextract-data.jsonl -deck="Français" -model="Basic-830ae"
```
In addition to starting the program and then looking up a word interactively,
it's also possible to provide the first word to look up as a command-line
argument. Then, for example, you could add a shell function to invoke the
program and immediately go to a definition.
For example, if you've compiled the program and placed it in your path, you
could add a shell function to your `.zshrc` or `.bashrc` with all the arguments
you need, like this:
```
wk() {
french-wiktionary-flashcards dictionary=/path/to/dictionary.sqlite3 -deck="Français" -model="Basic-830ae" -initialWord="$*"
}
```
and then, to start the program and go immediately to a definition (e.g.
"poisson"), you could invoke it like this:
```
$ wk poisson
```
## Usage
```
Usage of french-wiktionary-flashcards:
-apiURL string
Base URL to access the anki-connect plugin API. (default
"http://localhost:8765")
-deck string
Name of the deck where new Anki cards will be created.
-dictionary string
Path to the parsed dictionary data. This will be generated
from rawDictionary. (default "dictionary.sqlite3")
-model string
Name of the card type ('model') for new Anki cards.
-initialWord string
Optional: first word to look up on program launch.
-rawDictionary string
Path to the raw wiktionary data. You can get this by
downloading and unzipping
https://kaikki.org/frwiktionary/raw-wiktextract-data.jsonl.gz
(for French). (default "raw-wiktextract-data.jsonl")
```
# TODO
- combine definitions for identical words (e.g. accroire, n & v)
- allow setting the language for initial processing, so that we could support
languages other than French
- render HTML entities in definitions -- do some grepping to identify the most
common ones
- italicise part-of-speech in the TUI (maybe remove numbers from them)
# Ideas for future improvements
- if the deck and model aren't provided, figure out the defaults and use them
- provide history (scrollback) of words looked up, to make it easier to switch
between definitions
- store data in sqlite with more structure to make it easier to customize
the format of definitions on cards
- figure out some way to customize the names of the fields on the flashcards
|