2
#include "libstemmer.h"
3
#include "../runtime/api.h"
7
struct SN_env * (*create)(void);
8
void (*close)(struct SN_env *);
9
int (*stem)(struct SN_env *);
14
/** Create a new stemmer object, using the specified algorithm.
16
* @return If the specified algorithm is not recognised, 0 will be
17
* returned; otherwise a pointer to a newly created stemmer for that
18
* algorithm will be returned.
20
struct sb_stemmer * sb_stemmer_create(const char * algorithm)
22
struct stemmer_modules * module;
23
struct sb_stemmer * stemmer =
24
(struct sb_stemmer *) malloc(sizeof(struct sb_stemmer));
25
if (stemmer == 0) return 0;
27
for (module = modules; module->name != 0; module++) {
28
if (strcmp(module->name, algorithm) == 0) break;
30
if (module->name == 0) return 0;
32
stemmer->create = module->create;
33
stemmer->close = module->close;
34
stemmer->stem = module->stem;
36
stemmer->env = stemmer->create();
41
/** Release a stemmer.
43
* This frees all resources allocated for the stemmer. After calling
44
* this function, the supplied stemmer may no longer be used in any way.
46
* It is safe to pass a null pointer to this function - this will have
49
void sb_stemmer_release(struct sb_stemmer * stemmer)
51
if (stemmer == 0) return;
52
if (stemmer->close == 0) return;
53
stemmer->close(stemmer->env);
60
* The return value is owned by the stemmer - it must not be freed or
61
* modified, and it will become invalid when the stemmer is called again,
62
* or if the stemmer is freed.
65
sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size)
67
SN_set_current(stemmer->env, size, word);
68
(void) stemmer->stem(stemmer->env);
69
stemmer->env->p[stemmer->env->l] = 0;
70
return stemmer->env->p;