File: wordnet.pl

package info (click to toggle)
swi-prolog 9.0.4%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 82,408 kB
  • sloc: ansic: 387,503; perl: 359,326; cpp: 6,613; lisp: 6,247; java: 5,540; sh: 3,147; javascript: 2,668; python: 1,900; ruby: 1,594; yacc: 845; makefile: 428; xml: 317; sed: 12; sql: 6
file content (129 lines) | stat: -rw-r--r-- 3,024 bytes parent folder | download | duplicates (4)
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
:- use_module(library(odbc)).

open :-
    odbc_connect('WordNet', _,
                 [ user(jan),
                   password(geheim),
                   alias(wordnet),
                   open(once)
                 ]).


:- dynamic
    qid/2.

word(Id, Word) :-
    nonvar(Id),
    qid(word(+, -), Qid),
    !,
    odbc_execute(Qid, [Id], row(Word)).
word(Id, Word) :-
    nonvar(Word),
    qid(word(-, +), Qid),
    !,
    odbc_execute(Qid, [Word], row(Id)).
word(Id, Word) :-
    var(Id),
    var(Word),
    !,
    open,
    odbc_query(wordnet, 'SELECT * from word', row(Id, Word)).
word(Id, Word) :-
    nonvar(Id),
    open,
    odbc_prepare(wordnet,
                 'SELECT (lemma) FROM word WHERE wordno=?',
                 [ integer
                 ],
                 Qid),
    assert(qid(word(+, -), Qid)),
    word(Id, Word).
word(Id, Word) :-
    nonvar(Word),
    open,
    odbc_prepare(wordnet,
                 'SELECT (wordno) FROM word WHERE lemma=?',
                 [ default
                 ],
                 Qid,
                 [ types([integer])
                 ]),
    assert(qid(word(-, +), Qid)),
    word(Id, Word).


                 /*******************************
                 *             TEST             *
                 *******************************/

word_by_query(Id, Word) :-
    odbc_prepare(wordnet,
                 'SELECT (lemma) FROM word WHERE wordno=?',
                 [ integer
                 ],
                 Qid),
    odbc_execute(Qid, [Id], row(Word)),
    odbc_free_statement(Qid).

word_direct(Id, Word) :-
    odbc_query(wordnet,
               'SELECT (lemma) from word where wordno=~w'-[Id],
               row(Word)).

prof_by_query(N) :-
    (   between(0, N, _),
        Id is random(140000),
        word_by_query(Id, _),
        fail
    ;   true
    ).

prof_direct(N) :-
    (   between(0, N, _),
        Id is random(140000),
        word_direct(Id, _),
        fail
    ;   true
    ).

all_lemmas_1(Words) :-
    odbc_query(wordnet,
               'select (wordno) from word',
               Words,
               [ findall(Word, row(Word)),
                 types([integer])
               ]).
all_lemmas_2(Words) :-
    findall(Word,
            odbc_query(wordnet,
                       'select (wordno) from word',
                       row(Word),
                       [ types([integer])
                       ]),
            Words).




                 /*******************************
                 *            PROFILE           *
                 *******************************/

prof_word(N) :-
    (   between(0, N, _),
        Id is random(140000),
%       format('wordno = ~w~n', [Id]),
        word(Id, _),
        fail
    ;   true
    ).

prof_word2(N) :-
    (   between(0, N, _),
        Id is random(140000),
        sformat(SQL, 'SELECT * FROM word WHERE wordno=~w', [Id]),
        db_select('WordNet', SQL, tuple(_, _Word)),
%       format('~w --> ~w~n', [Id, Word]),
        fail
    ;   true
    ).