php MeCab extensionについて

2011/04/15

MeCab extensionの配布元から必要な情報をとりあえず抜出してみた。
Googleで「http://page2.xrea.jp/」のキャッシュを取得。

MeCab extension

MeCab を使って文章の形態素解析をする PHP 用の拡張モジュールです。

このモジュールは MeCab の API をラップした関数群に加えて、独自にノードの属性を連想配列として返す mecab_node_toarray() 関数および MeCab_Node::toArray() メソッドを提供します。また、PHP5 以降ではオブジェクト API も利用でき、SPL が有効なら MeCab_Node オブジェクトはイテレータとしても使えます。

Install

普通の PHP 拡張モジュールと同じように、下記のようにしてインストールします。

% /path/to/phpize
% ./configure --with-php-config=/path/to/php-config --with-mecab=/path/to/mecab-config
% make
% sudo make install
Usage

簡単な使用例は examples ディレクトリにあるファイルを見てください。

解析オプションは配列で指定します。値をとるオプションは、$options = array(‘-d’, ‘/usr/local/lib/mecab/dic/ipadic’); のようにオプション名の次に値を入れてください (‘オプション名’ => ‘値’ の連想配列も可)。’-d/usr/local/lib/mecab/dic/ipadic’, ‘–dicdir=/usr/local/lib/mecab/dic/ipadic’ のように、ひとつの文字列でオプションと値を同時に指定することはできません。

パスを指定するオプション (-r, -d, -u) の値は open_basedir と safe_mode のチェックを受け、一部のオプション (-o, -v, -h) は利用できません。

rcfile (-r), dicdir (-d), userdic (-u) の値は php.ini または ini_set() でも設定できます。

