<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>MeCab: Yet Another Japanese Dependency Structure Analyzer</title> <link type="text/css" rel="stylesheet" href="mecab.css"> </head> <body> <h1>MeCab ¥é¥¤¥Ö¥é¥ê</h1> <p>$Id: libmecab.html 65 2007-01-30 00:52:53Z taku-ku $;</p> <h2><a name="c-interface">C ¥é¥¤¥Ö¥é¥ê»ÅÍÍ</a></h2> <p>C ¥é¥¤¥Ö¥é¥ê¤Ï°Ê²¼¤Î´Ø¿ô¤òÄ󶡤·¤Æ¤¤¤Þ¤¹.</p> <dl> <dt><code><font color="#dc143c">mecab_t *</font><font color= "DarkBlue">mecab_new</font> (int argc, char **argv)</code></dt> <dd>mecab ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤Þ¤¹.<br> °ú¿ô¤Ë¤Ï, C ¸À¸ì¤Î, main ´Ø¿ô¤Ç»ÈÍѤµ¤ì¤ë argc, argv ¥¹¥¿¥¤¥ë¤Î°ú¿ô¤òÍ¿¤¨¤Þ¤¹.<br> ¤³¤Î°ú¿ô¤Ï, <a href="mecab.html">mecab ¥³¥Þ¥ó¥É</a>¤ÈƱ¤¸ÊýË¡¤Ç½èÍý¤µ¤ì¤Þ¤¹.<br> À®¸ù¤¹¤ì¤Ð, mecab_t ·¿¤Î¥Ý¥¤¥ó¥¿¤¬Ê֤äƤ¤Þ¤¹. ¤³¤Î¥Ý¥¤¥ó¥¿¤òÄ̤·¤Æ²òÀÏ ¤ò¹Ô¤¤¤Þ¤¹. ¼ºÇÔ¤¹¤ì¤Ð NULL ¤¬Ê֤äƤ¤Þ¤¹.<br> </dd> <dt><code><font color="#dc143c">mecab_t *</font><font color= "DarkBlue">mecab_new2</font> (const char *arg)</code></dt> <dd>mecab ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤Þ¤¹.<br> °ú¿ô¤Ë¤Ï, °ì¤Ä¤Îʸ»úÎó¤È¤·¤Æɽ¸½¤·¤¿¥Ñ¥é¥á¡¼¥¿¤òÍ¿¤¨¤Þ¤¹.<br> À®¸ù¤¹¤ì¤Ð, mecab_t ·¿¤Î¥Ý¥¤¥ó¥¿¤¬Ê֤äƤ¤Þ¤¹. ¤³¤Î¥Ý¥¤¥ó¥¿¤òÄ̤·¤Æ²òÀϤò¹Ô¤¤¤Þ¤¹.<br> </dd> <dt><code><font color="#dc143c">const char *</font><font color= "DarkBlue">mecab_version</font>()</code></dt> <dd>mecab ¤Î version ¤òʸ»úÎó¤È¤·¤Æ¼èÆÀ¤·¤Þ¤¹.<br> </dd> <dt><code><font color="#dc143c">const char *</font><font color= "DarkBlue">mecab_strerror</font> (mecab_t* m)</code></dt> <dd>¥¨¥é¡¼¤ÎÆâÍƤòʸ»úÎó¤È¤·¤Æ¼èÆÀ¤·¤Þ¤¹. mecab_sparse_tostr Åù¤Ç, NULL ¤¬Ê֤äƤ¤¿¾ì¹ç¤Ë, mecab_strerror ¤ò¸Æ¤Ö¤³¤È¤Ç, ¥¨¥é¡¼¤ÎÆâÍƤò¼èÆÀ¤Ç¤¤Þ¤¹. mecab_new,mecab_new2 ¤Î¥¨¥é¡¼¤Ï, m ¤ò NULL ¤È»ØÄꤷ¤Æ¤¯¤À¤µ¤¤. <br> </dd> <dt><code><font color="#dc143c">const char *</font><font color= "DarkBlue">mecab_sparse_tostr</font> (mecab_t *m, const char *str)</code></dt> <dd>²òÀϤò¹Ô¤¤¤Þ¤¹. °ú¿ô¤Ë¤Ï, mecab_new ¤ÇÆÀ¤é¤ì¤¿ mecab_t ·¿¤Î¥Ý¥¤¥ó¥¿¤È,<br> ²òÀϤ·¤¿¤¤Ê¸¤ò char ·¿¤Î¥Ý¥¤¥ó¥¿Ê¸»úÎó¤È¤·¤ÆÍ¿¤¨¤Þ¤¹.<br> À®¸ù¤¹¤ì¤Ð, ²òÀϸå¤Î·ë²Ì¤¬ char ·¿¤Î¥Ý¥¤¥ó¥¿¤È¤·¤ÆÊÖ¤ê, ¼ºÇÔ¤¹¤ì¤Ð, NULL ¤¬Ê֤äƤ¤Þ¤¹<br> Ìá¤êÃͤΥݥ¤¥ó¥¿¤¬»Ø¤¹¥á¥â¥êÎΰè¤Ï, ¸Æ¤Ó½Ð¤·Â¦¤Ç´ÉÍý¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¤¬,<br> mecab_sparse_tostr ¤ò¸Æ¤ÖÅ٤˾å½ñ¤¤µ¤ì¤Þ¤¹.<br> ¤Þ¤¿, mecab_destroy ¤ò¸Æ¤Ö¤È²òÊü¤µ¤ì¤Þ¤¹. <br> </dd> <dt><code><font color="#dc143c">const char *</font><font color= "DarkBlue">mecab_sparse_tostr2</font> (mecab_t *m, const char *str, size_t len)</code></dt> <dd>mecab_sparse_tostr ¤È¤Û¤ÜƱ¤¸¤Ç¤¹¤¬, len ¤Ë¤Æ, ²òÀϤ¹¤ëʸ¤ÎŤµ¤ò»ØÄê¤Ç¤¤Þ¤¹. <br> </dd> <dt><code><font color="#dc143c">char *</font><font color= "DarkBlue">mecab_sparse_tostr3</font> (mecab_t *m, const char *istr,size_t ilen char *ostr, size_t olen)</code></dt> <dd>mecab_sparse_tostr2 ¤Ë²Ã¤¨, ½ÐÎÏÍѤΠ¥Ð¥Ã¥Õ¥¡Îΰè (ostr), µÚ¤Ó¤½¤ÎŤµ (olen) ¤ò»ØÄê¤Ç¤¤Þ¤¹. ostr ¤ÎÎΰè¤Î´ÉÍý¤Ï, ¸Æ¤Ó½Ð¤·Â¦¤¬¹Ô¤¤¤Þ¤¹. À®¸ù¤¹¤ì¤Ð, ²òÀϸå¤Î·ë²Ì¤¬ char ·¿¤Î¥Ý¥¤¥ó¥¿¤È¤·¤ÆÊ֤äƤ¤Þ¤¹. ¤³¤ì¤Ï, ostr ¤ÈƱ¤¸¤Ë¤Ê¤ê¤Þ¤¹. ¤â¤·, ²òÀÏ·ë²Ì¤ÎŤµ¤¬ olen °Ê¾å¤Ë¤Ê¤Ã¤¿¾ì¹ç¤Ï, ²òÀϼºÇԤȤߤʤ·, NULL ¤òÊÖ¤·¤Þ¤¹. <br> </dd> <dt><code><font color="#dc143c">const char *</font><font color="DarkBlue">mecab_nbest_sparse_tostr</font> (mecab_t *m, size_t N, const char *str) </code></dt> <dd> mecab_sparse_tostr () ¤Î N-Best ²ò½ÐÎÏ version ¤Ç¤¹. N ¤Ë¤Æ²òÀÏ·ë²Ì¤Î¸Ä ¿ô¤ò»ØÄꤷ¤Þ¤¹. ¤Þ¤¿, N-Best ¤Îµ¡Ç½¤ò»È¤¦¾ì¹ç¤Ï, ɬ¤º mecab_new ¤Ë¤Æ -l 1 ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹. </dd> <dt><code><font color="#dc143c">const char *</font><font color="DarkBlue">mecab_nbest_sparse_tostr2</font> (mecab_t *m, size_t N, const char *str, size_t len) </code></dt> <dd> mecab_sparse_tostr2 () ¤Î N-Best ²ò½ÐÎÏ version ¤Ç¤¹. N ¤Ë¤Æ²òÀÏ·ë²Ì¤Î¸Ä ¿ô¤ò»ØÄꤷ¤Þ¤¹. </dd> <dt><code><font color="#dc143c">char *</font><font color="DarkBlue">mecab_nbest_sparse_tostr3</font> (mecab_t *m, size_t N, const char *str, size_t len, char *ostr, size_t olen) </code></dt> <dd> mecab_sparse_tostr3 () ¤Î N-Best ²ò½ÐÎÏ version ¤Ç¤¹. N ¤Ë¤Æ²òÀÏ·ë²Ì¤Î¸Ä ¿ô¤ò»ØÄꤷ¤Þ¤¹. </dd> <dt><code><font color="#dc143c">int </font><font color="DarkBlue">mecab_nbest_init</font> (mecab_t* m, const char* str); </code></dt> <dd> ²òÀÏ·ë²Ì¤ò, ³Î¤«¤é¤·¤¤¤â¤Î¤«¤é½çÈ֤˼èÆÀ¤¹¤ë¾ì¹ç¤Ë¤³¤Î´Ø¿ô¤Ç½é´ü²½¤ò¹Ô¤¤ ¤Þ¤¹. ²òÀϤ·¤¿¤¤Ê¸¤ò str ¤Ë»ØÄꤷ¤Þ¤¹. ½é´ü²½¤ËÀ®¸ù¤¹¤ë¤È 1 ¤ò, ¼ºÇÔ¤¹¤ë ¤È 0 ¤òÊÖ¤·¤Þ¤¹. ¼ºÇԤθ¶°ø¤Ï, mecab_strerror ¤Ç¼èÆÀ¤Ç¤¤Þ¤¹. </dd> <dt><code><font color="#dc143c">int </font><font color="DarkBlue">mecab_nbest_init2</font> (mecab_t* m, const char* str, len); </code></dt> <dd> mecab_nbest_init () ¤È¤Û¤ÜƱ¤¸¤Ç¤¹¤¬, len ¤Ë¤Æʸ¤ÎŤµ¤ò»ØÄê¤Ç¤¤Þ¤¹. </dd> <dt><code><font color="#dc143c">const char *</font><font color="DarkBlue">mecab_nbest_next_tostr</font> (mecab_t* m) </code></dt> <dd> mecab_nbest_init() ¤Î¸å, ¤³¤Î´Ø¿ô¤ò½ç¼¡¸Æ¤Ö¤³¤È¤Ç, ³Î¤«¤é¤·¤¤²òÀÏ·ë²Ì ¤ò, ½çÈ֤˼èÆÀ¤Ç¤¤Þ¤¹. ¼ºÇÔ¤¹¤ë¤È (¤³¤ì°Ê¾å¤Î²ò¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç) NULL ¤òÊÖ¤·¤Þ¤¹. ¼ºÇԤθ¶°ø¤Ï, mecab_strerror ¤Ç¼èÆÀ¤Ç¤¤Þ¤¹. </dd> <dt><code><font color="#dc143c">char *</font><font color="DarkBlue">mecab_nbest_next_tostr2</font> (mecab_t *m , char *ostr, size_t olen) </code></dt> <dd> mecab_nbest_tostr() ¤È¤Û¤ÜƱ¤¸¤Ç¤¹¤¬, ostr, olen ¤Ë¤Æ½ÐÎÏÍѤΥХåե¡¤ò »ØÄê¤Ç¤¤Þ¤¹. ¼ºÇÔ¤¹¤ë¤È (¤³¤ì°Ê¾å¤Î²ò¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç) NULL ¤òÊÖ¤·¤Þ¤¹. ¤Þ¤¿, ½ÐÎϥХåե¡¤¬°î¤ì¤¿¾ì¹ç¤â NULL ¤òÊÖ¤·¤Þ¤¹. ¼ºÇԤθ¶°ø¤Ï, mecab_strerror ¤Ç¼èÆÀ¤Ç¤¤Þ¤¹. </dd> <dt><code><font color="#dc143c">void</font> <font color= "DarkBlue">mecab_destroy</font>(mecab_t *m)</code></dt> <dd>mecab_t ·¿¤Î¥Ý¥¤¥ó¥¿¤ò²òÊü¤·¤Þ¤¹. <br> <br> </dd> </dl> <p>·ÁÂÖÁǾðÊó¤ò¼è¤ê½Ð¤¹¤Ë¤Ï,°Ê²¼¤Î mecab_node_t ¹½Â¤ÂÎ¤È mecab_sparse_tonode ´Ø¿ô¤ò»È¤¤¤Þ¤¹</p> <pre> #define MECAB_NOR_NODE 0 #define MECAB_UNK_NODE 1 #define MECAB_BOS_NODE 2 #define MECAB_EOS_NODE 3 struct mecab_node_t { struct mecab_node_t *prev; // °ì¤ÄÁ°¤Î·ÁÂÖÁǤؤΥݥ¤¥ó¥¿ struct mecab_node_t *next; // °ì¤ÄÀè¤Î·ÁÂÖÁǤؤΥݥ¤¥ó¥¿ struct mecab_node_t *enext; // Ʊ¤¸°ÌÃ֤ǽª¤ï¤ë·ÁÂÖÁǤؤΥݥ¤¥ó¥¿ struct mecab_node_t *bnext; // Ʊ¤¸³«»Ï°ÌÃ֤ǻϤޤë·ÁÂÖÁǤؤΥݥ¤¥ó¥¿ char *surface; // ·ÁÂÖÁǤÎʸ»úÎó¾ðÊó // NULL terminate¤µ¤ì¤Æ¤¤¤Þ¤»¤ó. ʸ»úÎó¤È¤·¤Æ¼è¤ê½Ð¤¹¤Ë¤Ï // strncpy(buf, node->feature, node->length) ¤È¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹ char *feature; // CSV ¤Çɽµ¤µ¤ì¤¿ÁÇÀ¾ðÊó unsigned int length; // ·ÁÂÖÁǤÎŤµ unsigned int rlength; // ·ÁÂÖÁǤÎŤµ(ÀèƬ¤Î¥¹¥Ú¡¼¥¹¤ò´Þ¤à) unsigned int id; // ·ÁÂÖÁǤËÉÕÍ¿¤µ¤ì¤ë ¥æ¥Ë¡¼¥¯ID unsigned short rcAttr; // ±¦Ê¸Ì® id unsigned short lcAttr; // º¸Ê¸Ì® id unsigned short posid; // ·ÁÂÖÁÇ ID (̤»ÈÍÑ) unsigned char char_type; // ʸ»ú¼ï¾ðÊó unsigned char stat; // ·ÁÂÖÁǤμïÎà: °Ê²¼¤Î¥Þ¥¯¥í¤ÎÃÍ // #define MECAB_NOR_NODE 0 // #define MECAB_UNK_NODE 1 // #define MECAB_BOS_NODE 2 // #define MECAB_EOS_NODE 3 unsigned char isbest; // ¥Ù¥¹¥È²ò¤Î¾ì¹ç 1, ¤½¤ì°Ê³° 0 float alpha; // forward backward ¤Î foward log ³ÎΨ float beta; // forward backward ¤Î backward log ³ÎΨ float prob; // ¼þÊÕ³ÎΨ // alpha, beta, prob ¤Ï -l 2 ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤¿»þ¤ËÄêµÁ¤µ¤ì¤Þ¤¹ short wcost; // ñ¸ìÀ¸µ¯¥³¥¹¥È long cost; // ÎßÀÑ¥³¥¹¥È }; </pre> <dl> <dt><code><font color="#dc143c">mecab_node_t *</font><font color= "DarkBlue">mecab_sparse_tonode</font> (mecab_t *m, const char *str)</code></dt> <dd>²òÀϤò¹Ô¤¤¤Þ¤¹. °ú¿ô¤Ë¤Ï, mecab_new ¤ÇÆÀ¤é¤ì¤¿ mecab_t ·¿¤Î¥Ý¥¤¥ó¥¿¤È,<br> ²òÀϤ·¤¿¤¤Ê¸¤ò char ·¿¤Î¥Ý¥¤¥ó¥¿Ê¸»úÎó¤È¤·¤ÆÍ¿¤¨¤Þ¤¹.<br> À®¸ù¤¹¤ì¤Ð, ʸƬ¤Î·ÁÂÖÁÇ(mecab_node_t·¿)¤Ø¤Î¥Ý¥¤¥ó¥¿¤¬ÊÖ¤ê, ¼ºÇÔ¤¹¤ì¤Ð, NULL¤¬Ê֤äƤ¤Þ¤¹.<br> mecab_node_t ¤ÏÁÐÊý¸þ¥ê¥¹¥È¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤¿¤á next, prev ¤ò½ç¤Ë¤¿¤É¤ë»ö¤Ç Á´·ÁÂÖÁǤòÎóµó¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹.<br> Ìá¤êÃͤΥݥ¤¥ó¥¿¤¬»Ø¤¹¥á¥â¥êÎΰè¤Ï, ¸Æ¤Ó½Ð¤·Â¦¤Ç´ÉÍý¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¤¬,mecab_sparse_tonode ¤ò¸Æ¤ÖÅ٤˾å½ñ¤¤µ¤ì¤Þ¤¹.<br> ¤Þ¤¿, mecab_destroy ¤ò¸Æ¤Ö¤È²òÊü¤µ¤ì¤Þ¤¹. <br> </dd> <dt><code><font color="#dc143c">mecab_node_t *</font><font color= "DarkBlue">mecab_sparse_tonode2</font> (mecab_t *m, const char *str, size_t len)</code></dt> <dd>mecab_sparse_tonode ¤È¤Û¤ÜƱ¤¸¤Ç¤¹¤¬, len ¤Ë¤Æ, ²òÀϤ¹¤ëʸ¤ÎŤµ¤ò»ØÄê¤Ç¤¤Þ¤¹. <br> </dd> <dt><code><font color="#dc143c">mecab_node_t *</font><font color="DarkBlue">mecab_next_tonode</font> (mecab_t* m) </code></dt> <dd> mecab_next_tostr ¤È¤Û¤ÜƱ¤¸¤Ç¤¹¤¬,ʸ»úÎó¤Ç¤Ï¤Ê¤¯ mecab_node_t ·¿¤Î·ÁÂÖÁǾðÊó¤òÊÖ¤·¤Þ¤¹. </dd> </dl> <h2><a name="c-sample">C ¥µ¥ó¥×¥ë</a></h2> <p>example/example.c </p> <pre> #include <mecab.h> #include <stdio.h> #define CHECK(eval) if (! eval) { \ fprintf (stderr, "Exception:%s\n", mecab_strerror (mecab)); \ mecab_destroy(mecab); \ return -1; } int main (int argc, char **argv) { char input[1024] = "ÂÀϺ¤Ï¼¡Ïº¤¬»ý¤Ã¤Æ¤¤¤ëËܤò²Ö»Ò¤ËÅϤ·¤¿¡£"; mecab_t *mecab; mecab_node_t *node; const char *result; int i; mecab = mecab_new (argc, argv); CHECK(mecab); result = mecab_sparse_tostr(mecab, input); CHECK(result) printf ("INPUT: %s\n", input); printf ("RESULT:\n%s", result); result = mecab_nbest_sparse_tostr (mecab, 3, input); CHECK(result); fprintf (stdout, "NBEST:\n%s", result); CHECK(mecab_nbest_init(mecab, input)); for (i = 0; i < 3; ++i) { printf ("%d:\n%s", i, mecab_nbest_next_tostr (mecab)); } node = mecab_sparse_tonode(mecab, input); CHECK(node); for (; node; node = node->next) { fwrite (node->surface, sizeof(char), node->length, stdout); printf("\t%s\n", node->feature); } node = mecab_sparse_tonode(mecab, input); CHECK(node); for (; node; node = node->next) { printf("%d ", node->id); if (node->stat == MECAB_BOS_NODE) printf("BOS"); else if (node->stat == MECAB_EOS_NODE) printf("EOS"); else fwrite (node->surface, sizeof(char), node->length, stdout); printf(" %s %d %d %d %d %d %d %d %d %f %f %f %d\n", node->feature, (int)(node->surface - input), (int)(node->surface - input + node->length), node->rcAttr, node->lcAttr, node->posid, (int)node->char_type, (int)node->stat, (int)node->isbest, node->alpha, node->beta, node->prob, node->cost); } mecab_destroy(mecab); return 0; } </pre> <h2><a name="c++">C++ ¥é¥¤¥Ö¥é¥ê»ÅÍÍ</a></h2> <p>°Ê²¼¤¬ C++ API ¤Ç¤¹. ´ðËÜŪ¤Ë C ¤Î¥¤¥ó¥¿¥Õ¥§¥¤¥¹¤ÈƱ°ì¤Ç¤¹¤¬,</p> <ul> <li>mecab_t ¤¬ MeCab::Tagger <li>mecab_node_t ¤¬ MeCab::Node <li>mecab_new() ¤¬ MeCab::createTagger() ¥Õ¥¡¥¯¥È¥ê´Ø¿ô <li>mecab_destroy () ¤Ï¤Ê¤¯,delete ¤ò¸Æ¤ó¤Ç³«Êü¤¹¤ë </ul> <p>¤È¤¤¤Ã¤¿°ã¤¤¤¬¤¢¤ê¤Þ¤¹.</p> </p> <pre> namespace MeCab { typedef struct mecab_node_t Node; class Tagger { public: virtual const char* parse(const char*, size_t, char*, size_t) = 0; virtual const char* parse(const char*, size_t = 0) = 0; virtual Node* parseToNode(const char*, size_t = 0) = 0; virtual const char* parseNBest(size_t, const char*, size_t = 0) = 0; virtual bool parseNBestInit(const char*, size_t = 0) = 0; virtual Node* nextNode() = 0; virtual const char* next() = 0; virtual const char* formatNode(Node *) = 0; virtual const char* next(char*, size_t) = 0; virtual const char* parseNBest(size_t, const char*, size_t, char *, size_t) = 0; virtual const char* formatNode(Node *, char *, size_t) = 0; virtual const char* what() = 0; virtual ~Tagger() {}; static const char *version(); static Tagger* create(int, char**); static Tagger* create(const char*); }; /* factory method */ Tagger *createTagger (int, char**); Tagger *createTagger (const char*); const char* getTaggerError (); } </pre> <h2><a name="c++-sample">C++ ¥µ¥ó¥×¥ë</a></h2> <pre> #include <iostream> #include <mecab.h> #define CHECK(eval) if (! eval) { \ const char *e = tagger ? tagger->what() : MeCab::getTaggerError(); \ std::cerr << "Exception:" << e << std::endl; \ delete tagger; \ return -1; } int main (int argc, char **argv) { char input[1024] = "ÂÀϺ¤Ï¼¡Ïº¤¬»ý¤Ã¤Æ¤¤¤ëËܤò²Ö»Ò¤ËÅϤ·¤¿¡£"; MeCab::Tagger *tagger = MeCab::createTagger (argc, argv); CHECK(tagger); const char *result = tagger->parse(input); CHECK(result); std::cout << "INPUT: " << input << std::endl; std::cout << "RESULT: " << result << std::endl; result = tagger->parseNBest(3, input); CHECK(result); std::cout << "NBEST: " << std::endl << result; CHECK(tagger->parseNBestInit(input)); for (int i = 0; i < 3; ++i) { std::cout << i << ":" << std::endl << tagger->next(); } MeCab::Node* node = tagger->parseToNode(input); CHECK(node); for (; node; node = node->next) { std::cout.write(node->surface, node->length); } node = tagger->parseToNode(input); CHECK(node); for (; node; node = node->next) { std::cout << node->id << ' '; if (node->stat == MECAB_BOS_NODE) std::cout << "BOS"; else if (node->stat == MECAB_EOS_NODE) std::cout << "EOS"; else std::cout.write (node->surface, node->length); std::cout << ' ' << node->feature << ' ' << (int)(node->surface - input) << ' ' << (int)(node->surface - input + node->length) << ' ' << node->rcAttr << ' ' << node->lcAttr << ' ' << node->posid << ' ' << (int)node->char_type << ' ' << (int)node->stat << ' ' << (int)node->isbest << ' ' << node->alpha << ' ' << node->beta << ' ' << node->prob << ' ' << node->cost << std::endl; } delete tagger; return 0; } </pre> <h2><a name="compile">¥³¥ó¥Ñ¥¤¥ëÊýË¡</a></h2> <ul> <li>UNIX ¤Î¾ì¹ç </li> <pre> % cc -O2 `mecab-config --cflags` example.c -o example \ `mecab-config --libs` </pre> <li>Windows ¤Î¾ì¹ç </li> <p>¤Þ¤º, ¥³¥ó¥Ñ¥¤¥ëºî¶È¤ò¹Ô¤¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë include\mecab.h, bin\libmecab.dll lib\libmecab.lib ¤ò¥³¥Ô¡¼¤·¤Þ¤¹. ¤³¤Î¸å¤Îºî¶È¤Ï, »ÈÍѤ¹¤ë¥³¥ó¥Ñ¥¤¥é¤Ë¤è¤Ã¤ÆÈù̯¤ËÊѤï¤ê¤Þ¤¹.</p> <ul> <li>cygwin/mingw ´Ä¶¤Î¾ì¹ç</li> <pre> % gcc -DDLL_IMPORT -I. example.c -o example.exe libmecab.dll </pre> <li>VC++ ´Ä¶¤Î¾ì¹ç</li> <pre> % cl -DDLL_IMPORT -I. example.c libmecab.lib </pre> </ul> </ul> <h2><a name="multi-thread">¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤Ë¤Ä¤¤¤Æ</a></h2> <p>MeCab ¤Ï,¥Þ¥ë¥Á¥¹¥ì¥Ã¥É´Ä¶¤Ç»ÈÍѤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹. 1¤Ä¤Î¥¹¥ì¥Ã¥É¤Ë 1¥¤¥ó¥¹¥¿¥ó¥¹(mecab_t *)¤ò³ä¤êÅö¤Æ¤ë¾ì¹ç¤Ï¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ç¤¹. ¤µ¤é¤Ë, Ʊ¤¸¼½ñ¤ò»È¤¤Â³¤±¤ë¸Â¤ê,¼½ñ¤òÊÝ»ý¤·¤Æ¤¤¤ë¥ê¥½¡¼¥¹¤Ï ºÆÍøÍѤµ¤ì¤ë¤¿¤á, Ê£¿ô¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®¤·¤Æ¤â¿¤¯¤Î¥á¥â¥ê¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó.</p> <p>°ì¤Ä¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÊ£¿ô¤Î¥¹¥ì¥Ã¥É¤«¤é»È¤¦¾ì¹ç¤ÏŬÅö¤ËÇÓ¾À©¸æ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹. ¤¿¤À¤·, ¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬°¤¤¤Î¤Ç¤ª´«¤á¤Ç¤¤Þ¤»¤ó. </p> <hr> <p>$Id: libmecab.html 65 2007-01-30 00:52:53Z taku-ku $;</p> </body> </html>