-
Notifications
You must be signed in to change notification settings - Fork 0
/
mecab.h
1498 lines (1263 loc) · 40.8 KB
/
mecab.h
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
MeCab -- Yet Another Part-of-Speech and Morphological Analyzer
Copyright(C) 2001-2011 Taku Kudo <taku@chasen.org>
Copyright(C) 2004-2006 Nippon Telegraph and Telephone Corporation
*/
#ifndef MECAB_MECAB_H_
#define MECAB_MECAB_H_
/* C/C++ common data structures */
/**
* DictionaryInfo structure
*/
struct mecab_dictionary_info_t {
/**
* filename of dictionary
* On Windows, filename is stored in UTF-8 encoding
*/
const char *filename;
/**
* character set of the dictionary. e.g., "SHIFT-JIS", "UTF-8"
*/
const char *charset;
/**
* How many words are registered in this dictionary.
*/
unsigned int size;
/**
* dictionary type
* this value should be MECAB_USR_DIC, MECAB_SYS_DIC, or MECAB_UNK_DIC.
*/
int type;
/**
* left attributes size
*/
unsigned int lsize;
/**
* right attributes size
*/
unsigned int rsize;
/**
* version of this dictionary
*/
unsigned short version;
/**
* pointer to the next dictionary info.
*/
struct mecab_dictionary_info_t *next;
};
/**
* Path structure
*/
struct mecab_path_t {
/**
* pointer to the right node
*/
struct mecab_node_t* rnode;
/**
* pointer to the next right path
*/
struct mecab_path_t* rnext;
/**
* pointer to the left node
*/
struct mecab_node_t* lnode;
/**
* pointer to the next left path
*/
struct mecab_path_t* lnext;
/**
* local cost
*/
int cost;
/**
* marginal probability
*/
float prob;
};
/**
* Node structure
*/
struct mecab_node_t {
/**
* pointer to the previous node.
*/
struct mecab_node_t *prev;
/**
* pointer to the next node.
*/
struct mecab_node_t *next;
/**
* pointer to the node which ends at the same position.
*/
struct mecab_node_t *enext;
/**
* pointer to the node which starts at the same position.
*/
struct mecab_node_t *bnext;
/**
* pointer to the right path.
* this value is NULL if MECAB_ONE_BEST mode.
*/
struct mecab_path_t *rpath;
/**
* pointer to the right path.
* this value is NULL if MECAB_ONE_BEST mode.
*/
struct mecab_path_t *lpath;
/**
* surface string.
* this value is not 0 terminated.
* You can get the length with length/rlength members.
*/
const char *surface;
/**
* feature string
*/
const char *feature;
/**
* unique node id
*/
unsigned int id;
/**
* length of the surface form.
*/
unsigned short length;
/**
* length of the surface form including white space before the morph.
*/
unsigned short rlength;
/**
* right attribute id
*/
unsigned short rcAttr;
/**
* left attribute id
*/
unsigned short lcAttr;
/**
* unique part of speech id. This value is defined in "pos.def" file.
*/
unsigned short posid;
/**
* character type
*/
unsigned char char_type;
/**
* status of this model.
* This value is MECAB_NOR_NODE, MECAB_UNK_NODE, MECAB_BOS_NODE, MECAB_EOS_NODE, or MECAB_EON_NODE.
*/
unsigned char stat;
/**
* set 1 if this node is best node.
*/
unsigned char isbest;
/**
* forward accumulative log summation.
* This value is only available when MECAB_MARGINAL_PROB is passed.
*/
float alpha;
/**
* backward accumulative log summation.
* This value is only available when MECAB_MARGINAL_PROB is passed.
*/
float beta;
/**
* marginal probability.
* This value is only available when MECAB_MARGINAL_PROB is passed.
*/
float prob;
/**
* word cost.
*/
short wcost;
/**
* best accumulative cost from bos node to this node.
*/
long cost;
};
/**
* Parameters for MeCab::Node::stat
*/
enum {
/**
* Normal node defined in the dictionary.
*/
MECAB_NOR_NODE = 0,
/**
* Unknown node not defined in the dictionary.
*/
MECAB_UNK_NODE = 1,
/**
* Virtual node representing a beginning of the sentence.
*/
MECAB_BOS_NODE = 2,
/**
* Virtual node representing a end of the sentence.
*/
MECAB_EOS_NODE = 3,
/**
* Virtual node representing a end of the N-best enumeration.
*/
MECAB_EON_NODE = 4
};
/**
* Parameters for MeCab::DictionaryInfo::type
*/
enum {
/**
* This is a system dictionary.
*/
MECAB_SYS_DIC = 0,
/**
* This is a user dictionary.
*/
MECAB_USR_DIC = 1,
/**
* This is a unknown word dictionary.
*/
MECAB_UNK_DIC = 2
};
/**
* Parameters for MeCab::Lattice::request_type
*/
enum {
/**
* One best result is obtained (default mode)
*/
MECAB_ONE_BEST = 1,
/**
* Set this flag if you want to obtain N best results.
*/
MECAB_NBEST = 2,
/**
* Set this flag if you want to enable a partial parsing mode.
* When this flag is set, the input |sentence| needs to be written
* in partial parsing format.
*/
MECAB_PARTIAL = 4,
/**
* Set this flag if you want to obtain marginal probabilities.
* Marginal probability is set in MeCab::Node::prob.
* The parsing speed will get 3-5 times slower than the default mode.
*/
MECAB_MARGINAL_PROB = 8,
/**
* Set this flag if you want to obtain alternative results.
* Not implemented.
*/
MECAB_ALTERNATIVE = 16,
/**
* When this flag is set, the result linked-list (Node::next/prev)
* traverses all nodes in the lattice.
*/
MECAB_ALL_MORPHS = 32,
/**
* When this flag is set, tagger internally copies the body of passed
* sentence into internal buffer.
*/
MECAB_ALLOCATE_SENTENCE = 64
};
/**
* Parameters for MeCab::Lattice::boundary_constraint_type
*/
enum {
/**
* The token boundary is not specified.
*/
MECAB_ANY_BOUNDARY = 0,
/**
* The position is a strong token boundary.
*/
MECAB_TOKEN_BOUNDARY = 1,
/**
* The position is not a token boundary.
*/
MECAB_INSIDE_TOKEN = 2
};
/* C interface */
#ifdef __cplusplus
#include <cstdio>
#else
#include <stdio.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _WIN32
#include <windows.h>
# ifdef DLL_EXPORT
# define MECAB_DLL_EXTERN __declspec(dllexport)
# define MECAB_DLL_CLASS_EXTERN __declspec(dllexport)
# else
# define MECAB_DLL_EXTERN __declspec(dllimport)
# endif
#endif
#ifndef MECAB_DLL_EXTERN
# define MECAB_DLL_EXTERN extern
#endif
#ifndef MECAB_DLL_CLASS_EXTERN
# define MECAB_DLL_CLASS_EXTERN
#endif
typedef struct mecab_t mecab_t;
typedef struct mecab_model_t mecab_model_t;
typedef struct mecab_lattice_t mecab_lattice_t;
typedef struct mecab_dictionary_info_t mecab_dictionary_info_t;
typedef struct mecab_node_t mecab_node_t;
typedef struct mecab_path_t mecab_path_t;
#ifndef SWIG
/* C interface */
/* old mecab interface */
/**
* C wrapper of MeCab::Tagger::create(argc, argv)
*/
MECAB_DLL_EXTERN mecab_t* mecab_new(int argc, char **argv);
/**
* C wrapper of MeCab::Tagger::create(arg)
*/
MECAB_DLL_EXTERN mecab_t* mecab_new2(const char *arg);
/**
* C wrapper of MeCab::Tagger::version()
*/
MECAB_DLL_EXTERN const char* mecab_version();
/**
* C wrapper of MeCab::getLastError()
*/
MECAB_DLL_EXTERN const char* mecab_strerror(mecab_t *mecab);
/**
* C wrapper of MeCab::deleteTagger(tagger)
*/
MECAB_DLL_EXTERN void mecab_destroy(mecab_t *mecab);
/**
* C wrapper of MeCab::Tagger:set_partial()
*/
MECAB_DLL_EXTERN int mecab_get_partial(mecab_t *mecab);
/**
* C wrapper of MeCab::Tagger::partial()
*/
MECAB_DLL_EXTERN void mecab_set_partial(mecab_t *mecab, int partial);
/**
* C wrapper of MeCab::Tagger::theta()
*/
MECAB_DLL_EXTERN float mecab_get_theta(mecab_t *mecab);
/**
* C wrapper of MeCab::Tagger::set_theta()
*/
MECAB_DLL_EXTERN void mecab_set_theta(mecab_t *mecab, float theta);
/**
* C wrapper of MeCab::Tagger::lattice_level()
*/
MECAB_DLL_EXTERN int mecab_get_lattice_level(mecab_t *mecab);
/**
* C wrapper of MeCab::Tagger::set_lattice_level()
*/
MECAB_DLL_EXTERN void mecab_set_lattice_level(mecab_t *mecab, int level);
/**
* C wrapper of MeCab::Tagger::all_morphs()
*/
MECAB_DLL_EXTERN int mecab_get_all_morphs(mecab_t *mecab);
/**
* C wrapper of MeCab::Tagger::set_all_moprhs()
*/
MECAB_DLL_EXTERN void mecab_set_all_morphs(mecab_t *mecab, int all_morphs);
/**
* C wrapper of MeCab::Tagger::parse(MeCab::Lattice *lattice)
*/
MECAB_DLL_EXTERN int mecab_parse_lattice(mecab_t *mecab, mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Tagger::parse(const char *str)
*/
MECAB_DLL_EXTERN const char* mecab_sparse_tostr(mecab_t *mecab, const char *str);
/**
* C wrapper of MeCab::Tagger::parse(const char *str, size_t len)
*/
MECAB_DLL_EXTERN const char* mecab_sparse_tostr2(mecab_t *mecab, const char *str, size_t len);
/**
* C wrapper of MeCab::Tagger::parse(const char *str, char *ostr, size_t olen)
*/
MECAB_DLL_EXTERN char* mecab_sparse_tostr3(mecab_t *mecab, const char *str, size_t len,
char *ostr, size_t olen);
/**
* C wrapper of MeCab::Tagger::parseToNode(const char *str)
*/
MECAB_DLL_EXTERN const mecab_node_t* mecab_sparse_tonode(mecab_t *mecab, const char*);
/**
* C wrapper of MeCab::Tagger::parseToNode(const char *str, size_t len)
*/
MECAB_DLL_EXTERN const mecab_node_t* mecab_sparse_tonode2(mecab_t *mecab, const char*, size_t);
/**
* C wrapper of MeCab::Tagger::parseNBest(size_t N, const char *str)
*/
MECAB_DLL_EXTERN const char* mecab_nbest_sparse_tostr(mecab_t *mecab, size_t N, const char *str);
/**
* C wrapper of MeCab::Tagger::parseNBest(size_t N, const char *str, size_t len)
*/
MECAB_DLL_EXTERN const char* mecab_nbest_sparse_tostr2(mecab_t *mecab, size_t N,
const char *str, size_t len);
/**
* C wrapper of MeCab::Tagger::parseNBest(size_t N, const char *str, char *ostr, size_t olen)
*/
MECAB_DLL_EXTERN char* mecab_nbest_sparse_tostr3(mecab_t *mecab, size_t N,
const char *str, size_t len,
char *ostr, size_t olen);
/**
* C wrapper of MeCab::Tagger::parseNBestInit(const char *str)
*/
MECAB_DLL_EXTERN int mecab_nbest_init(mecab_t *mecab, const char *str);
/**
* C wrapper of MeCab::Tagger::parseNBestInit(const char *str, size_t len)
*/
MECAB_DLL_EXTERN int mecab_nbest_init2(mecab_t *mecab, const char *str, size_t len);
/**
* C wrapper of MeCab::Tagger::next()
*/
MECAB_DLL_EXTERN const char* mecab_nbest_next_tostr(mecab_t *mecab);
/**
* C wrapper of MeCab::Tagger::next(char *ostr, size_t olen)
*/
MECAB_DLL_EXTERN char* mecab_nbest_next_tostr2(mecab_t *mecab, char *ostr, size_t olen);
/**
* C wrapper of MeCab::Tagger::nextNode()
*/
MECAB_DLL_EXTERN const mecab_node_t* mecab_nbest_next_tonode(mecab_t *mecab);
/**
* C wrapper of MeCab::Tagger::formatNode(const Node *node)
*/
MECAB_DLL_EXTERN const char* mecab_format_node(mecab_t *mecab, const mecab_node_t *node);
/**
* C wrapper of MeCab::Tagger::dictionary_info()
*/
MECAB_DLL_EXTERN const mecab_dictionary_info_t* mecab_dictionary_info(mecab_t *mecab);
/* lattice interface */
/**
* C wrapper of MeCab::createLattice()
*/
MECAB_DLL_EXTERN mecab_lattice_t *mecab_lattice_new();
/**
* C wrapper of MeCab::deleteLattice(lattice)
*/
MECAB_DLL_EXTERN void mecab_lattice_destroy(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::clear()
*/
MECAB_DLL_EXTERN void mecab_lattice_clear(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::is_available()
*/
MECAB_DLL_EXTERN int mecab_lattice_is_available(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::bos_node()
*/
MECAB_DLL_EXTERN mecab_node_t *mecab_lattice_get_bos_node(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::eos_node()
*/
MECAB_DLL_EXTERN mecab_node_t *mecab_lattice_get_eos_node(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::begin_nodes()
*/
MECAB_DLL_EXTERN mecab_node_t **mecab_lattice_get_all_begin_nodes(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::end_nodes()
*/
MECAB_DLL_EXTERN mecab_node_t **mecab_lattice_get_all_end_nodes(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::begin_nodes(pos)
*/
MECAB_DLL_EXTERN mecab_node_t *mecab_lattice_get_begin_nodes(mecab_lattice_t *lattice, size_t pos);
/**
* C wrapper of MeCab::Lattice::end_nodes(pos)
*/
MECAB_DLL_EXTERN mecab_node_t *mecab_lattice_get_end_nodes(mecab_lattice_t *lattice, size_t pos);
/**
* C wrapper of MeCab::Lattice::sentence()
*/
MECAB_DLL_EXTERN const char *mecab_lattice_get_sentence(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::set_sentence(sentence)
*/
MECAB_DLL_EXTERN void mecab_lattice_set_sentence(mecab_lattice_t *lattice, const char *sentence);
/**
* C wrapper of MeCab::Lattice::set_sentence(sentence, len)
*/
MECAB_DLL_EXTERN void mecab_lattice_set_sentence2(mecab_lattice_t *lattice, const char *sentence, size_t len);
/**
* C wrapper of MeCab::Lattice::size()
*/
MECAB_DLL_EXTERN size_t mecab_lattice_get_size(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::Z()
*/
MECAB_DLL_EXTERN double mecab_lattice_get_z(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::set_Z()
*/
MECAB_DLL_EXTERN void mecab_lattice_set_z(mecab_lattice_t *lattice, double Z);
/**
* C wrapper of MeCab::Lattice::theta()
*/
MECAB_DLL_EXTERN double mecab_lattice_get_theta(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::set_theta()
*/
MECAB_DLL_EXTERN void mecab_lattice_set_theta(mecab_lattice_t *lattice, double theta);
/**
* C wrapper of MeCab::Lattice::next()
*/
MECAB_DLL_EXTERN int mecab_lattice_next(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::request_type()
*/
MECAB_DLL_EXTERN int mecab_lattice_get_request_type(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::has_request_type()
*/
MECAB_DLL_EXTERN int mecab_lattice_has_request_type(mecab_lattice_t *lattice, int request_type);
/**
* C wrapper of MeCab::Lattice::set_request_type()
*/
MECAB_DLL_EXTERN void mecab_lattice_set_request_type(mecab_lattice_t *lattice, int request_type);
/**
* C wrapper of MeCab::Lattice::add_request_type()
*/
MECAB_DLL_EXTERN void mecab_lattice_add_request_type(mecab_lattice_t *lattice, int request_type);
/**
* C wrapper of MeCab::Lattice::remove_request_type()
*/
MECAB_DLL_EXTERN void mecab_lattice_remove_request_type(mecab_lattice_t *lattice, int request_type);
/**
* C wrapper of MeCab::Lattice::newNode();
*/
MECAB_DLL_EXTERN mecab_node_t *mecab_lattice_new_node(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::toString()
*/
MECAB_DLL_EXTERN const char *mecab_lattice_tostr(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::toString(buf, size)
*/
MECAB_DLL_EXTERN const char *mecab_lattice_tostr2(mecab_lattice_t *lattice, char *buf, size_t size);
/**
* C wrapper of MeCab::Lattice::enumNBestAsString(N)
*/
MECAB_DLL_EXTERN const char *mecab_lattice_nbest_tostr(mecab_lattice_t *lattice, size_t N);
/**
* C wrapper of MeCab::Lattice::enumNBestAsString(N, buf, size)
*/
MECAB_DLL_EXTERN const char *mecab_lattice_nbest_tostr2(mecab_lattice_t *lattice, size_t N, char *buf, size_t size);
/**
* C wrapper of MeCab::Lattice::has_constraint()
*/
MECAB_DLL_EXTERN int mecab_lattice_has_constraint(mecab_lattice_t *lattice);
/**
* C wrapper of MeCab::Lattice::boundary_constraint(pos)
*/
MECAB_DLL_EXTERN int mecab_lattice_get_boundary_constraint(mecab_lattice_t *lattice, size_t pos);
/**
* C wrapper of MeCab::Lattice::feature_constraint(pos)
*/
MECAB_DLL_EXTERN const char *mecab_lattice_get_feature_constraint(mecab_lattice_t *lattice, size_t pos);
/**
* C wrapper of MeCab::Lattice::boundary_constraint(pos, type)
*/
MECAB_DLL_EXTERN void mecab_lattice_set_boundary_constraint(mecab_lattice_t *lattice, size_t pos, int boundary_type);
/**
* C wrapper of MeCab::Lattice::set_feature_constraint(begin_pos, end_pos, feature)
*/
MECAB_DLL_EXTERN void mecab_lattice_set_feature_constraint(mecab_lattice_t *lattice, size_t begin_pos, size_t end_pos, const char *feature);
/**
* C wrapper of MeCab::Lattice::what()
*/
MECAB_DLL_EXTERN const char *mecab_lattice_strerror(mecab_lattice_t *lattice);
/* model interface */
/**
* C wapper of MeCab::Model::create(argc, argv)
*/
MECAB_DLL_EXTERN mecab_model_t *mecab_model_new(int argc, char **argv);
/**
* C wapper of MeCab::Model::create(arg)
*/
MECAB_DLL_EXTERN mecab_model_t *mecab_model_new2(const char *arg);
/**
* C wapper of MeCab::deleteModel(model)
*/
MECAB_DLL_EXTERN void mecab_model_destroy(mecab_model_t *model);
/**
* C wapper of MeCab::Model::createTagger()
*/
MECAB_DLL_EXTERN mecab_t *mecab_model_new_tagger(mecab_model_t *model);
/**
* C wapper of MeCab::Model::createLattice()
*/
MECAB_DLL_EXTERN mecab_lattice_t *mecab_model_new_lattice(mecab_model_t *model);
/**
* C wrapper of MeCab::Model::swap()
*/
MECAB_DLL_EXTERN int mecab_model_swap(mecab_model_t *model, mecab_model_t *new_model);
/**
* C wapper of MeCab::Model::dictionary_info()
*/
MECAB_DLL_EXTERN const mecab_dictionary_info_t* mecab_model_dictionary_info(mecab_model_t *model);
/**
* C wrapper of MeCab::Model::transition_cost()
*/
MECAB_DLL_EXTERN int mecab_model_transition_cost(mecab_model_t *model,
unsigned short rcAttr,
unsigned short lcAttr);
/**
* C wrapper of MeCab::Model::lookup()
*/
MECAB_DLL_EXTERN mecab_node_t *mecab_model_lookup(mecab_model_t *model,
const char *begin,
const char *end,
mecab_lattice_t *lattice);
/* static functions */
MECAB_DLL_EXTERN int mecab_do(int argc, char **argv);
MECAB_DLL_EXTERN int mecab_dict_index(int argc, char **argv);
MECAB_DLL_EXTERN int mecab_dict_gen(int argc, char **argv);
MECAB_DLL_EXTERN int mecab_cost_train(int argc, char **argv);
MECAB_DLL_EXTERN int mecab_system_eval(int argc, char **argv);
MECAB_DLL_EXTERN int mecab_test_gen(int argc, char **argv);
#endif
#ifdef __cplusplus
}
#endif
/* C++ interface */
#ifdef __cplusplus
namespace MeCab {
typedef struct mecab_dictionary_info_t DictionaryInfo;
typedef struct mecab_path_t Path;
typedef struct mecab_node_t Node;
template <typename N, typename P> class Allocator;
class Tagger;
/**
* Lattice class
*/
class MECAB_DLL_CLASS_EXTERN Lattice {
public:
/**
* Clear all internal lattice data.
*/
virtual void clear() = 0;
/**
* Return true if result object is available.
* @return boolean
*/
virtual bool is_available() const = 0;
/**
* Return bos (begin of sentence) node.
* You can obtain all nodes via "for (const Node *node = lattice->bos_node(); node; node = node->next) {}"
* @return bos node object
*/
virtual Node *bos_node() const = 0;
/**
* Return eos (end of sentence) node.
* @return eos node object
*/
virtual Node *eos_node() const = 0;
#ifndef SWIG
/**
* This method is used internally.
*/
virtual Node **begin_nodes() const = 0;
/**
* This method is used internally.
*/
virtual Node **end_nodes() const = 0;
#endif
/**
* Return node linked list ending at |pos|.
* You can obtain all nodes via "for (const Node *node = lattice->end_nodes(pos); node; node = node->enext) {}"
* @param pos position of nodes. 0 <= pos < size()
* @return node linked list
*/
virtual Node *end_nodes(size_t pos) const = 0;
/**
* Return node linked list starting at |pos|.
* You can obtain all nodes via "for (const Node *node = lattice->begin_nodes(pos); node; node = node->bnext) {}"
* @param pos position of nodes. 0 <= pos < size()
* @return node linked list
*/
virtual Node *begin_nodes(size_t pos) const = 0;
/**
* Return sentence.
* If MECAB_NBEST or MECAB_PARTIAL mode is off, the returned poiner is the same as the one set by set_sentence().
* @return sentence
*/
virtual const char *sentence() const = 0;
/**
* Set sentence. This method does not take the ownership of the object.
* @param sentence sentence
*/
virtual void set_sentence(const char *sentence) = 0;
#ifndef SWIG
/**
* Set sentence. This method does not take the ownership of the object.
* @param sentence sentence
* @param len length of the sentence
*/
virtual void set_sentence(const char *sentence, size_t len) = 0;
#endif
/**
* Return sentence size.
* @return sentence size
*/
virtual size_t size() const = 0;
/**
* Set normalization factor of CRF.
* @param Z new normalization factor.
*/
virtual void set_Z(double Z) = 0;
/**
* return normalization factor of CRF.
* @return normalization factor.
*/
virtual double Z() const = 0;
/**
* Set temparature parameter theta.
* @param theta temparature parameter.
*/
virtual void set_theta(float theta) = 0;
/**
* Return temparature parameter theta.
* @return temparature parameter.
*/
virtual float theta() const = 0;
/**
* Obtain next-best result. The internal linked list structure is updated.
* You should set MECAB_NBEST reques_type in advance.
* Return false if no more results are available or request_type is invalid.
* @return boolean
*/
virtual bool next() = 0;
/**
* Return the current request type.
* @return request type
*/
virtual int request_type() const = 0;
/**
* Return true if the object has a specified request type.
* @return boolean
*/
virtual bool has_request_type(int request_type) const = 0;
/**
* Set request type.
* @param request_type new request type assigned
*/
virtual void set_request_type(int request_type) = 0;
/**
* Add request type.
* @param request_type new request type added
*/
virtual void add_request_type(int request_type) = 0;
/**
* Remove request type.
* @param request_type new request type removed
*/
virtual void remove_request_type(int request_type) = 0;
#ifndef SWIG
/**
* This method is used internally.
*/
virtual Allocator<Node, Path> *allocator() const = 0;
#endif
/**
* Return new node. Lattice objects has the ownership of the node.
* @return new node object
*/
virtual Node *newNode() = 0;
/**
* Return string representation of the lattice.
* Returned object is managed by this instance. When clear/set_sentence() method
* is called, the returned buffer is initialized.
* @return string representation of the lattice
*/
virtual const char *toString() = 0;
/**
* Return string representation of the node.
* Returned object is managed by this instance. When clear/set_sentence() method
* is called, the returned buffer is initialized.
* @return string representation of the node
* @param node node object
*/
virtual const char *toString(const Node *node) = 0;
/**
* Return string representation of the N-best results.
* Returned object is managed by this instance. When clear/set_sentence() method
* is called, the returned buffer is initialized.
* @return string representation of the node
* @param N how many results you want to obtain
*/
virtual const char *enumNBestAsString(size_t N) = 0;
#ifndef SWIG
/**
* Return string representation of the lattice.
* Result is saved in the specified buffer.
* @param buf output buffer
* @param size output buffer size
* @return string representation of the lattice
*/
virtual const char *toString(char *buf, size_t size) = 0;
/**
* Return string representation of the node.
* Result is saved in the specified buffer.
* @param node node object
* @param buf output buffer
* @param size output buffer size
* @return string representation of the lattice
*/
virtual const char *toString(const Node *node,
char *buf, size_t size) = 0;
/**
* Return string representation of the N-best result.
* Result is saved in the specified.
* @param N how many results you want to obtain
* @param buf output buffer
* @param size output buffer size
* @return string representation of the lattice
*/
virtual const char *enumNBestAsString(size_t N, char *buf, size_t size) = 0;
#endif
/**
* Returns true if any parsing constraint is set
*/
virtual bool has_constraint() const = 0;
/**
* Returns the boundary constraint at the position.
* @param pos the position of constraint