Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 1dcef8f7b86dc3b3c7b89dd968fc4c12 > files > 24

mecab-0.96-1mdv2008.1.i586.rpm

<!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 &lt;mecab.h&gt;
#include &lt;stdio.h&gt;

#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 &lt;iostream&gt;
#include &lt;mecab.h&gt;

#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>