タグ

ブックマーク / chasen.org/~taku (17)

  • きまぐれ日記: MeCabがiPhone,OSXに載っていると言うのは止めようと思う

    iPhoneのSDKの条項に変更が加わり、Flashのクロスコンパイルを含む 純正開発ツール以外で作成されたバイナリの配布が禁止となるようです。 世間でも散々言われていますが、この変更は正直とても残念です。 Apple的には「製品のクオリティーが保てないから」という理由だそうですが、 WindowsiTunesが意味もなくQuickTime入れたり、Windows非標準のUIを 使いまくっていて、お世辞にもクオリティーが高いとは言えないのを棚にあげて、 クオリティー云々と言い訳できるのでしょうか。アプリなんて所詮 玉石混淆。決めるのはユーザです。 MeCabは以前GPL/LGPLでした。Appleを含む複数の方からこのライセンスでは 使いにくいと言う指摘をうけ、前職の同僚と協議をしながらBSD/LGPL/GPL のトリプルライセンスにしたという経緯があります。結果としてこの変更は うまく

  • きまぐれ日記: Mac OS X Leopard に「標準で」インストールされている MeCabを使ってみる

    Mac OS X Leopard の Spotlight に MeCab が使われているらしいという情報を聞いたので、実際に深追いしてみました。 いとも簡単に /usr/lib/libmecab* , /usr/include/mecab.h と /usr/lib/mecab/dic/apple/{ja,tc,sc} というディレクトリを発見しました。ts, sc は traditional/simplified Chinese (繁体字/簡体字) の略で、中国語の辞書だと推察されます。辞書のディレクトリはさらに dic/apple/ja/{LE,BE} という風に、エンディアンごとに分かれています。MeCabの辞書はエンディアン依存なので、こうするしかないのかもしれません。 さて、この辞書を使って、UTF8の文字列を流し込んでみたのですが、うまいこと解析してくれません。MeCabのバイナ

  • きまぐれ日記: Schwartzian Transform でランダムシャッフル

    Schwartzian Transform を使って配列をシャッフルする話をみて、なるほどな~と思いつつも、よくよく考えてみるとこれは2つの意味で駄目です。 1. 計算量が O(n * log(n)) であること。 2. ランダムにシャッフルできない。 1. は説明するまでもないので、2の理由を考えてみます。 まず、rand() が 0..k-1 までの k種類の整数から 1 つ数値を返すものとします。配列のサイズが n の場合、 weightの並びの場合の数は k^n 通り存在します。ところが、配列の順列の場合の数は n! です。 ここで何か矛盾点があるように思えてきます。 実際に k = 2, n = 2 の場合を考えて見ましょう。この場合、サイズ2の配列をシャッフルするんですから、 要素を入れ替える場合と入れ替えない場合が 1/2 の確率で出現するのが正しいシャッフルです。 k =

  • きまぐれ日記: MeCab: Perl のコードを駆逐

    MeCab の 辞書コンパイラは一部 Perl で書かれています。その理由として、実装が楽だという理由もありますが、品詞等の素性から内部状態への変換ルール(rewrite.def) を Perl で書くようにユーザに強制していたと理由があります。しかし、開発する上でいろいろ問題がでてきました。 - CSV の parse, コマンドライン解析など、共通して使えるはずのコードが分散している。 - 速度が要求されるもの (ダブル配列の変換等)は、C++ で書かれたバックエンドプログラムが動くのですが、そのツールとの通信に pipe をつかっててかっこ悪い。 - バイナリ辞書の書き込み/読み込みが perlC++ の二つに分散されているため、メンテナンス性が悪い - Windows 環境では Perl をインストールしないと辞書の再構築が難しい 連休ぐらいから、休日を利用して Perl

  • http://chasen.org/~taku/blog/archives/2006/05/textmecab.html

  • きまぐれ日記: MeCab: 字種に基づくわかち書き

    前回の N-gram に引き続き、字種に基づく分かち書きを MeCab だけで実現してみます。 日語ほど字種が多い言語はありません。ひらがな、カタカナ、漢字、アルファベット、数字、記号..などなど。これらはわかち書きをする上で非常に重要な情報です。MeCab + ipadic の場合、未知語は字種に基づく発見的な手法 (heuristics) で切り出しています。 今回は、辞書はまったく使わず、この字種情報だけで分かち書きをしてみます。単純に「同じ字種のものをまとめて出力する」といった塩梅です。 例によって、MeCab の辞書の構成のドキュメントはこちらにあります。基的に 1. dic.csv (辞書ファイル) 2. matrix.def (連接ファイル) 3. char.def (文字種ファイル) 4. unk.def (未知語処理) 5. dicrc から辞書が構成されます。今回も

  • きまぐれ日記: MeCab を使って N-gram を取り出す。

    Senna や HyperEstraier といった最近の検索システムでは n-gram インデックスが使われることが多くなってきました。正確には文字 n-gram ですが、(単語 n-gramとの対比) ようするに、テキスト中の n 以下までのすべての部分文字列を取り出して index に使う処理のことを言います。 n-gram の取り出しは、すごく簡単で、プログラミングしてもたいした量にはなりませんが、ここはあえて MeCab だけでやってみたいと思います。 まず、mecab-0.91 (src/tokenizer.cpp) に以下のパッチを当てます。(もしくは最新の CSVからソースを拾ってきます) 実際この記事を書くにあたって見つけたバグです。 4c4 < $Id: tokenizer.cpp,v 1.13 2006/05/03 07:56:28 taku-ku Exp $; --

  • きまぐれ日記: mecab-0.91

  • きまぐれ日記: CRF++ に激しいバグ

    CRF++ に激しいバグが見つかりました。 http://chasen.org/~taku/software/CRF++/ 海外の方から、数万文解析するとメモリーが足りなくなる。という報告を受けたのですが、 そんなことはねーだろうと、適当にあしらっていました。 valgrind で調べてみてもリークしてる風ではないし。。 適当な時間があったので、ソースのリファクタリングも含めて確認してみると、各文毎に開放されるべきフリーリストがそのまま放置されていました。フリーリストはデストラクタで適切にメモリが開放されるので、valgrind ではリークとは認識されません。 今のリファクタリングも含めて急ピッチで修正しています。ご迷惑をかけて申し訳ありません。 投稿者 taku : 2006年03月19日 23:37 トラックバック このエントリーのトラックバックURL: http://chasen.o

    jazzanova
    jazzanova 2006/03/20
  • きまぐれ日記: MeCab: 制約つき解析を実装してみた

    実装しようと思って先延ばしにしていた制約付き解析を実装してみました。制約付き解析とは部分解析とも呼ばれ、部分的に正解がわかっているときに、それを制約として解析する機能のことを言います。これが実現できると - 絶対に間違ってはいけない定型部分を制約として解析 - 形態素解析のマルコフ的なモデルでは解消できないあいまい性を高次の処理で解消しフィードバック - 固有表現抽出の前処理 - 人間とのインタラクション - かな漢字変換への応用 (ユーザの修正を反映して再解析) などといったことができます。 さて、ChaSen 2.4.0 ではすでに実装されています。 MeCab もほぼそれを踏襲しました。 基的には、MeCab のデフォルトの出力結果をいじって制約を記述するという格好になります。 - 品詞の部分に * が指定されると、その単語で切り出し、品詞は適当に最適なものを付与します。 にわ *

  • きまぐれ日記: Ajax で隠れた技術を表舞台に出す

    Ajax を知ったのは、今年の2~3月ぐらいだったと思います。この技術に触れたとき、「これで一般には表に出しにくい技術をデモれるかも。。。」と感じたのを覚えています。ほどなくして Ajax KIWI, Ajax IME, Ajax Migemo を作ってそれなりの反響が得られました。 私自身、Webアプリケーション開発の経験はほとんどありません。最近の Web 開発インフラの進歩の速さにはいつも驚かされています。一方、私は急激な進歩とは程遠く、表舞台には出てこない機械学習とか言語処理のツールをふだん hack しています。私がいる分野は、パフォーマンス(実行速度)が結構重要です。 いまさらながら C++ を使って実装していますし、パフォーマンス向上のためのトリビアをそれなりに蓄積しています。ほかにも高速な辞書マッチや文字列検索処理などのコードも書き溜めていました。 今思えばこれがかえって良

  • きまぐれ日記: はてなキーワードを高速に付与 (マルチバイト処理)

    前回に紹介した hackですが、いくつかの問題があるようです。 とくにマルチバイトの処理は完全にスルーしてました。まずかったです。mecab がやってることは件のキーワードの処理とほぼ同じですが、ちゃんとマルチバイト処理をやっています。そこで、安直に mecab の該当部分を移植してみました。基的には mblen 相当を実装するだけです。(mblen を使ってもかまいません) Download file 投稿者 taku : 2005年09月28日 21:52 トラックバック このエントリーのトラックバックURL: http://chasen.org/~taku/blog/mt-tb.cgi/170 このリストは、次のエントリーを参照しています: はてなキーワードを高速に付与 (マルチバイト処理): » 映画タイトル・俳優名の自動リンク機能 from 映画生活開発日誌 各作品のストーリー

  • Ajax を使った手書き文字認識

    Ajax を 使った手書き文字認識です。下のキャンバスにマウスで文字を描いてみてください。 デモ

  • きまぐれ日記: はてなキーワードを高速に付与

  • http://chasen.org/~taku/blog/archives/2005/08/ajax_ime_4.html

  • Ajax IME: Web-based Japanese Input Method

    Webベースの日本語入力サービスです。海外からでもブラウザさえあれば日語を入力す ることができます。 特別なソフトは必要ありません。 使い方 お使いのコンピュータの日本語入力を切りかえて直接入力にします。 Alt-o (Ctrl-9) で Ajax IMEモードに変更します。(ボタンで切り替えるかえることもできます) 適当な文をローマ字で入力します。 spaceを押して漢字に変換します。続けて押すことで候補選択を行います。 returnを押す、もしくは次の入力を開始することで入力を確定します。 F9で強制的にカタカナに、F8で強制的にアルファベットに変換します。 再度 Alt-o (Ctrl-9)で直接入力に戻ります 海外旅行先や留学先, 海外のネットカフェなど日本語入力環境が 無いパソコンからご使用ください。 Firefox と Internet Explorer で動作確認をしていま

  • きまぐれ日記: Ajax IME

    以前に作った Ajax IME を拡張してみました。通常のIMEと同様に候補選択ができます。blog の更新やメールを書いたりといった用途にはほぼ問題ないレベルだと思います。 http://chasen.org/~taku/software/ajax/fullime/ さて、JavaScript についていろいろ勉強になりました。クロージャーはそのひとつです。イベントハンドリングにクロージャーを使っているため、グローバル変数は一切使わなくて済みました。さらにオブジェクト指向で書かれているため、同一文書に複数の textarea があっても複数のIMEインスタンスを持つことができます。 ただ、textarea の操作はバッドノウハウの塊です。キャレットの位置を取得する 一般的な方法はなく、ブラウザ依存です。Firefox では、キャレットの位置をピクセル単位で取得できないようです。固定長フォ

  • 1