Libraryless. Click here for Pure Java version (10336L/72K/218K).
1 | !7 |
2 | |
3 | static new L<Map> data; |
4 | |
5 | concept Para {
|
6 | S text; |
7 | L<S> split; |
8 | bool ok; |
9 | } |
10 | |
11 | p {
|
12 | db(); |
13 | parasFromText(); |
14 | makeData(); |
15 | serveHttpOpenBrowser(4000); |
16 | } |
17 | |
18 | static synchronized NanoHTTPD.Response serve(S uri, NanoHTTPD.Method method, |
19 | Map<S,S> header, Map<S,S> parms, Map<S,S> files) {
|
20 | |
21 | if (neq(uri, "/")) ret serve404(); |
22 | |
23 | if (nempty(parms.get("update"))) {
|
24 | Set<Long> toCheck = asSet(map(f toLong, keysDeprefixNemptyValue(parms, "ok_"))); |
25 | //print("toCheck: " + struct(toCheck));
|
26 | for (Para p) |
27 | cset(p, ok := toCheck.contains(p.id)); |
28 | makeData(); |
29 | } |
30 | |
31 | if (nempty(parms.get("resplit")))
|
32 | resplit(); |
33 | |
34 | S title = "Splitting paragraphs into sentences"; |
35 | |
36 | ret serveHTML(hhtml( |
37 | hhead(htitle(title) |
38 | + loadJQuery() |
39 | + hCheckBoxMultiSelect()) |
40 | + hbody(h3(title) |
41 | + hformPOST(p(hhidden("resplit", "1") + hsubmit("Resplit")))
|
42 | + hformPOST( |
43 | hhidden("update", "1")
|
44 | + p(hsubmit()) |
45 | + htable_noEncode(data) |
46 | + p(hsubmit()))))); |
47 | } |
48 | |
49 | svoid parasFromText {
|
50 | S text = loadSnippet(#1008407); |
51 | for (S line : toLinesFullTrim(text)) {
|
52 | if (line.startsWith("#")) continue;
|
53 | uniq(Para, text := line); |
54 | } |
55 | } |
56 | |
57 | svoid makeData {
|
58 | data.clear(); |
59 | for (Para p) {
|
60 | if (p.split == null) {
|
61 | p.split = splitIntoSentences_v3(p.text); |
62 | p.change(); |
63 | } |
64 | |
65 | S sp; |
66 | if (l(p.split) == 1 && eq(first(p.split), p.text)) |
67 | sp = "-"; |
68 | else |
69 | //sp = htmlEncode_nlToBr(lines(p.split)); |
70 | sp = ul(htmlEncodeAll(p.split)); |
71 | |
72 | data.add(litorderedmap( |
73 | "Original Paragraph" := htmlencode(p.text), |
74 | "Split" := sp, |
75 | "OK" := hcheckbox("ok_" + p.id, p.ok, "class" := "chkbox")));
|
76 | } |
77 | |
78 | data = sortByCalculatedField(data, func(Map m) {
|
79 | comparableList( |
80 | contains(getString(m, "OK"), "checked"), |
81 | neq(m.get("Split"), "-"),
|
82 | m.get("Original Paragraph"))
|
83 | }); |
84 | } |
85 | |
86 | svoid resplit {
|
87 | for (Para p) {
|
88 | L<S> split = splitIntoSentences_v3(p.text); |
89 | if (neq(split, p.split)) {
|
90 | p.split = split; |
91 | p.ok = false; |
92 | p.change(); |
93 | } |
94 | } |
95 | makeData(); |
96 | } |
Began life as a copy of #1008419
download show line numbers debug dex old transpilations
Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1008430 |
| Snippet name: | Persistent text segmentation [dev.] |
| Eternal ID of this version: | #1008430/18 |
| Text MD5: | 931f351925e8b689cd3318ce30876c8a |
| Transpilation MD5: | c329202deb1de7ecf94662c49e2a9e93 |
| Author: | stefan |
| Category: | javax / a.i. parsing |
| Type: | JavaX source code |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2017-05-15 16:24:51 |
| Source code size: | 2195 bytes / 96 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 737 / 1160 |
| Version history: | 17 change(s) |
| Referenced in: | [show references] |