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
|
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include "hunspell.hxx"
#ifndef WIN32
using namespace std;
#endif
int main(int argc, char **argv)
{
FILE *wtclst;
int i;
int dp;
char buf[101];
Hunspell *pMS;
/* first parse the command line options */
for (i = 1; i < 3; i++)
if (!argv[i]) {
fprintf(stderr, "correct syntax is:\nanalyze affix_file");
fprintf(stderr, " dictionary_file file_of_words_to_check\n");
fprintf(stderr, "use two words per line for morphological generation\n");
exit(1);
}
/* open the words to check list */
wtclst = fopen(argv[3], "r");
if (!wtclst) {
fprintf(stderr, "Error - could not open file to check\n");
exit(1);
}
pMS = new Hunspell(argv[1], argv[2]);
while (fgets(buf, 100, wtclst)) {
*(buf + strlen(buf) - 1) = '\0';
if (*buf == '\0') continue;
// morphgen demo
char * s = strchr(buf, ' ');
if (s) {
*s = '\0';
char ** result;
int n = pMS->generate(&result, buf, s+1);
for (int i = 0; i < n; i++) {
fprintf(stdout, "generate(%s, %s) = %s\n", buf, s+1, result[i]);
}
pMS->free_list(&result, n);
if (n == 0) fprintf(stdout, "generate(%s, %s) = NO DATA\n", buf, s+1);
} else {
dp = pMS->spell(buf);
fprintf(stdout, "> %s\n", buf);
if (dp) {
char ** result;
int n = pMS->analyze(&result, buf);
for (int i = 0; i < n; i++) {
fprintf(stdout, "analyze(%s) = %s\n", buf, result[i]);
}
pMS->free_list(&result, n);
n = pMS->stem(&result, buf);
for (int i = 0; i < n; i++) {
fprintf(stdout, "stem(%s) = %s\n", buf, result[i]);
}
pMS->free_list(&result, n);
} else {
fprintf(stdout, "Unknown word.\n");
}
}
}
delete pMS;
fclose(wtclst);
return 0;
}
|