Downloads
  • php_mecab-0.2.0.tgz (alpha)
    • mecab_split() および MeCab::split() の第四引数として絞り込み用のコールバック関数を指定できるように変更。
      • コールバック関数は mecab_node_toarray() の返り値の配列のサブセット (*node, *path, isbest, sentence_length, alpha, beta, prob が定義されていない) を引数としてとり、boolean を返す。
      • PHP5 ではコールバック関数の DocComment で @mecab_element_require (ノード要素名) とアノーテーションすることで必要な要素を一つだけ取得することもできる。これにより PHP5 では Reflection 拡張モジュールに依存するようになった。
      • この機能を使った名詞だけを抽出するサンプルを追加。(examples/split-{func,oo}.php)
  • php_mecab-0.1.0.tgz (alpha)
    • ライセンスを MIT License に変更。
    • 辞書タイプ定数 MECAB_{SYS,USR,UNK{_DIC およびクラス定数 MeCab::{SYS,USR,UNK}_DIC を追加。
    • クラス定数 MeCab::TRAVERSE_{NEXT,ENEXT,BNEXT} を追加。これらは MeCab_Node オブジェクトをイテレータとして利用するときの遷移モードを設定するメソッド MeCab_Node::setTraverse() の引数として使う。
    • mecab_new(), MeCab_Tagger::__construct() のオプション引数の型を配列のみに変更。文字列等の無効な型が渡されたときは E_WARNING を発し、FALSE を返す。
    • 分かち書き結果を配列として返す関数 mecab_split(string $str[, string $dicdir[, string $userdic]]) およびスタティックメソッド MeCab::split(string $str[, string $dicdir[, string $userdic]]) を追加。
    • 辞書情報を連想配列として返す関数 mecab_dictionary_info(resource mecab $mecab) およびメソッド MeCab::dictionaryInfo(void) を追加。
    • リンクしている MeCab のバージョンを返す関数 mecab_version(void) およびスタティックメソッド MeCab::version(void) を追加。
    • MeCab 0.94 で実装された解析結果の全情報を取得できる API のサポートを追加。
      mecab_node_begin_node_list(resource mecab_node $node, int $index), mecab_node_end_node_list(resource mecab_node $node, int $index), MeCab_Node::getBeginNodeList(int $index), MeCab_Node::getEndNodeList(int $index)
      これにより、コンパイルには MeCab バージョン 0.94 以降が必須となる。
    • MeCab_Tagger クラスの別名として MeCab クラスを追加。
    • 関数 mecab_node_get_*() を mecab_node_*() に、 mecab_path_get_*() を mecab_path_*() に、それぞれリネーム。
    • php.ini または ini_set() で rcfile, dicdir, userdic のデフォルト値を設定できるようにした。
    • -r, -d, -u オプションで open_basedir と safe_mode のチェックをするように修正。
    • -o, -v, -h オプションを受け付けないように修正。
    • -O wakati オプションを付けたとき、-a オプションを付けたとき、および新機能のサンプルを追加。
    • mecab_destroy() 関数が mecab 以外の任意のリソースを開放できてしまうバグを修正。
    • 全面的にリファクタリングし、関連するオブジェクトが誤って廃棄されないように独自の参照カウンタを導入。
    • リフレクション用の引数情報を追加。(PHP 5 のみ)
  • php_mecab-0.0.3.tgz (dev)
    • PHP 5.2, PHP 6 でコンパイルできるように修正。
  • php_mecab-0.0.2.tgz (dev)
    • ソースコードを整理。
  • php_mecab-0.0.1.tgz (dev)
    • 最初のリリース。

0.2.0だけインストール時のが残ってたのでDLできるようにしておく。
php_mecab-0.2.0.tgz

あと、なぜか…0.3.0ってのも残ってたのでDLできるようにしておく…。どこからDLしたヤツなんだろう…?
php_mecab-0.3.0.tgz

関数一覧

「関数一覧」ってのが完全にリンク切れだったのでWayBack Machineから拾ってみた。

/* {{{ Functions */

/* {{{ proto resource mecab mecab_new(mixed arg); */
/**
 * resource mecab mecab_new(mixed arg)
 * object MeCab_Tagger MeCab_Tagger::__construct(mixed arg)
 *
 * Create new tagger resource of MeCab.
 *
 * @param array|string $arg The analysis/output options. (optional)
 * The values is same to command line options.
 * The detail is found in the web site and/or the manpage of MeCab.
 * @return resource mecab A tagger resource of MeCab.
 */
/* }}} mecab_new */

/* {{{ proto void mecab_destroy(resource mecab mecab); */
/**
 * void mecab mecab_destroy(resource mecab mecab)
 *
 * Free the tagger.
 *
 * @param resource mecab $mecab The tagger resource of MeCab.
 * @return void
 */
/* }}} mecab_destroy */

/* {{{ proto string mecab_sparse_tostr(resource mecab mecab, string str[, int len[, int olen]]); */
/**
 * string mecab_sparse_tostr(resource mecab mecab, string str[, int len[, int olen]])
 * string MeCab_Tagger::parse(string str[, int len[, int olen]])
 * string MeCab_Tagger::parseToString(string str[, int len[, int olen]])
 *
 * Get the parse result as a string.
 *
 * @param resource mecab $mecab The tagger resource of MeCab.
 * @param string $str The parse target.
 * @param int $len The maximum length that can be analyzed. (optional)
 * @param int $olen The limit length of the output buffer. (optional)
 * @return string The parse result.
 * If output buffer has overflowed, returns false.
 */
/* }}} mecab_sparse_tostr */

/* {{{ proto resource mecab_node mecab_sparse_tonode(resource mecab mecab, string str[, int len]); */
/**
 * resource mecab_node mecab_sparse_tonode(resource mecab mecab, string str[, int len])
 * object MeCab_Node MeCab_Tagger::parseToNode(string str[, int len])
 *
 * Get the parse result as a node.
 *
 * @param resource mecab $mecab The tagger resource of MeCab.
 * @param string $str The parse target.
 * @param int $len The maximum length that can be analyzed. (optional)
 * @return resource mecab_node The result node of given string.
 */
/* }}} mecab_sparse_tonode */

/* {{{ proto string mecab_nbest_sparse_tostr(resource mecab mecab, int n, string str[, int len[, int olen]]); */
/**
 * string mecab_nbest_sparse_tostr(resource mecab mecab, int n, string str[, int len[, int olen]])
 * string MeCab_Tagger::parseNBest(int n, string str[, int len[, int olen]])
 *
 * Get the N-Best list as a string.
 *
 * @param resource mecab $mecab The tagger resource of MeCab.
 * @param int $n The number of the result list.
 * @param string $str The parse target.
 * @param int $len The maximum length that can be analyzed. (optional)
 * @param int $olen The maximum length of the output. (optional)
 * @return string The N-Best list.
 * If output buffer has overflowed, returns false.
 */
/* }}} mecab_nbest_sparse_tostr */

/* {{{ proto bool mecab_nbest_init(resource mecab mecab, string str[, int len]); */
/**
 * bool mecab_nbest_init(resource mecab mecab, string str[, int len])
 * bool MeCab_Tagger::parseNBestInit(string str[, int len])
 *
 * Initialize the N-Best list.
 *
 * @param resource mecab $mecab The tagger resource of MeCab.
 * @param string $str The parse target.
 * @param int $len The maximum length that can be analyzed. (optional)
 * @return bool True if succeeded to initilalize, otherwise returns false.
 */
/* }}} mecab_nbest_init */

/* {{{ proto string mecab_nbest_next_tostr(resource mecab mecab[, int olen]); */
/**
 * string mecab_nbest_next_tostr(resource mecab mecab[, int olen])
 * string MeCab_Tagger::next([int olen]])
 *
 * Get the next result of N-Best as a string.
 *
 * @param resource mecab $mecab The tagger resource of MeCab.
 * @param int $olen The maximum length of the output. (optional)
 * @return string The parse result of the next pointer.
 * If there are no more results, returns false.
 * Also returns false if output buffer has overflowed.
 */
/* }}} mecab_nbest_next_tostr */

/* {{{ proto resource mecab_node mecab_nbest_next_tonode(resource mecab mecab); */
/**
 * resource mecab_node mecab_nbest_next_tonode(resource mecab mecab)
 * object MeCab_Node MeCab_Tagger::nextNode(void)
 *
 * Get the next result of N-Best as a node.
 *
 * @param resource mecab $mecab The tagger resource of MeCab.
 * @return resource mecab_node The result node of the next pointer.
 * If there are no more results, returns false.
 */
/* }}} mecab_nbest_next_tonode */

/* {{{ proto string mecab_format_node(resource mecab mecab); */
/**
 * string mecab_format_node(resource mecab mecab, resource mecab_node node)
 * string MeCab_Tagger::formatNode(object MeCab_Node node)
 *
 * Format a node to string.
 * The format is specified by "-O" option or –{node|unk|bos|eos}-format=STR.
 * The detail is found in the web site and/or the manpage of MeCab.
 *
 * @param resource mecab $mecab The tagger resource of MeCab.
 * @param resource mecab_node $node The node of the source string.
 * @return string The formatted string.
 */
/* }}} mecab_format_node */

/* {{{ proto array mecab_node_toarray(resource mecab_node node[, bool dump_all]); */
/**
 * array mecab_node_toarray(resource mecab_node node)
 * array MeCab_Node::toArray(void)
 *
 * Get all elements of the node as an associated array.
 *
 * @param resource mecab_node $node The node of the source string.
 * @param bool $dump_all Whether dump all related nodes and paths or not.
 * @return array All elements of the node.
 */
/* }}} mecab_node_toarray */

/* {{{ proto resource mecab_node mecab_node_current(resource mecab_node node); */
/**
 * resource mecab_node mecab_node_current(resource mecab_node node)
 * object MeCab_Node MeCab_Node::current(void)
 *
 * [Iterator implementation]
 * Return the current element.
 *
 * @param resource mecab_node $node The node of the source string.
 * @param resource mecab_node Just a copy of given resource.
 */
/* }}} current */

/* {{{ proto int mecab_node_key(resource mecab_node); */
/**
 * int mecab_node_key(resource mecab_node)
 * int MeCab_Node::key(void)
 *
 * [Iterator implementation]
 * Return the key of the current element.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The cumulative cost of the node.
 */
/* }}} mecab_node_key */

/* {{{ proto bool mecab_node_valid(resource mecab_node); */
/**
 * bool mecab_node_valid(resource mecab_node)
 * bool MeCab_Node::valid(void)
 *
 * [Iterator implementation]
 * Check if there is a current element after calls to rewind() or next().
 *
 * @param resource mecab_node $node The node of the source string.
 * @return bool True if there is an element after the current element, otherwise returns false.
 */
/* }}} mecab_node_valid */

/* {{{ proto bool mecab_node_rewind(resource mecab_node node); */
/**
 * bool mecab_node_rewind(resource mecab_node node)
 * bool MeCab_Node::rewind(void)
 *
 * [Iterator implementation]
 * Set the node pointer to the beginning.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return bool Always true.
 */
/* }}} mecab_node_rewind */

/* {{{ proto bool mecab_node_next(resource mecab_node node); */
/**
 * bool mecab_node_next(resource mecab_node node)
 * bool MeCab_Node::next(void)
 *
 * [Iterator implementation]
 * Set the node pointer to the next.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return bool False if current position is the end, otherwise returns true.
 */
/* }}} mecab_node_next */

/* {{{ proto resource mecab_node mecab_node_get_prev(resource mecab_node node); */
/**
 * resource mecab_node mecab_node_get_prev(resource mecab_node node)
 * object MeCab_Node MeCab_Node::getPrev(void)
 *
 * Get the previous node.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return resource mecab_node The previous node.
 * If the given node is the first one, returns FALSE.
 */
/* }}} mecab_node_get_prev */

/* {{{ proto resource mecab_node mecab_node_get_next(resource mecab_node node); */
/**
 * resource mecab_node mecab_node_get_next(resource mecab_node node)
 * object MeCab_Node MeCab_Node::getNext(void)
 *
 * Get the next node.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return resource mecab_node The next node.
 * If the given node is the last one, returns FALSE.
 */
/* }}} mecab_node_get_next */

/* {{{ proto resource mecab_node mecab_node_get_enext(resource mecab_node node); */
/**
 * resource mecab_node mecab_node_get_enext(resource mecab_node node)
 * object MeCab_Node MeCab_Node::getENext(void)
 *
 * Get the enext node.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return resource mecab_node The next node which has same end point as the given node.
 * If there is no `enext' node, returns false.
 */
/* }}} mecab_node_get_enext */

/* {{{ proto resource mecab_node mecab_node_get_bnext(resource mecab_node node); */
/**
 * resource mecab_node mecab_node_get_bnext(resource mecab_node node)
 * object MeCab_Node MeCab_Node::getBNext(void)
 *
 * Get the bnext node.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return resource mecab_node The next node which has same beggining point as the given one.
 * If there is no `bnext' node, returns false.
 */
/* }}} mecab_node_get_bnext */

/* {{{ proto resource mecab_path mecab_node_get_rpath(resource mecab_node node); */
/**
 * resource mecab_path mecab_node_get_rpath(resource mecab_node node)
 * object MeCab_Path MeCab_Node::getRPath(void)
 *
 * Get the rpath.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return resource mecab_path The next node which has same end point as the given node.
 * If there is no `rpath' node, returns false.
 */
/* }}} mecab_node_get_rpath */

/* {{{ proto resource mecab_path mecab_node_get_lpath(resource mecab_node node); */
/**
 * resource mecab_path mecab_node_get_lpath(resource mecab_node node)
 * object MeCab_Path MeCab_Node::getLPath(void)
 *
 * Get the lpath.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return resource mecab_path The next node which has same beggining point as the given one.
 * If there is no `lpath' node, returns false.
 */
/* }}} mecab_node_get_lpath */

/* {{{ proto string mecab_node_get_surface(resource mecab_node node); */
/**
 * string mecab_node_get_surface(resource mecab_node node)
 * string MeCab_Node::getSurface(void)
 *
 * Get the surface.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return string The surface of the node.
 */
/* }}} mecab_node_get_surface */

/* {{{ proto string mecab_node_get_feature(resource mecab_node node); */
/**
 * string mecab_node_get_feature(resource mecab_node node)
 * string MeCab_Node::getFeature(void)
 *
 * Get the feature.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return string The feature of the node.
 */
/* }}} mecab_node_get_feature */

/* {{{ proto int mecab_node_get_id(resource mecab_node node); */
/**
 * int mecab_node_get_id(resource mecab_node node)
 * int MeCab_Node::getId(void)
 *
 * Get the ID.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The ID of the node.
 */
/* }}} mecab_node_get_id */

/* {{{ proto int mecab_node_get_length(resource mecab_node node); */
/**
 * int mecab_node_get_length(resource mecab_node node)
 * int MeCab_Node::getLength(void)
 *
 * Get the length of the surface.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The length of the surface of the node.
 */
/* }}} mecab_node_get_length */

/* {{{ proto int mecab_node_get_rlength(resource mecab_node node); */
/**
 * int mecab_node_get_rlength(resource mecab_node node)
 * int MeCab_Node::getRLength(void)
 *
 * Get the length of the surface and its leading whitespace.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The length of the surface and its leading whitespace of the node.
 */
/* }}} mecab_node_get_rlength */

/* {{{ proto int mecab_node_get_rcattr(resource mecab_node node); */
/**
 * int mecab_node_get_rcattr(resource mecab_node node)
 * int MeCab_Node::getRcAttr(void)
 *
 * Get the ID of the right context.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The ID of the right context.
 */
/* }}} mecab_node_get_rcattr */

/* {{{ proto int mecab_node_get_lcattr(resource mecab_node node); */
/**
 * int mecab_node_get_lcattr(resource mecab_node node)
 * int MeCab_Node::getLcAttr(void)
 *
 * Get the ID of the left context.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The ID of the left context.
 */
/* }}} mecab_node_get_lcattr */

/* {{{ proto int mecab_node_get_posid(resource mecab_node node); */
/**
 * int mecab_node_get_posid(resource mecab_node node)
 * int MeCab_Node::getPosId(void)
 *
 * Get the ID of the Part-of-Speech.
 * (node->posid is not used in MeCab-0.90)
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The ID of the Part-of-Speech.
 * Currently, always returns 0.
 */
/* }}} mecab_node_get_posid */

/* {{{ proto int mecab_node_get_char_type(resource mecab_node node); */
/**
 * int mecab_node_get_char_type(resource mecab_node node)
 * int MeCab_Node::getCharType(void)
 *
 * Get the type of the character.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The type of the character.
 */
/* }}} mecab_node_get_char_type */

/* {{{ proto int mecab_node_get_stat(resource mecab_node node); */
/**
 * int mecab_node_get_stat(resource mecab_node node)
 * int MeCab_Node::getStat(void)
 *
 * Get the status.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The status of the node.
 * The return value is one of the following:
 * MECAB_NOR_NODE (0:Normal)
 * MECAB_UNK_NODE (1:Unknown)
 * MECAB_BOS_NODE (2:Beginning-of-Sentence)
 * MECAB_EOS_NODE (3:End-of-Sentence)
 */
/* }}} mecab_node_get_stat */

/* {{{ proto bool mecab_node_get_isbest(resource mecab_node node); */
/**
 * bool mecab_node_get_isbest(resource mecab_node node)
 * bool MeCab_Node::getIsBest(void)
 *
 * Determine whether the node is the best solution.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return bool True if the node is the best, otherwise returns false.
 */
/* }}} mecab_node_get_isbest */

/* {{{ proto double mecab_node_get_alpha(resource mecab_node node); */
/**
 * double mecab_node_get_alpha(resource mecab_node node)
 * double MeCab_Node::getAlpha(void)
 *
 * Get the forward log probability.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return double The forward log probability of the node.
 */
/* }}} mecab_node_get_alpha */

/* {{{ proto double mecab_node_get_beta(resource mecab_node node); */
/**
 * double mecab_node_get_beta(resource mecab_node node)
 * double MeCab_Node::getBeta(void)
 *
 * Get the backward log probability.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return double The backward log probability of the node.
 */
/* }}} mecab_node_get_beta */

/* {{{ proto double mecab_node_get_prob(resource mecab_node node); */
/**
 * double mecab_node_get_prob(resource mecab_node node)
 * double MeCab_Node::getProb(void)
 *
 * Get the marginal probability.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return double The marginal probability of the node.
 */
/* }}} mecab_node_get_prob */

/* {{{ proto int mecab_node_get_wcost(resource mecab_node node); */
/**
 * int mecab_node_get_wcost(resource mecab_node node)
 * int MeCab_Node::getWCost(void)
 *
 * Get the word arising cost.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The word arising cost of the node.
 */
/* }}} mecab_node_get_wcost */

/* {{{ proto int mecab_node_get_cost(resource mecab_node node); */
/**
 * int mecab_node_get_cost(resource mecab_node node)
 * int MeCab_Node::getCost(void)
 *
 * Get the cumulative cost.
 *
 * @param resource mecab_node $node The node of the source string.
 * @return int The cumulative cost of the node.
 */
/* }}} mecab_node_get_cost */

/* {{{ proto resource mecab_path mecab_path_get_rnext(resource mecab_path path); */
/**
 * resource mecab_path mecab_path_get_rnext(resource mecab_path path)
 * object MeCab_Path MeCab_Path::getRNext(void)
 *
 * Get the rnext path.
 *
 * @param resource mecab_path $path The path of the source string.
 * @return resource mecab_path The rnext path.
 * If the given path is the first one, returns FALSE.
 */
/* }}} mecab_path_get_rnext */

/* {{{ proto resource mecab_path mecab_path_get_lnext(resource mecab_path path); */
/**
 * resource mecab_path mecab_path_get_lnext(resource mecab_path path)
 * object MeCab_Path MeCab_Path::getLNext(void)
 *
 * Get the lnext path.
 *
 * @param resource mecab_path $path The path of the source string.
 * @return resource mecab_path The lnext path.
 * If the given path is the last one, returns FALSE.
 */
/* }}} mecab_path_get_lnext */

/* {{{ proto resource mecab_node mecab_path_get_rnode(resource mecab_path path); */
/**
 * resource mecab_node mecab_path_get_rnode(resource mecab_path path)
 * object MeCab_Node MeCab_Path::getRNode(void)
 *
 * Get the rnode.
 *
 * @param resource mecab_path $path The path of the source string.
 * @return resource mecab_node The next path which has same end point as the given path.
 * If there is no `rnode' path, returns false.
 */
/* }}} mecab_path_get_rnode */

/* {{{ proto resource mecab_node mecab_path_get_lnode(resource mecab_path path); */
/**
 * resource mecab_node mecab_path_get_lnode(resource mecab_path path)
 * object MeCab_Node MeCab_Path::getLNode(void)
 *
 * Get the lnode.
 *
 * @param resource mecab_path $path The path of the source string.
 * @return resource mecab_node The next path which has same beggining point as the given one.
 * If there is no `lnode' path, returns false.
 */
/* }}} mecab_path_get_lnode */

/* {{{ proto double mecab_path_get_prob(resource mecab_path path); */
/**
 * double mecab_path_get_prob(resource mecab_path path)
 * double MeCab_Path::getProb(void)
 *
 * Get the marginal probability.
 *
 * @param resource mecab_path $path The path of the source string.
 * @return double The marginal probability of the path.
 */
/* }}} mecab_path_get_prob */

/* {{{ proto int mecab_path_get_cost(resource mecab_path path); */
/**
 * int mecab_path_get_cost(resource mecab_path path)
 * int MeCab_Path::getCost(void)
 *
 * Get the cumulative cost.
 *
 * @param resource mecab_path $path The path of the source string.
 * @return int The cumulative cost of the path.
 */
/* }}} mecab_node_get_cost */

/* }}} Functions */

新着(ニュース関連以外)

2017-08-03
formのinputでmaxlengthを使うとFirefoxでバグってた。他のブラウザでも気づかずにバグってたかもしれない。
2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。
2017-06-27
MACにWin10をインストールしてみた:再挑戦。
2017-06-25
「簡単」っていうヤツらが多いけど・・・難しいぞ。