- Added new dir for the library
[textus:php-language-detection.git] / textcat / textcat.h
1 /*
2    +----------------------------------------------------------------------+
3    | Copyright (c) 2010 The PHP Group                                     |
4    +----------------------------------------------------------------------+
5    | This source file is subject to version 3.01 of the PHP license,      |
6    | that is bundled with this package in the file LICENSE, and is        |
7    | available through the world-wide-web at the following url:           |
8    | http://www.php.net/license/3_01.txt                                  |
9    | If you did not receive a copy of the PHP license and are unable to   |
10    | obtain it through the world-wide-web, please send a note to          |
11    | license@php.net so we can mail you a copy immediately.               |
12    +----------------------------------------------------------------------+
13    | Author:  C├ęsar Rodas <crodas@member.fsf.org>                         |
14    +----------------------------------------------------------------------+
15  */
16
17 #include <stdlib.h>
18 #include <stdio.h>
19 #include <sys/types.h>
20 #include <sys/stat.h>
21 #include <fcntl.h>
22
23 /* Definitions {{{ */
24 #define TC_HASH_SIZE    1000
25 #define TC_BUFFER_SIZE  (16 * 1024) 
26 #define TC_MAX_NGRAMS   400
27 #define Bool            char
28 #define uchar           unsigned char
29 #define TC_TRUE         1
30 #define TC_FALSE        0
31 #define TC_FREE         1
32 #define TC_BUSY         0
33 #define MIN_NGRAM_LEN   1
34 #define MAX_NGRAM_LEN   5
35 #define TC_THRESHOLD    1.003
36
37 #define TC_OK               TC_TRUE
38 #define TC_ERR              -1
39 #define TC_ERR_MEM          -2
40 #define TC_NO_FILE          -3
41 #define TC_ERR_FILE_SIZE    -4
42 #define TC_NO_NGRAM         -5
43 #define TC_ERR_CALLBACK     -6
44 #define TC_ERR_NO_KNOWLEDGE -7
45 /* }}} */
46
47 /* Data types {{{ */
48 typedef struct {
49     uchar * str;
50     long freq;
51     int len;
52     struct ngram_t * next;
53 } ngram_t;
54
55 typedef struct {
56     /* linked list */
57     ngram_t * first;
58     ngram_t * last;
59     long total;
60 } ngram_set;
61
62 typedef struct {
63     ngram_set * table;
64     long size;
65     long ngrams;
66 } ngram_hash;
67
68 typedef struct result_stack {
69     struct NGrams * result;
70     struct result_stack * next;
71 } result_stack;
72
73 typedef struct TextCat {
74     /* pools of memory */
75     void * temp;   /* temporary memory */
76     void * memory; /* "return" structures and internal stack */
77
78     /* callback */
79     void * (*malloc)(size_t);
80     void (*free)(void *);
81     Bool (*parse_str)(struct TextCat *, uchar *, size_t , int * (*set_ngram)(struct TextCat *, const uchar *, size_t), void *);
82     Bool (*save)(void *, const uchar *, struct NGrams *, void *);
83     Bool (*list)(void *, uchar ***, int *, void *);
84     Bool (*load)(void *, const uchar *, struct NGram *, int, void *);
85     long (*distance)(struct NGrams *, struct NGrams *, void *);
86     void * param;
87
88     /* config issues */
89     size_t allocate_size;
90     int hash_size;
91     int min_ngram_len;
92     int max_ngram_len;
93     int max_ngrams;
94     float threshold;
95
96
97     /* internal stuff */
98     ngram_hash hash;
99     result_stack  * results;
100     uchar ** klNames;
101     struct NGrams * klContent;
102     int klTotal;
103
104     /* status */
105     int error;
106     int status;
107 } TextCat;
108
109
110 typedef struct {
111     uchar * str;
112     int size;
113     long freq;
114     long position;
115 } NGram;
116
117 typedef struct NGrams {
118     NGram * ngram;
119     long size;
120 } NGrams;
121 /* }}} */
122
123
124 Bool TextCat_Init(TextCat ** tc);
125 Bool TextCat_Destroy(TextCat * tc);
126 Bool TextCat_reset(TextCat * tc);
127 Bool TextCat_reset_handlers(TextCat * tc);
128 Bool TextCat_load(TextCat *tc);
129 Bool TextCat_getCategory(TextCat *tc, const uchar * text, size_t length, uchar *** result, int * n);
130
131 Bool TextCat_parse_ex(TextCat * tc, const uchar * text, size_t length,  NGrams ** ngrams, Bool store_stack);
132 Bool TextCat_parse(TextCat * tc, const uchar * text, size_t length, NGrams ** ngram);
133 Bool TextCat_parse_file(TextCat * tc, const uchar * filename, NGrams ** ngrams);
134 Bool TextCat_list(TextCat * tc, uchar *** list, int * len);
135 Bool TextCat_load(TextCat *tc);
136
137 /*
138  * Local variables:
139  * tab-width: 4
140  * c-basic-offset: 4
141  * End:
142  * vim600: sw=4 ts=4 fdm=marker
143  * vim<600: sw=4 ts=4
144  */