NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

JUTSplitter (Japanese Unicode Text Splitter)

投稿者:"kf"さん  2004/01/18 19:59  MLNo.552   [メール表示]

深町です。

MeCab を使った Splitter を作っているところなのですが(まだ、完成してない)、
興味のある方はどうぞ。
http://www.atransia.co.jp/download/JUTSplitter/index_html
http://www.atransia.co.jp/download/JUTSplitter/JUTSplitter-0.0.1a.tgz

Purloined http://www.atransia.co.jp/home/Purloined/
にいれたら、COREBlog でもちゃんと認識して動いてくれているようです。
記事がまだほとんどないので、なんですが。
(中神さんの ejSplitter を今日まで入れてたのですが、はずしちゃった裏切り者
(笑)

なにせ一晩かけてのできたてのほやほやのところなので、
かなりいいかげんなバグバグバグ。
(Zope 2.7 がどうこうと騒いでいた人がいるから、ひきづられて
ちゃんと作ってる時間がなくなってしまった〜。もっともちゃんと
つくってもたいしたものになるわけではないが)

Pyhon 2.2.3 と Python 2.3.3 でしか動作確認していないので
Pythn 2.1.3 だと動かないかもしれないです。
速度も MeCab を使っているのに遅いです。理由は明確なんですが
とりあえず、あれこれ入れるだけ入れたあとにすっきりさせようかなと。

あと、これにまつわる話をダラダラと。

Chasen を使った Splitter のように分かち書きの結果からだけでなく、
一応、品詞を見て、単語を拾っています(活用形のある単語は原型を登録)。
また、未知語に関しても、アルファベットの未知語は、茶筌を単純に使って
いるものよりも、拾ってくれると思います(これは、MeCab の未知語処理の
おかげ)。品詞はベタの文字でやっているので、効率が悪いですが、
まあ、仕様をちゃんと決めるまでは、この方が楽(笑)

ソースを見ると、妙な改行をつないだりと何してるんだというところが
あります。まあ、もう少しきれいにやれというところですが、

MeCab の場合は、「。」と改行を、文の末尾としてとらえるので
たとえば、こういうメールをそのまま食わせると、文が途中でぶった切られた
形になってしまうので、正確な形態素解析ができません。
当然、本来は取れるはずの漏れもでてしまいます。

これに加えて、MeCab はデフォルトでは 8192 バイトまでの文章しか
解析してくれません。これは仕様です(Chasen も前はそうだった)。
そういうのは周辺の処理がやるべきものというスタンスだからです。

だから、MeCab を使った Splitter を作る場合には、8192 バイト未満
の文字にあらかじめ切ってから渡すか、あるいは、バッファのサイズを
引数で指定して拡張してあげないとなりません。理想的には、
一文ずつ、句点で終わる文字列を与えてやるのがいいと思います。
(ちゃんとラッパーつくりゃいいんですね)

なんていうこともあるので、MeCab を使いたい人には、多少でも
参考になるかなと。まあ、ソースはぐちゃぐちゃでコメントもないので
気分が悪くなるだけかもしれない(^^;; 肝心なことは、今説明して
しまったし(笑)

ついでなのでしつこく(^^;;、 茶筌だったら(MeCab も本来は同じですが)、
半角の英数字を全角の英数字に変換してから渡さなければ正確な
形態素解析はしてくれません。
たとえば、「2004年1月18日」と「2004年1月18日」で解析結果が
微妙に違うとか、細かく見ていくと、けっこういろいろな問題が見えて
きます。

だから、全角半角なんかも、けっこう気をつけて扱ってやると、精度が
変わってきたりします。ipadic は、IBMは辞書に登録されているけれど、
Microsoft (全角)も Microsoft (半角) も登録されていないとかあるの
で、

MeCab の場合、英数字は全部半角にまとめてしまうとよかったりします
(まだやってない)。そうすると未知語に落ちて、まとめてひとくくりにして
くれるので、「xxxx」「年」「xx」「月」みたいな検索もちゃんとひっかかってくれ
るんです。

「2 | 0 | 0 | 4 | 年」とやられてしまった場合、それぞれ1文字になり
1文字はインデックスに登録しないとかやると、もう、検索の対象にならなくなって
しまいます。これが、MeCab を使えば、「2004 | 年」となるので、検索対象になり
ます。
これは ejSplitter でも OK なところですが。単純に同じ分類の文字列をまとめてし
まう
というのは、意外な強さもあるわけ。

また、たとえば、そういう意味のある数字ではなくて、単に数字が延々と
並んでいるようなものをどういう基準で削除するか、これはもう、マジックナンバー

主観的に、このあたりできっちゃえとかやってしまうのでありました。




 読み込み中...
最新の10件 1 2
  • MLNo.558   "kf"さん  (0) 2004/01/20 10:38  [メール表示する]
    深町です。

    > 田原さんが、最近あらたに、python の chasen モジュールのパッチを
    > 手に入れたらしいので、これを機会に、ドキュメントなどを整備されて
    > 公開されるとうれしい。。。と密かに思っています。

    なんと! 密かじゃなく公開されるとうれしいと思います〜。
    やはり、標準的な Splitter としては茶筌の方がいいですし。
    MeCab は辞書登録がめんどくさいし、ユーザー辞書が使えないし、
    連語の処理もないし、ちょっとそういうところではハンディがあります。


    > globbing が動かない云々というのは、全く気づいていません。
    > (もちろん、Zopeのソースなんて全く追ってません)

    なるほど。

    > ここで「安*と逗子王」という検索文字列で検索しようとした時に
    > 2.で「安*」「と」「逗子王」
    > に分けられる必要があります。
    > 形態要素解析器でこれをやるのは無理でしょう?
    > なので、辞書+形態要素解析器で、Splitter を作ろうとすると、
    > glob処理は無理なのかなぁと思っています。

    あぁ、なるほど。いいヒントをありがとうございます。
    それなら、対応できそうです。無理といわれるとやりたくなるのでありました。

    というか、それ以前になにやってるんだ恥ずかしくバグ以前のバグもありました
    (^^;;
    Zope のソースもちゃんと見て、ちょっとやり直します。


    > あと、潜在的に機種依存文字が、どういう風に変換されるかわからないので
    > あまり EUC->UNICODE変換を行なわない方がいいかなぁという感じ
    > なんだと思います。

    あと、文字変換のときに、変換できない文字を IGNORE で落としてしまうと、
    ヘンになる可能性があるし、REPLACE で 文字を置き換えても、それはそれ
    でという世界もありますしね。




  • MLNo.559   "kf"さん  (0) 2004/01/20 10:39  [メール表示する]
    深町です。

    > > ところで、深町さん。Splitter をあれこれチューニングするんだったら、
    > > いっそのこと、解析器を作ってみては?
    > > http://tabesugi.net/memo/cur/cur.html#180116

    この新山さんって、むちゃくちゃ優秀な人だか 150行で書けるんであって、
    私のような人が書いたら....、そもそもまともに動かんでしょ。

    それに、実用上、形態素解析の解析誤りのかなりの部分が単純に辞書の
    エントリがたりないからだったりしますし、形態素解析なんかいじっても、
    私じゃ精度を上げられないですぅ。

    処理は、プログラミングが得意で頭のいい人が作ればよくって、
    私の場合は、そういうものを使わせてもらって..と。



  • MLNo.562   さん  (0) 2004/01/20 11:25  [メール表示する]
    こんにちは。

    > 田原さんが、最近あらたに、python の chasen モジュールのパッチを
    > 手に入れたらしいので、これを機会に、ドキュメントなどを整備されて
    > 公開されるとうれしい。。。と密かに思っています。

    ドキュメントなんですが、python_chasen も JSplitter も README にインス
    トール方法を書いていますけど、どのへんが足りないんでしょうか?

    パッチの件は、sparse するまえに setformat しないと落ちることがあるらし
    く、モジュールをインポートするときに setformat するものを頂きました。

    先週、これと僕のヘッポコなCを一部書き直して chasen モジュール0.2 を作
    りましたが、スプリッタ的には別に変わったところはないです。

    freebsd で動かないようなのでそれを修正したいのですが、手元に環境がない
    ので放ってあります。。。


  • MLNo.563   Hajime Nakagamiさん  (0) 2004/01/20 19:41  [メール表示する]
    中神です。
    >こんにちは。
    >
    >> 田原さんが、最近あらたに、python の chasen モジュールのパッチを
    >> 手に入れたらしいので、これを機会に、ドキュメントなどを整備されて
    >> 公開されるとうれしい。。。と密かに思っています。
    >
    >ドキュメントなんですが、python_chasen も JSplitter も README にインス
    >トール方法を書いていますけど、どのへんが足りないんでしょうか?
    あのー、私だけなのかもしれませんが、tarball がどこにあるのかわかりません。
    教えてください。

    それから、もしできるのなら、README そのままでもよいので、
    tarball とか別にどっかWeb上で直接見られるところに置いておいてください。
    そうすれば、
    http://www005.upp.so-net.ne.jp/nakagami/tips/ZCTextIndex.html#Guide
    ここらあたりから、しれっとリンクを張っておきますので。

    >
    >パッチの件は、sparse するまえに setformat しないと落ちることがあるらし
    >く、モジュールをインポートするときに setformat するものを頂きました。
    >
    >先週、これと僕のヘッポコなCを一部書き直して chasen モジュール0.2 を作
    >りましたが、スプリッタ的には別に変わったところはないです。
    >
    >freebsd で動かないようなのでそれを修正したいのですが、手元に環境がない
    >ので放ってあります。。。

    以上


  • MLNo.564   "kf"さん  (0) 2004/01/20 20:00  [メール表示する]
    深町です。

    > ドキュメントなんですが、python_chasen も JSplitter も README にインス
    > トール方法を書いていますけど、どのへんが足りないんでしょうか?

    [zope-devel:291] とりあえずパッチ
    http://ml.zope.jp/pipermail/zope-devel/2002-October/000292.html
    これリンクが切れていますし、

    Zope.org の ページの方の README では
    http://www.zope.org/Members/yusei/JSplitter
    >   以下の 2 つのpythonモジュールに依存しています。

    > pykf
    > http://www.gembook.jp/html/moin/moin.cgi/PyKf

    > chasen
    > http://www.din.or.jp/~pchi/python

    ここで、リンクが切れてるんです...。要するに、
    from chasen import setformat, sparse
    ここにたどり着けない(^^;; それであきらめてしまう。

    改めて探し見ると、もうなくなってしまったと思っていたところにありました。
    (というか、前にアクセスできなかったような気がする..
    python_chasen モジュールのありか
    http://www.domen.cx/yusei/pub/
    http://sukima.ddo.jp/Plone/Members/bravo/blog/Diary.2003-02-24.1616

    その他参考

    ここに解説が見つかりました。
    日本語検索(JSplitterの導入)
    http://kawama.jp/Tech/Zope/030913151734/disp
    http://sukima.ddo.jp/Plone/Members/rbh/mydiary/Diary.2003-04-03.3838/talkbac
    k/1049438431/discussionitem_view
    Windows の場合
    http://www.clips.co.jp/Zch/splitter_html

     「たしか、chasen は utf8 を処理できないので、スプリッタは、euc-jp とかに変
    換しているはずです。」
    Nautilus さんのページにありますが、
    http://sukima.ddo.jp/Plone/Members/Nautilus/Diary/Diary.2003-08-16.0034/talk
    back/1060998620/view
    http://chasen.aist-nara.ac.jp/hiki/ChaSen/?FAQ にあるように UTF-8 に対応し
    ています。

    今、ダウンロードしてみたら、一発で通りました。前は環境が悪かったのか、
    何度もやり直した記憶があります。

    うーむ、余計なものつくんじゃなかったなぁ (^^;;



  • MLNo.565   さん  (0) 2004/01/20 20:35  [メール表示する]
    田原です。

    リンク切れだらけでご迷惑おかけしてます。

    中神さん
    > それから、もしできるのなら、README そのままでもよいので、
    > tarball とか別にどっかWeb上で直接見られるところに置いておいてください。
    > そうすれば、
    > http://www005.upp.so-net.ne.jp/nakagami/tips/ZCTextIndex.html#Guide
    > ここらあたりから、しれっとリンクを張っておきますので。
    了解です。ページを作成したらお知らせします。


    深町さん
    > ここで、リンクが切れてるんです...。要するに、
    > from chasen import setformat, sparse
    > ここにたどり着けない(^^;; それであきらめてしまう。
    わざわざ調べていただいて、すみません。ちゃんとまとめておきます。


  • MLNo.566   Hajime Nakagamiさん  (0) 2004/01/20 21:34  [メール表示する]
    中神です。

    >先週、これと僕のヘッポコなCを一部書き直して chasen モジュール0.2 を作
    >りましたが、スプリッタ的には別に変わったところはないです。
    >
    >freebsd で動かないようなのでそれを修正したいのですが、手元に環境がない
    >ので放ってあります。。。

    # cd /usr/port/japanese/chasen
    # make install
    して chasen を ports からインストールしてから
    python_chasen 0.2 の setup.py を

    bash-2.05b$ diff -c setup.py.orig setup.py
    *** setup.py.orig Tue Jan 20 19:59:01 2004
    --- setup.py Fri Jan 16 01:17:51 2004
    ***************
    *** 11,17 ****
    ext_modules = [
    Extension("chasen",
    ["chasen.c",],
    - include_dirs = ["/usr/local/include"],
    - library_dirs = ["/usr/local/lib"],
    libraries=["chasen", "stdc++"])
    ])
    --- 11,15 ----

    のように、includeとlibrary のパスを加えたらよさそうです。

    bash-2.05b$ python2.2
    Python 2.2.3 (#1, Sep 7 2003, 15:27:00)
    [GCC 2.95.4 20020320 [FreeBSD]] on freebsd4
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import chasen
    >>> print chasen.sparse('私の名前は中野です')
    私 ワタシ 私 名詞-代名詞-一般
    の ノ の 助詞-連体化
    名前 ナマエ 名前 名詞-一般
    は ハ は 助詞-係助詞
    中野 ナカノ 中野 名詞-固有名詞-人名-姓
    です デス です 助動詞 特殊・デス 基本形
    EOS

    >>>

    という感じになりました。
    #FreeBSDでうまくいかないの意味がはっきりしないので、なんともいえませんが
    0.1 から修正したところがよかったのかどうか?
    これで動いているんじゃないんでしょうか。

    python 的に、環境に依存しない形で include や library のディレクトリを
    探る方法を知らないのですが、
    http://www005.upp.so-net.ne.jp/nakagami/Download/zSSL-0.4.1.tar.gz
    の中の、setup.py では、openssl の .h や .a を探しました。

    ちなみに、README だけでは、module 名が chasen と分からなかったので、
    わたしは、site-packages の中まで見てなんというファイルが追加されているか
    見てしまいました。
    README の中で、import chasen から始まる使い方の例をつけた方が
    よいのではないでしょうか?

    以上


  • MLNo.567   Hajime Nakagamiさん  (0) 2004/01/20 21:54  [メール表示する]
    追加要望

    今までの、深町さんの話を総合すると、

    >>> u = unicode('私の名前は中野です', 'euc-jp')
    >>> import chasen
    >>> print chasen.sparse(u)
    Traceback (most recent call last):
    File "", line 1, in ?
    UnicodeError: ASCII encoding error: ordinal not in range(128)
    >>>

    これも、ちゃんとできるようになってるとよさげです。

    以上

    >中神です。
    >
    >>先週、これと僕のヘッポコなCを一部書き直して chasen モジュール0.2 を作
    >>りましたが、スプリッタ的には別に変わったところはないです。
    >>
    >>freebsd で動かないようなのでそれを修正したいのですが、手元に環境がない
    >>ので放ってあります。。。
    >
    ># cd /usr/port/japanese/chasen
    ># make install
    >して chasen を ports からインストールしてから
    >python_chasen 0.2 の setup.py を
    >
    >bash-2.05b$ diff -c setup.py.orig setup.py
    >*** setup.py.orig Tue Jan 20 19:59:01 2004
    >--- setup.py Fri Jan 16 01:17:51 2004
    >***************
    >*** 11,17 ****
    > ext_modules = [
    > Extension("chasen",
    > ["chasen.c",],
    >- include_dirs = ["/usr/local/include"],
    >- library_dirs = ["/usr/local/lib"],
    > libraries=["chasen", "stdc++"])
    > ])
    >--- 11,15 ----
    >
    >のように、includeとlibrary のパスを加えたらよさそうです。
    >
    >bash-2.05b$ python2.2
    >Python 2.2.3 (#1, Sep 7 2003, 15:27:00)
    >[GCC 2.95.4 20020320 [FreeBSD]] on freebsd4
    >Type "help", "copyright", "credits" or "license" for more information.
    >>>> import chasen
    >>>> print chasen.sparse('私の名前は中野です')
    >私 ワタシ 私 名詞-代名詞-一般
    >の ノ の 助詞-連体化
    >名前 ナマエ 名前 名詞-一般
    >は ハ は 助詞-係助詞
    >中野 ナカノ 中野 名詞-固有名詞-人名-姓
    >です デス です 助動詞 特殊・デス 基本形
    >EOS
    >
    >>>>
    >
    >という感じになりました。
    >#FreeBSDでうまくいかないの意味がはっきりしないので、なんともいえませんが
    >0.1 から修正したところがよかったのかどうか?
    >これで動いているんじゃないんでしょうか。
    >
    >python 的に、環境に依存しない形で include や library のディレクトリを
    >探る方法を知らないのですが、
    > http://www005.upp.so-net.ne.jp/nakagami/Download/zSSL-0.4.1.tar.gz
    >の中の、setup.py では、openssl の .h や .a を探しました。
    >
    >ちなみに、README だけでは、module 名が chasen と分からなかったので、
    >わたしは、site-packages の中まで見てなんというファイルが追加されているか
    >見てしまいました。
    >README の中で、import chasen から始まる使い方の例をつけた方が
    >よいのではないでしょうか?
    >
    >以上


  • MLNo.568   さん  (0) 2004/01/21 00:48  [メール表示する]
    田原です。

    中神さん、いろいろとありがとうございます。


    include_dirs と library_dirs は環境に依存する問題なので、これをそのま
    ま加える気にはなれません...でも distutils のドキュメントを読んだら、移
    植性の高い setup.py の書き方があるようなので、直してみます。


    > bash-2.05b$ python2.2
    > Python 2.2.3 (#1, Sep 7 2003, 15:27:00)
    > [GCC 2.95.4 20020320 [FreeBSD]] on freebsd4
    > Type "help", "copyright", "credits" or "license" for more information.
    > >>> import chasen
    > >>> print chasen.sparse('私の名前は中野です')
    略)
    > という感じになりました。
    ありがとうございます。どうやら動いているみたいですね。
    明日、同僚のfreebsd使いな人たちにも確かめてもらおうと思います。


    > ちなみに、README だけでは、module 名が chasen と分からなかったので、
    > わたしは、site-packages の中まで見てなんというファイルが追加されているか
    > 見てしまいました。
    > README の中で、import chasen から始まる使い方の例をつけた方が
    > よいのではないでしょうか?
    言われてみればその通り。。。README に書いておきます。

    --
    Tahara Yusei "So it goes"
    yusei@…


  • MLNo.569   さん  (0) 2004/01/21 01:06  [メール表示する]
    > >>> u = unicode('私の名前は中野です', 'euc-jp')
    > >>> import chasen
    > >>> print chasen.sparse(u)
    > Traceback (most recent call last):
    > File "", line 1, in ?
    > UnicodeError: ASCII encoding error: ordinal not in range(128)
    > >>>
    >
    > これも、ちゃんとできるようになってるとよさげです。

    これは defaultencoding を euc-jp など適当に設定してもらうしかないです。
    unicode オブジェクト自身は、どのエンコーディングに encode できるか分か
    らないので、どうしようもないです。

    Python の文字列型を char* 型 に変換する関数が unicode string を
    defaultencoding を使ってエンコードしてくれるのでそれにおまかせするしか
    ありません。


最新の10件 1 2
メールへの返信はMLのメンバーしかできません。
【PR】みんなが集まる掲示板人気の日記話題のブログ携帯対応日記女の子向けブログ

更新順メールリスト

4LDK超ってこんなに広い?/SUUMO