Ruby 0
全268件 (268件中 151-200件目)
リヒト(licht)とは、ドイツ語で光の意味だそうだ。デジタル書店「グーテンベルク21」で提供しているデジタル書籍の販売サイト の名前がリヒト。このページに 富士通の「FDブックス音声ビューア」へのリンクがあった。IBM では、らくらくウェブ散策 のようなものもあるが、かなり前から障害者用にいろいろやっている。Personal i-Checkerのようなチェッカーを使ってチェックするようにすれば、音声読み上げを使っている人のためによいページが作れるのかもしれない。ホームページリーダーのお試し版みたいなものもある。点字編集システム(Windows版)Win-BES99は、フリーウエアとして利用できるようだ。Flash を使ったサイトなどは、見栄えはよくても視覚障害者を排除するようなところがある。そういう意味で、テキストというのはいいものだと改めて思う。
2003.07.12
コメント(0)
玄界灘漁船「第18光洋丸」沈没事件と水産庁取締船「からしま」衝突事件 や、相次ぐ玄界灘海難事故と日本のマスコミ のようなもの(ページだけでなく、こうしたページにともなう人の動き)を見ていると、微妙に世の中が変わりつつあるように感じる。どう変わりつつあるかについては、また、そのうちに考えてみよう、といって今日はお茶を濁す(笑)。ただ、微妙にインターネットが世の中の意思形成に対して影響を与え始めているのは否定できないことで、過度にこれに期待したり、警戒したりする必要はない。でも、微妙に長期に渡って影響を与える可能性があるということが実は非常に重要なことなんじゃないかなと感じる。WatchBlogなんかも面白い。文字になってものが残ることによって、集団の意思形成が、より見えやすい、トラッキングがある程度可能な形になってきたことが、一番興味深い。そういえば、最近、人工無能ネタを扱っていなかった(^^;; Flashを使った簡易人工知能「人工無能メーカー」v1.2は、人工無能としては低レベルな部類に入るかもしれないが、Flash を使い、かつ簡単に誰でもってところで、今後に期待かな。エンジンを別に動かせるようになれば、インターフェイスとして Flash を使うというのは悪くない。でも、本質的に何がというわけじゃないけど。実現に近づく“会話するコンピュータ” の記事って、Microsoft の Speech Application の宣伝記事かって感じがしないでもないけど、音声をテキストにできたとして、じゃあ、あとどうするのとなると、やっぱり、会話文の生成をどうするかって話になる。何をどう話させるかってのは、やっぱり難しい話で、単純な応答であれば可能であっても、単純な応答ってのはメニューと同じことで、そんなに面白いことではない。ただ、自然言語を使うことによって、メニューをすべて表示(聞かせる)ことなく目的にたどり着けるのであれば有効ではあろうが、しょせんエキスパートシステムのできそこないみたいなものがせいぜいなのではないかという気もする。それでも、人件費を削ることができるならば、利用者が多少不便であろうが、少しでも足しになるのであれば実用化していくというものなのかもしれない。ちょっとすっ飛んで、結局のところ、文の生成ってのは何か、というところが、やっぱりネックになる。文の生成を考える上で、一番面白いのがやっぱり人工無能的な無目的な会話なのかもしれない。人工無能のひとつのおもしろくないところは、基本的に無能の発話が短文であるところに起因するのかもしれない。無能が、かならず3つの文を生成しなければいけないとすれば、ひとつ高次元の無能になるのかもしれない。人工知能としてではなく、3つの文を何らかのてきとーなアルゴリズムによって、もっともらしく生成し発話できる無能があれば素敵だ。3つの文を並べたときに、それが支離滅裂にならないためには、何が必要なんだろう。そして、それが利用者との対話の中でコンテキストからはずれ過ぎないようにする要因というのは、どういうものがあるんだろう。ヘンとはいったいどんなときにヘンと感じるのだろう。ヘンでなければ受容できるわけだから、ヘンなものは捨てる仕組みがあれば、なんとなくつながりができる。違和感の仕組みというのが非常に重要になるような気がする。spam と違和感というのもつながりがあるように思える。spam の場合、違和感があるものを spam のメールボックスに放り込むことによって、学習させるのだけど、人工無能の発話の中で違和感を感じたものをどうやって違和感の学習対象とさせるかというのが、厄介。違和感を取り出すのが難しい以上、親和性によって、結果として違和感を感じる部分を排除するといった方法があるのかもしんれない。後続の反応につながらない場合は違和感があるからつながらないと考える。3つの文のうち、後続につながりをもったものは spam ではないと考え、つながりをもたないものは spam となってしまったと考える。ただし、はいやいいえといった応答文についてはこの限りではないし、前の発話とのつながりが強いものもこの限りではないとする。前の発話とのつながりがつよいというのがうそ臭さがあるが。相変わらず、支離滅裂だ。でも、支離滅裂な中にある程度のコンテキストというのは維持されている。んー、コンテキストというのはどこにあるのだろう。で、もう一度、前に戻り、微妙な意思形成と同じように、微妙に存在するものなのかもしれない。方向性が定まらない、あちこちに分散するものが、全体として眺めたときには、あたかもそこに何かがあるように思えるもの。もっとすっ飛んで、優れた小説などは、あたかもそこにあるように思えるコンテキスト自体の優劣に加えて、その全体と、部分との整合性が非常に高いレベルで保たれている書かれたものなのだろう。そこにあるように思えるものが、取り方によって異なり、そのバリエーションも広く、かつ、ある程度、何かコアになるものについては、共有できるものがあるといった幻想を抱ける構造。ますますわけがわからなくなってきたところで、今日は終わり。
2003.07.10
コメント(0)
ATOK.com で、「ATOK16みんなで作った辞書:姓・名」 が8/31まで限定公開されている。限定公開なんかにしないで、誰でもダウンロードできて、いつまでもダウンロードできるようにしてくれればいいのになぁ...。そうすれば JustSystem の評価がもっと上がるわけだし。こういうのは、試みとして、非常にいい線なだけにもったいない。
2003.07.07
コメント(0)
自然言語処理関係 のページは数は少ないけど、いいものが入っていた。長岡技術科学大学 電気系 情報通信システム工学大講座 自然言語処理研究室のページいいな。自然言語処理 文献入手リンクなんていうのも役立つし。大学関連の人がこうやって公開してくれるのは、非常にありがたいと思う。本研究室の3つの公約とかすばらしい。そう、リンクの中に 形質マッピングホームページがあって、ここにある 統計学の基礎知識がわかりやすくてよかった。ちょうど、ベイズの定理なんか説明してあってよかったのだ。遺伝統計学的解析とノンパラメトリック連鎖解析とかよくわからんけど(^^;;、じっくり読んだら面白そう。
2003.06.23
コメント(0)
スパムの選り分け手法 不要なEメールを排除するための6通りの方法、という記事が、IBM の developerWorks にあったので読んでみる。「5. ベイズ単語分布フィルター」に、Graham の 「スパム指標確率 (spam-indicative probability)」などについての記述もあった。Razor の Python 版 の Pyzor も、見てみることにしようかな。分散型スパム・カタログ / フィルター とうことで Pyzor - How it works の図を見ると、大きな組織で使うならいいけど、個人向けではないな。あとは、有名どころの SpamAssassinか。こいつはルールベースということだな。ちなみにこの記事を書いた David Mertz という人は、三連文字(trigram) ベースの分類ツールを公開していて、ベイズ理論を使うけれど、単語ベースではなく三連文字をベースに見ていくのだな。
2003.06.19
コメント(0)
また、コンビニのアイスの品揃えが変わっている。ちょっと氷系が増えてきたようだ。いかんいかんと思いつつ「梅ひとつぶ」を買う。ほんとに丸ごと紀州青梅が入っているのだ。暑いときに食べたらうまいかもしれない。梅を入れることより、氷の味付けをもっと考えた方がよかったかもしれない。残念だが、これはそのうち消えてなくなるかもしれない。以下は、マニアの世界。このレベルのことは知らなくても、spambayes は使えるはずだが、ちょっと眺めてみる。○ spambayes のプログラムの構成6月15日の日記で、とりあえず spambayes を見てみることにしたと書いたが、今日は、ちょっとプログラムの構成がどうなっているかを眺めてみることにした。重要なファイルとしては、Options.py、classifier.py、tokenizer.py、chi2.py があって、こいつらが spambayes のコアらしい。まず Options.py を見てみる。spambayes はいろんな設定があるが、標準設定から自分用に変更をしたい場合には、bayescustomize.ini というファイルを作って設定をすればいいようだが、まず、そのためには、Options.pyを見て、どんな設定があるのか把握しなきゃならないだろう。つまり、Options.py にはデフォルト値が入っていて、Windows の普通のプログラムでいえば、ini ファイルみたいなものだと考えればいい。というか、中に ini ファイルの中身が書かれているのだ。このファイルの中には、次のセクションがある。[Tokenizer] [Categorization] [TestDriver] [CV Driver] [Classifier] [Hammie] [hammiefilter] [pop3proxy] [html_ui] [globals] 。ざっと眺めたが、とりあえずデフォルトのままで試してみればいいかな。末尾のところで、’bayescustomize.ini’, ’~/.spambayesrc’ とかあるので、Unix の場合は、ホームディレクトリの ./spambayesrc ファイルに書き込んでおけばよいか。とにかく、Options.py で設定してあるものと別の値を変更したいときには bayescutomize.ini や spamybayesrc で設定すればいいということが分かった(どこから読むかは、環境変数の BAYESCUSTOMIZE で指定しておいてもいい)。もう少し眺めてみると、basic_header_tokenize: False でデフォルトではヘッダは spam 判定の対象になっていないようだ。True にしてやればヘッダも対象になるが、訓練用のデータにかなりセンシティブに反応してしまうようだ。basic_header_tokenize_only: False を True にすれば、ヘッダだけで判定するようになってメールの body は見ないということもできるようだ。ヘッダを見るようになっている場合、basic_header_skip: で見る必要がないヘッダについてはスキップするように指定できる。とか、いろいろな設定がある。そうやってかなり細かい設定ができる。classifier.py は、肝心の分類をやってくれる部分で、Classifier クラスが一番重要なところ。このクラスには、gary_spamprob というメソッドがある。Gary Robinson の Spam Detection についてコメントが入っていて、spam の判定に使う確率の計算については、Gary Robinson 氏のをそのまま使うような感じになっているみたい。とりあえず知識がないとぜんぜん分からないので、あとでまた戻ってみることにしようかな。tokenizer.py は、classifier で判定するためにメールメッセージをバラバラに分解してやるところかな。ここで細切れにしてやったものが訓練用のデータにもなるわけか。ここもまた後でみることにしよう。そして、chi2.py には、統計計算関連の関数が入っている。でとりあえず、コアの部分については、そんな感じになっているようだ。コアの部分を理解するためには、いろいろ勉強しないとならないなぁ...。
2003.06.17
コメント(0)
言選Webというのを見つけた。専門用語自動抽出用Perlモジュール "TermExtract"の機能を使って、専門用語を抽出するシステム。この専門用語自動抽出システムは、東京大学中川研究室と横浜国立大学森研究室が共同で作成したらしい。首相官邸ホームページを対象にして試してみる。「首相官邸ホームペ」とか出てきてしまうので、やや変なところがあるが、取り出された用語自体は、まあ、そんなものかという感じ。これは、デモとしてはおもしろいかもしれないけど、大量のテキストを実際に流して、上位によい専門用語があがってくるところを見ないとダメだな。1ページだけだと、効果がちゃんと分からない。Windows用専門用語自動抽出システム "termex" の解説 を読むと、ありがたいことに Windows でも動くようだし、茶筅でも和布蕪 でも動くようなので、しばらくこれで遊んでみることにしようかな。辞書作りするのに、やっぱりこういうものも使わないと面倒でしょうがないし。Python and Natural Language Understanding のソースが Project: Pytalkにあるな。日本語ばかりだと飽きてくるので、英語のやつもちょっと見てみることにしようかな。
2003.06.08
コメント(0)
久々に 傀儡氏の実験室を更新しようとしたら、パスワードを忘れてしまったことに気づく。うーむむむ。こっちには、あんまりプログラミングのこととか書かないようにと思ったが忘れてしまうので書き付けておく。たべすぎ・ねっとのページに cdb と gdbm の速度比較があって、面白そうだからためしてみようと思ったがやめとこ。cdbの Python インターフェイスが pilcrow.madison.wi.us の python-cdb 0.32 と。How to install cdbを見たら unix でしか動かないのか...。でも、データ量4割減、スピードで 4倍近くか。入力された html 中の名詞をなんでもかんでも Google へのリンクにしてしまうという Googlia を見て、ふと思う。Google にリンクをはる代わりに、品詞を色付きで表示して、情報をリンクにしたら、もしかして、辞書チェックが楽になるかな。さて、ここで問題、名詞は何色?動詞は何色?形容詞は何色?副詞は何色? 助詞は何色? 助動詞は何色?未知語は何色?...色のセンスが問われます。この文を読みながら色が浮かんだあなたは、すばらしい。○ 校閲/推敲支援システムを試す校閲/推敲支援システムをインストールしてちょっとだけ試してみた。これ、言語工学研究所の作ったものだったのか。形態素解析器も付いているので、で、「法案が成立した。」だと、「法が成立した」と候補を出してくれるのだけど、「法案がすぐに成立した」だとノーチェックで潜り抜けてしまう。「自由を犯す」はチェックしてくれて、「自由をすぐに犯す」とか、この場合には間に単語が入っていてもちゃんとチェックしてくれる。「食指をそそられる」はチェックしてくれるが、「食指をとてもそそられる」はノーチェック。まあ、いろいろやると、あれ?というものもあるだろうが、そこそこ、実用で使えるような感じがする。「最後の追い込み」みたいのもチェックしてくれるし。「馬から落馬した」は当然のようにチェックしてくれる。でも「馬からまっさかさまに落馬した」だとダメなのね。また、「ゼロックス」で「複写機」を候補で出してくれたり、「宅急便」だと「宅配便」を候補に出してくれたり、「ホチキス」「ステープラー」など、要するに固有名詞が一般名詞化して使われるようなものの類はチェックしてくれるわけだな。「グッッチのバッグ」なんかは、「ッッ」というありえない表記だからチェックしてくれるけど、「グッチンのバッグ」とやっても通り抜けるので「グッチ」は登録されていないかな。大陥穽新聞のテストをやったら、Word や一太郎のチェックより、多く問題点を洗い出してくれそうな気がする(まだやってない)。もっと、いじめるとどの程度のものか(単語登録の範囲など)分かるかな。デジタルシソーラス辞典までついて、実売1万円強だから、けっこうリーズナブルな買い物かな。どっちかっていうと、デジタルシソーラス辞典も遊べるし。
2003.06.06
コメント(0)
校閲/推敲支援システム が届いたので、ちょっと試してみようと思ったのだが、テンションが上がらないので、まだインストールしてない(^^;; 土日にでもインストールして試してみることにする。やっぱり、この日記ってヤツは、ちょっと休むと、ずるずると書かない状態になるものだ。ちょっとずつでも書いて、少しずつまたテンション上げるかな。
2003.06.05
コメント(0)
東京出版サービスセンター の 大陥穽新聞 がおもしろい。要するに 校正力テスト なのだが、けっこう間違いを見落としてしまう。まあ、ワープロソフトの校正機能がいかに役立たずかっていうことも分かって楽しいかもしれない。Word や 一太郎の校正機能を使ってみたがダメダメだった。校閲/推敲支援システムを注文したので、そのうち届いたら挑戦させてみよう。「語句の校閲基準は『共同通信記者ハンドブック第9版第3刷』(2002年4月1日発行)をカバーしています。」とか書いてあるけど、結局、誤りというのは事例からヒューリスティックに、間違いそうな例を登録してあるってことなのかな。まあ、ちょっとたたいてみれば分かるだろう。
2003.05.30
コメント(0)
今週はちょっと忙しい。ということで気分転換に『スターウォーズ・エピソード2 クローンの逆襲』を見る。最近、CG の技術がすごくて、実写とだんだん区別がつかなくなってきた。実写でやっているように見えるところも、デジタル処理でいろいろ画像が編集されていているのね。10年たったらすごいことになっていそう。すでに今でもかなりのことできるし。ヨーダの動きなんかもすごい。衣服のシワや動きもかなり自然に表現できている。表情もちゃんとある。すごいものだ。そういえば、Yoda (Y Object Database Adapter) なんていうのがあるのだ。バックエンドに Berkley DB を使った Python のオブジェクトデータベースの一種らしい。ZODB みたいなもんかな。で、脈絡はないが、この人は日露戦争に興味があるらしい。日露戦争を見直すというのは、けっこうおもしろいかもしれない。今日はいつもにも増して脈絡ないぞ。アブンブクという人工無能があるらしい。ここはソースが公開されていない。Margarine Project 「単語を全く知らない状態から始まり、自然な会話の中から言葉を覚えてゆきます。」ということなので、ちょっと興味をひかれる。Ruby、MySQL、茶筌 が必要なようだ ソースが sourceforge で公開されているので、時間ができたら見てみよう。参考になりそうな予感? ついでに 人工無能とぼっちは AppleScript で書かれた人工無能。これはソース未公開。アリスの会話を解析させる話しは、やっぱり、ひらがなのもじれつがれんぞくしているようなものをかいせきさせるのはつらいようだ。ひらがなもじれつばかりだったら、けいたいそかいせきというより、むしろ、かんじへんかんのせかいで ATOK とか IME とかそういうせかいになってしまう。うーむ、あいつらができるんだったらひらがなもじれつにつよいけいたいそかいせきっってのがあってもよさそうなもんだが、なかなかとうけいてきにしょりしてというほうほうだとむずかしいのかもしれんな。とりあえず、いっしょけんめい、じしょにひらがなもじれつをとうろくしていけば、かしこくなるんだろうけど、それはそれでふくさようもでてきそうだし....。あぁ、きょうはつかれているから、だんだんと、あるじゃーのんにはなたばをじょうたいになってきてしまったs。どどどんどんとなにをかいているかわからなくなってきちゃた。いやん、たんにねむいだけっけなんだよー。なんかおもしろいやりかたをもうすこしかんがえてみよう。たんにこれできないとかいうのものうがないし。じしょにとうろくするはなしだけでもつまらないし。まあ、とりあえず、おやすみなさい。あぁ、そういえば、形態素解析(けいたいそかいせき)みたいに、括弧付きで読み仮名を入れているような場合、後処理で拾うとおもしろいな。かなりの確率で、解析がこけるんだけど、読み仮名拾って、よみがなと、その後ろの括弧内のひらがなと対応づければ、処理は重くなるけど、なんかできるね。こういう後処理をやっぱりルールベースで入れていくと、精度が高くなるなぁ。MeCab なんて十分高速だから、後ろで多少なんかやってやってもやっぱいいんじゃないかと思う今日この頃。ルール自体自動生成できればいいだろうが、さすがにこれは難しいの領域も超えているから考えない。
2003.05.15
コメント(0)
ひさびさに DVD を借りてきてみた。MIB II おもしろかった。こういうばかげたおもしろさは、アメリカ人がやっぱりうまい。BIOHAZARDはいっときゲームにハマッたのどんな映画だろうと見てみたが、やっぱ気色悪。夢に出るんだよな、これが。といいつつゲームもしてみる。日本語係り受け解析器 CaboCha/南瓜 の Version 0.40 が公開されたようだ。固有表現抽出機能なんてものがついているが、固有表現タグは、IREX (Information Retrieval and Extraction Exercise ) で 定義されているものをつかっているのか。さて、これを使って、アリスを解析してみるかな。 「学習に新聞を使用しているので, 会話文のようなドメインが異なる文はエラーが多くなるでしょう」とデモのところに書かれているが、どのくらいエラーがでるかが楽しみだったりする。なんて意地悪なんだ。
2003.05.11
コメント(0)
ブラクラってなんだと思ったら、ブラウザ・クラッシャーの略なのね。ふーん、こういうのを見ると、自分も歳を取った気がするなぁ。こういう4文字カタカナ語になりやすさってのは、確率的に見ると、何かおもしろいものがあるかもしれない。カタカナのまま見るパターンと、いったんローマ字にして、見るパターンを見てみるといいのかな。根拠はないが感覚的に。こういうのは、サンプル収集が大変ね。○ アリスのぶつ切り準備1ルイス・キャロルの『不思議の国のアリス』(Alice’s Adventures in Wonderland) を題材にすることにして、まず、会話文を引っこ抜こうと思ったら、「毒」に当たってしまった。 でも、びんには「毒」とは書いてありませんでした。そこでアリスは、ためしに味見をしました。カッコで括られたラベルは、単純に会話と切り分けることができない。「毒」と言いました。ともしあれば、それは発話を示すから、1文字であればラベルとするのもばかげていることになる。もう少し分かりやすいように、「この先に進んではいけません」と書かれた看板 と一緒に考えてみると、けっきょく、文の解析をしなきゃならなくなるのが分かる。「言う」という動詞が入っているかどうかなんてのも単純すぎる。「この先に進んではいけません」と叫んだ。となった瞬間に扱えなくなる。 そしてびんの首のところには紙のふだがついていて、そこに「のんで」ということばが、おっきな字できれいに印刷されていました。これなんかも同じ。「のんで」と叫んだとなれば発話になるから、カッコの中に書かれた部分だけで判断することができない。まあ、当然なのだけど。あるいは、「のんで」の文字が見えたとなればラベルだし、「のんで」の声が聞こえたとなれば発話。つまり、動詞を拾ってというのも、ちょっと高度なことをしないとできない。ということで、素直にあきらめることにしよう(笑)あと、眺めていて思ったのは、この訳文の場合、ある程度高い確率で話者を特定できるなと。この手の会話混じりの文章の場合、ものによって、話者を拾いやすいものと拾いにくいものがあるが、比較的拾いやすい部類に入るんじゃないだろうか。まじめにやると90%以上とかの確率で類推できるんだろうか。でも、その文だけでなく、前後をみなければいけないこともあるので、とりあえずめんどくさいので止めておく。いろいろ考えては見たが、とりあえず、まず、ぶっこ抜きして、あとは手作業でいいや。正規表現で「」を拾って、。?!で区切って終わり。幸い括弧内にさらに「」が入っているような邪道なものはなかったので、単純パターンで OK。ただし、「『「」』」みたいのは、ほんとは理屈上は考えられるのかな。まじめにやったらパースした方がいいのだろうけど、本質的なところじゃないので、安易にやって終わりにしよう。緑色の文字で書かれた部分は、ルイス・キャロル『不思議の国のアリス』の山形浩生氏による訳を使用しています。毎回繰り返しになるので、詳細は、次のリンクにある過去の日記を参照してください。
2003.05.10
コメント(0)
『銀河英雄伝説』の小説を読み始めた。まず1巻を読み終わった。アニメ版は確かにオリジナルに比較的忠実なのだなぁと読みながら思った。セリフもそのまま使っている部分がほとんどといえるほど。そうすると、かえって原作とアニメ版で違う部分がまたおもしろく感じる。○ ジャストシステムを眺める意味認識手法により、顧客の声を素早く分析できる テキストマイニング・ソリューション「CB Market Intelligence」 7月11日(金)発売 らしい。この Concept Base を中心にしたラインアップは、ジャストシステムの3本柱の一つとして、完全に定着というところかな。いい方向だと思う。ATOK ~ 一太郎を柱とした基本的な日本語処理の技術の追求がもう一つの柱。そして、コンシューマーベースの柱となる Just MyShop。教育市場や辞書などの販売は、ここにどうやって集約させていくか。まあとにかく、これが3本柱になるだろう。InternetDisk みたいなものは、副次的には重要な戦略性を持たせることができるけれど、柱ではない。まあ、なんにせよ基本路線として、万事が一太郎というところから完全に脱却できたようだから、あとは淡々とやっていけば、数年後には、けっこうまたプレゼンスのある会社になれるんじゃないだろうか。ConceptBase の路線は、大企業向けの収益がよい部分だけでなくて、低価格版をどうやって作っていくかというところが、今後の重要課題。しばらくするとテキストマイニングバブルがはじけるから(笑)。これに対応するには、ほんとうに使えるものを作っていく部分と、既存の技術を低価格化して、市場を広げる2方面戦略。日本語処理に関しては、地道なところで着実にやりつつ、継続的に日本語に関する興味をコンシューマーに対して喚起しつつ、漢字変換というレベルのイメージから、日本語処理というイメージに移行させていく。つまり、ブランド構築戦略。これは方言や、辞書の販売なども役立っているけれど、もう一歩進んで、日本語処理の権威となるためのイメージ作りが必要。CB Market Intelligence なども、そういう方向のブランド作りに役立つけれど、もっとつっこんで行くことが重要。JustSystem 日本語処理研究所のブランド構築。(今も、研究所はあるだろうけど、これをオープンな形でプレゼンスを高める。教育市場なんかは、もうネタ盛りだくさんで、いろいろ着手してるんだろう。そんなわけで、たぶん、資金的な問題が生じなければ、路線としてジャストシステムはけっこうよい方向に進めそうな感じがする。でもって、こういう企業をのばしてあげるためには、コンシューマーベースで地道に製品を買って上げることも必要。買ってもらうためには、Just MyShop をもっと強くしていく必要があって、ここはかなり改良の余地があるようにも思える。単にショップとして強くしていくのではなくて、このショップ自体に日本語処理の能力を端的に示すようなものも必要になってくるし、エンターテイメント的な部分とつないでいく必要もあるだろう。日本語処理がもっとコンシューマー市場でメジャーな分野になっていくには、やはりジャストシステムががんばるのが手っ取り早い。NEC や富士通、NTT ...とその手の企業が何かやってもあまりおもしろみがないのだ。言語処理というのは、コンピュータの利用が次のステップに進むために、非常に重要な分野にもかかわらず、地道で気長に進めなければならないため、一般の人の注意を向けるのが難しい。一般の人が描いているコンピュータによる言語処理というのは、今できることに比べてかなり先のイメージなのだから、このギャップをあまりに感じて失望してしまわない程度に現実と夢とのつなぎのイメージ作りも必要になる。テキストマイニングにしても、金をかけた割には...ということになるのだが、このステップというの重要かつなければならないもので、顧客をある意味騙してでも、なだめすかせてでも使わせていくということが必要になる。だから、啓蒙活動というのが重要な意味を持つ。というのもあり、啓蒙活動とコンシューマが、キーになってくるだろう。などと勝手なことを書いてみる。
2003.05.09
コメント(2)
ACADEMIC RESOURCE GUIDE は、おもしろいし役に立つなぁ。ここで知ったのだが、平成15年度国立情報学研究所オープンハウス というのが 5月27日に開かれるのだな。「量子コンピュータの最前線」ってなんだか分からんがおもしろそうだな。で、さらに国立情報科学研究所のサイトを見てみると、学術情報データベース実態調査報告書なんておもしろげなものが見つかった。大学Webサイト資源検索(JuNii大学情報メタデータ・ポータル試験提供版)の公開なんてのもあるな。いいことだ。ちなみに大学Webサイト資源検索から「形態素解析」で検索してみたけど、0件。「構文解析」0件。「自然言語処理」だとかろうじて4件。「コーパス」5件。こういうので、簡単に論文を探して大学関係者でなくても、一般人が気軽に論文を読めるようになるとすばらしいのだが...。まあ、こういうのは、あちこちで重複投資になっているところがあるだろうから、無駄金使ってまぁというところもあるが、こういう動き自体はいいことだと思う。○ アリスのぶつ切り その1とりあえず、昨日、 ルイス・キャロルの『不思議の国のアリス』(Alice’s Adventures in Wonderland) を題材に、遊んでみることにきめた。で、この翻訳については「あらゆる形で自由に利用・複製が認められる。」ということなので、著作権表示を明確に入れ、形態素解析や係り受け解析にかけてギタギタに刻んでみることにした。というわけで、当分の間、アリスのぶつ切りということで進めてみようと思うが、なにせ思いつきなので、途中で気が変わるかもしれん。で、まあ怖い者知らずというのだろか...。「何をしてもいいとはいえ、一応翻訳のプロジェクトなので、原文を大幅に変えるようなものはその旨明記しておくこと。ここらへんの「大幅」とかの解釈は、もちろんかなり裁量が入ってはくる。」で、原文を刻むだけで変更するわけではないので、まあいいかなと。まあ、クレームが入ったら途中でごめんなさい引っ込める(^^;; ということで、これからの日記にしばし、翻訳が引用されることになるが、氏の翻訳の労および、このような形で公開していることに対して謝意を示すとともに、「刻ませていただく」ことを宣言しておく。たぶん、こんな言葉使うから解析こけるんじゃん、ダメじゃん程度のことは書くだろうが、悪意はないのだ。ひらがななんか使うから解析こけるんじゃん、漢字使って訳してくれよぐらいのことはまあ、たぶん、平気で書くことになるだろう(笑)。さらっと見た感じ、どういう基準で漢字を使ったり、ひらがなをつかったりというのがいまいちわからんかった。文学や感性ってのは、実にあつかいにくいやっちゃ。なお、翻訳文を直接引用した箇所については、基本的に「このような形で緑色で記述する」こととし、分かち書きしたものに関しては、原文を別途載せてある限り特に色を変えることはしない。後日の日記には、このページへのリンクを張っておくことにでもするかな。で、めんどうなことはこの程度にしておく。まあ、一応仁義を切っておこうかと(笑)。ついでといってはなんだが、普段、日本語形態素解析器 MeCab やその辞書 IPADIC などについても、ダメじゃんとか書くことがあるが、これは基本性能を否定するわけではなく、基本性能を認めた上で、ここがいかんのじゃないかというのをただ書いているだけなので誤解のなきよう。その筋の方なら、そのあたり分かっていただいているものかと思うが、非常に感謝して使わせていただいているわけなのだ。最近、悪いところばかり引きずり出していたので、念のため。よく分かっていない人が読んで、ダメなんだと思われちゃうと申し訳ないし。あぁ、私は、なんて小心者なんだ。でもって、まずは、人工無能用に最終的には利用できないかなぁというのがあるので、発話の部分だけを抜き出してしまうことにする。ここでの発話の定義は、開きカッコ”「”と、閉じるカッコ”」”の間に挟まれている文字列をさすことにする。うまいこと、カッコが対応しているものだけだといいのだけど、まあ、やってみるのだ。さらに、この前段階として、空白(スペース、タブ、改行等)以外の文字列のうち、 ”。””!””?”を区切り文字として区切った単位を文として、文の単位に切り分けたリストを作成しておくことにする。面倒なのは、「ええ、『えらい小さなハチさん』を暗唱しようとしたんですけれど、ぜんぜんちがったものになっちゃったんです!」 のようなパターンと、「アリスはうでを組んで、暗唱をはじめました。* * * * *『ウィリアム父さんお歳をめして』とお若い人が言いました。 の区別。つまり、『えらい小さなハチさん』 は、詞?の題名を指している『二重括弧』なのだけど、『ウィリアム父さんお歳をめして』は、発話中に含まれる発話だから『二重括弧』になるのだな。で、この場合は本来「一重カッコ」と同じ扱いにして、会話として取り出すという手もあるのだけど、面倒なのでその辺は適当にするかな。ということで、前書きで今日は終わってしまった。『不思議の国のアリス』の翻訳の著作権についてルイス・キャロルの『不思議の国のアリス』(Alice’s Adventures in Wonderland) の翻訳については、山形浩生氏の訳を利用させていただきました。翻訳の著作権表示は次のとおりです。(c) 1999 山形浩生本翻訳は、この版権表示を残す限りにおいて、訳者および著者にたいして許可をとったり使用料を支払ったりすることいっさいなしに、商業利用を含むあらゆる形で自由に利用・複製が認められる。(「この版権表示を残す」んだから、「禁無断複製」とかいうのはダメだぞ)プロジェクト杉田玄白 正式参加作品。詳細はhttp://www.genpaku.org/を参照のこと。(c) 2003 傀儡師本日記の山形浩生氏訳『不思議の国のアリス』の翻訳引用を含むすべてのページの記述については、この版権表示および翻訳に関する上記、山形氏の著作権表示を残す限りにおいて、著者および翻訳者にたいして許可をとったり使用料を支払ったりすることいっさいなしに、商業利用を含むあらゆる形で自由に利用・複製を認められる。って、まあ、この日記自体をどうこうしようとする人はいないだろうけど(笑)、翻訳文との関係で、一応記述しておくことにした。翻訳を含むページには、次の印をつけておくことにしようかな。 (なお、この画像は 海のフリーそざい かいようそざいしつの素材を使わせていただきました)。
2003.05.05
コメント(0)
やっぱり、このところ食い過ぎで太ってしまった。しゃあない、また少し減量することにしよう。○ 外来語のカタカナ表記(残りは省略)一通り『朝日新聞の用語の手引き』の外来語を日本語形態素解析器 MeCab にかけてみたが、やはり、ipadic は日常用語の語彙がかなり不足していること、また、次の例のように素直に未知語に落ちなかった場合には解析誤りが多々生じてしまうこと、コストなどの調整も必要になりそうなことが分かった。終わりまでやったのだけど、同じようなパターンばかりなので、書いてもつまんないから、残りはばっさり省略。けっこうたくさん未知語があった。めんどくさい。実にめんどくさい。やはり、こうなったら可能な限り未知語に落ちやすいようにして、片っ端から登録していくというのが手かもしれない。でも、コストを手でつけるのはさすがにめんどくさい。めんどくさいので、とりあえず、ばっさり同じような値をつけてしまって、結果を見ながら調整する方向かな。自動的につけるのは、もうちょっといろいろ見てから考えるとしよう。マイ 名詞,固有名詞,人名,名,*,*,マイ,マイ,マイコンピュータ 名詞,一般,*,*,*,*,コンピュータ,コンピュータ,コンピュータこれは、舞ちゃんのコンピュータなのかなぁ。舞ちゃんって誰?ロ 名詞,固有名詞,組織,*,*,*,ロ,ロ,ロリエ 名詞,固有名詞,人名,名,*,*,リエ,リエ,リエモロ 名詞,固有名詞,一般,*,*,*,モロ,モロ,モロヘ 助詞,格助詞,一般,*,*,*,ヘ,ヘ,エイヤ 感動詞,*,*,*,*,*,イヤ,イヤ,イヤこの手のものは、解析誤りパターンの一つ。解析誤りパターンから、誤り確率を求めてもおもしろいかな。それにしても、この手の単語ってほんとに登録されてない。生活感に欠けるのだよなぁ。人工無能用に使おうとすると、生活感に欠ける辞書は致命的なのだ。いくら難しい言葉をしっていても、お役人としか会話が通じないようなヤツじゃいかんのだ。しかしまあ、外来語(カタカナ語)ってのは、面倒なもので、音楽放送で使う音声の調整装置の mixer はミクサーで、家庭用のジュースを作ったりする撹拌機(かくはんき)の mixer はミキサーなのだな。この手のものがけっこうたくさんある。実にいいかげんなのに厳密だから困ったものだ。「ミクサーでジュースを作った」という文は、『朝日新聞の用語の手引き』に従えば、やれるもんならやってみよという世界なので誤りなわけ。「このミキサーは実にいい音を出してくれる」というのは、グイーンという音がいいのであって、音をいい具合にミックスしてくれるという意味にとってはいけないのだ。まあ、とにかく地道に登録してくとするか~。でもって、カタカナ語に関しては、ちょっと飽きてきたので、またそのうちネタにすることにして、どうするかなぁ。とりあえずプログラミングネタはしばし封印してあるので、おいといて、青空文庫あたりにある何かを解析させながら、もう少し、考えてみるかな。与謝野晶子版の『源氏物語』なんかも、おもしろいかと思ったが、かなり辛そうなので プロジェクト杉田玄白 正式参加作品リストあたりから選んでみるかな。ということで、ルイス・キャロル著、山形浩生訳の不思議の国のアリス を題材にしてみよう。そう、この中から、まず、会話の部分だけを抽出して見るかな。
2003.05.04
コメント(0)
今日は、健全な社会生活の実現のために というテーマで、普段あまり見ることのないページをピックアップしてみた。「ダメ、ゼッタイ。」ホームページ。分かる人にはすぐ分かる。"Just say No!" 。アメリカでだいぶ前から問題になっていたものだが、日本でも、じわじわと大きな問題になってきているのだろう。検挙者数の伸びは、それほどすごく見えないけど、潜在化してる部分がかなりあるんじゃないだろうか。ちなみに、このページ 20才~24才と書くべき所、20人~24人になってるなぁ。ダメじゃん。あと、平成11年には、1,994.6kg と2トン近い覚醒剤が押収されているのだ。ということは、実際には何トンもの覚醒剤が流通してるってことで、かなり恐ろしいことになっている...。未成年者が 1,003 人も検挙されているというのも凄いことなのだ。それから、一般人は何でも麻薬とひとくくりに見てしまうが、大麻などを扱う大麻取締法と、覚醒剤などを扱う覚醒剤取締法は、法律自体別のものが適用され、罪の重さも違うので注意。覚醒剤取締法の法が重い。○ 外来語のカタカナ表記(は行)は行は、b,h,v,p と複数のパターンが入ってくるので、非常に数が多いので、今日はいつもよりもはぶっとばすのだ。ハーフウエーは未知語。アウェー、オフサイド、インフロントキック、...、サッカー用語などまとめて登録した方がいいかも。スポーツ関連はまとめて入れた方が、一般の会話にはいいかもしれない。バイオテクノロジーは登録されているが、ナノテクノロジーは登録されていない。意外にハイオク、ハイオクタンなども登録されていない。パイオニアは、一語で解析すると固有名詞になる。「パイオニアの株価」、「パイオニアは一流メーカーである」なども固有名詞。これはよいし、「彼はその分野のパイオニアだ」とか「パイオニアたるもの、そうでなければいけない」「車載機器のパイオニアである某社は、常に先端を走り続ける。」などは名詞になってくれる。アバウトにコストを設定するときの参考になるかな。ただし、「パイオニアとは、先駆者のことである。」は固有名詞になってしまう。しょうがないかな。ハシシュは登録されていない。アヘン、モルヒネ、ヘロイン、コカイン、スピード、マジックマッシュルーム(2語)、大麻などは登録されているのに。クラックは登録されていない。オイオイどこへ行く...。ついでに、警察官は一単語で登録されているので、麻薬取締官も一単語に昇格してあげようか。「お巡りさん」も一単語だったりする。裁判官も一単語。で、消防士は消防/士なのだ。税理士は一単語なのに。その他、弁理士は弁理/士。運転/士。どうも職業差別が生じているようだ。キャバクラ嬢などもキャバクラ自体が未知語になる。牧師、教師は一単語なのに勝負師は勝負/師になる。どうも方向がどんどんずれていくのが、そのうち、職業一覧でも作ってみよう。パスポートは、文脈によって一般名詞と固有名詞が出てくるが、「パスポートの取得」のような場合に固有名詞になってしまうのが困りもの。やっぱり、こういうのは全部が全部正しい解析するのは難しいのだろうな...。バセドー 未知語,*,*,*,*,*,*,*,*氏 名詞,接尾,人名,*,*,*,氏,シ,シ病 名詞,接尾,一般,*,*,*,病,ビョウ,ビョーカタカナ未知語+氏とかは、後処理で人名にしてしまおうかと思っていたが、こういうパターンのときは、さらに「病」がついているのでひとくくりにするとかしないと、面倒なことになるので、バセドー氏病とか、病気の類は一単語で登録しておいた方が良いのかもしれない。用途を考えるたびに、ばらしたままにしておくか、くっつけるかは、気持ちが揺れるなぁ。次のは、こけたときのパターン。未知語になりやすさのコストを変えて、未知語に落としてしまう方針をとれば未知語に落ちちゃうだろうけど。うーん、やっぱり、ちょっともう少し未知語に落ちるようにした方がいいのかもしれないなぁ。バード 名詞,固有名詞,人名,名,*,*,バード,バード,バードウイーク 名詞,一般,*,*,*,*,ウイーク,ウイーク,ウイークブルー 名詞,一般,*,*,*,*,ブルー,ブルー,ブルーバード 名詞,固有名詞,人名,名,*,*,バード,バード,バードに 助詞,格助詞,一般,*,*,*,に,ニ,ニ乗る 動詞,自立,*,*,五段・ラ行,基本形,乗る,ノル,ノルハード 名詞,固有名詞,人名,姓,*,*,ハード,ハード,ハードウエア 名詞,一般,*,*,*,*,ウエア,ウエア,ウエアバイ 名詞,一般,*,*,*,*,バイ,バイ,バイリン 名詞,一般,*,*,*,*,リン,リン,リンガル 名詞,固有名詞,人名,名,*,*,ガル,ガル,ガルパッ 副詞,助詞類接続,*,*,*,*,パッ,パッ,パッセン 名詞,固有名詞,人名,姓,*,*,セン,セン,センジャー 名詞,一般,*,*,*,*,ジャー,ジャー,ジャーバッファ 名詞,一般,*,*,*,*,バッファ,バッファ,バッファロー 名詞,固有名詞,人名,姓,*,*,ロー,ロー,ローパ 名詞,固有名詞,組織,*,*,*,パ,パ,パブリ 名詞,一般,*,*,*,*,ブリ,ブリ,ブリシティー 名詞,一般,*,*,*,*,シティー,シティー,シティーパ 名詞,固有名詞,組織,*,*,*,パ,パ,パラボラ 名詞,固有名詞,人名,名,*,*,ラボラ,ラボラ,ラボラパリ 名詞,固有名詞,地域,一般,*,*,パリ,パリ,パリジャン 名詞,固有名詞,人名,名,*,*,ジャン,ジャン,ジャンハロ 名詞,一般,*,*,*,*,ハロ,ハロ,ハロウィーン 名詞,固有名詞,地域,一般,*,*,ウィーン,ウィーン,ウィーンバン 副詞,助詞類接続,*,*,*,*,バン,バン,バンアレン 名詞,固有名詞,人名,姓,*,*,アレン,アレン,アレン帯 名詞,接尾,一般,*,*,*,帯,タイ,タイピン 副詞,助詞類接続,*,*,*,*,ピン,ピン,ピンナップ 名詞,一般,*,*,*,*,ナップ,ナップ,ナップホー 名詞,固有名詞,人名,名,*,*,ホー,ホー,ホーバー 名詞,一般,*,*,*,*,バー,バー,バークラフト 名詞,一般,*,*,*,*,クラフト,クラフト,クラフト例によって、次のようなものは慣用句扱いで1単語かな。バランス 名詞,一般,*,*,*,*,バランス,バランス,バランス・ 記号,一般,*,*,*,*,・,・,・オブ 名詞,固有名詞,一般,*,*,*,オブ,オブ,オブ・ 記号,一般,*,*,*,*,・,・,・パワー 名詞,一般,*,*,*,*,パワー,パワー,パワービアホールはあるけど、ビアガーデンがない。意外にも登録されてなかったハムエッグ。食べ物関連はやっぱり大量登録だな。ペレストロイカは一般名詞でドイモイは固有名詞か...。ホチキスは、一般名詞になっているが商標登録されているから固有名詞。そういう意味では宅急便もクロネコヤマトしか使えない登録商標だから固有名詞にしないといけない? 宅配便は宅配/便になるのね。ビオラ 名詞,固有名詞,人名,姓,*,*,ビオラ,ビオラ,ビオラを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ弾く 動詞,自立,*,*,五段・カ行イ音便,基本形,弾く,ヒク,ヒクウーム、どうもこのあたり気に入らないなぁ。ボストン 名詞,固有名詞,地域,一般,*,*,ボストン,ボストン,ボストンバック 名詞,サ変接続,*,*,*,*,バック,バック,バックみたいなのはどうだろう。ボストンで発祥したバックだからボストンという固有名詞に解析されても間違いではないとするか? 九谷焼が一単語なんだから、ボストンバックで一単語で入れてもいいな。かなり以外だったのが、ミロのビーナス。ミロが登録されてないのだなぁ。強い子のミロもダメか。ちなみに、ビーナスが『用語の手引き』に載っている記述だが、Google で検索してみると、ビーナスもヴィーナスも同じものとして扱われるのね。下手に賢くなっちゃうと、どちらの用法が多いか調べるときに困るからやだなぁ。ミロ 未知語,*,*,*,*,*,*,*,*の 助詞,連体化,*,*,*,*,の,ノ,ノヴィーナス 未知語,*,*,*,*,*,*,*,*ミロ 未知語,*,*,*,*,*,*,*,*の 助詞,連体化,*,*,*,*,の,ノ,ノビーナス 名詞,一般,*,*,*,*,ビーナス,ビーナス,ビーナスこの手のものも大量に入れて上げないとだめかも。ファッション関連とか大量登録した方がいいかな。ボディーコンシャス 未知語,*,*,*,*,*,*,*,*ボディ 名詞,一般,*,*,*,*,ボディ,ボディ,ボディコン 名詞,一般,*,*,*,*,コン,コン,コンあとは、英語の形容詞の類がカタカナ語になったときにどういう品詞として扱うかというのもやっぱり悩ましい。これはそのうちまとめて見ると。要するに名詞になっているものと形容動詞語幹になっているものとがあるが、これの根拠を例文ベースで拾い上げて、形容動詞的な使い方をするかどうかを調べて、統計的に倒していくか、それとも一つ一つ検討していくか。1000語ぐらいなら、下手に例文ベースでやるより、ちまちま例文を考えて入れておいた方が確実という話もある。要するに例文ベースでやると、サンプルによって異なりが大きすぎるから。パブリック 名詞,形容動詞語幹,*,*,*,*,パブリック,パブリック,パブリックリレーション 名詞,一般,*,*,*,*,リレーション,リレーション,リレーションワイルド 名詞,形容動詞語幹,*,*,*,*,ワイルド,ワイルド,ワイルドな 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイグレート 名詞,一般,*,*,*,*,グレート,グレート,グレートな 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ車 名詞,一般,*,*,*,*,車,クルマ,クルマあと、これ見れないけど、なんかこういうところに参考になるようなものがあるのかな。中国語機械翻訳における敏感語概念
2003.05.02
コメント(0)
日本人記者の手榴弾が爆発 ヨルダンの空港で。日本人が無差別テロをやってしまったようだ。「日本人ジャーナリストがイラクから戦争取材の土産品として持ち込んだ手りゅう弾が爆発した」ということらしいが、冗談ではなく、これは国によっては死刑になってもおかしくない重罪ものだと思う。交通事故で人をひき殺すのとはわけが違う。戦争は意図した殺人であるのである程度仕方がないことだが、こういう事件は、意図した殺人よりさらにたちが悪い。意を持って人をひき殺すより、泥酔状態で車を運転して人を殺す方がたちが悪いと思うが、それと同じだ。誰が被害に遭うか分からないという意味で無差別殺人なのだから。○ 外来語のカタカナ表記(な行)今日は『朝日新聞の用語の手引き』のナ行を見ていくことにする。一番のヒットは、「ナツメグ」。ナツ 名詞,固有名詞,一般,*,*,*,ナツ,ナツ,ナツメグ 名詞,固有名詞,人名,名,*,*,メグ,メグ,メグナツちゃんとメグちゃんが登場してしまった。したがって、ナツメグを食べる。ナツ 名詞,固有名詞,一般,*,*,*,ナツ,ナツ,ナツメグ 名詞,固有名詞,人名,名,*,*,メグ,メグ,メグを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ食べる 動詞,自立,*,*,一段,基本形,食べる,タベル,タベル。 記号,句点,*,*,*,*,。,。,。みたいに人を食った話になる。食材の類は、かなり広範囲に収集して登録しておかないと、いけないかもしれない。ココナッツ、タピオカのような単語も登録されていない。メカブや和布蕪なんかも登録されていない。ナショナル 名詞,固有名詞,組織,*,*,*,ナショナル,ナショナル,ナショナルコンセンサス 名詞,一般,*,*,*,*,コンセンサス,コンセンサス,コンセンサスブランドのナショナルかな。固有名詞と同じ文字列を含むような単語の場合は、特にそれより低いコストで長単位の単語を拾い出して登録候補にするような仕組みが必要かな。いったん、処理の方をいじって未知語に落ちやすくしておいて、拾い出してからチューンしなおすとかいうのがいいか。このあたり地道にやっていくしかないな。基本的にいったん大量の文の中から長単位で未知語として拾い出して、その後コストを調整して、できるだけ登録数が少なくて済むようにコストを調整していくとかいう方向性なのかもしれない。ノー 感動詞,*,*,*,*,*,ノー,ノー,ノーカー 名詞,一般,*,*,*,*,カー,カー,カーデー 名詞,接尾,一般,*,*,*,デー,デー,デー"Oh, No! Car day!" といった感じ。この手のは一単語としてとりあえず登録する方向かな。ルールベースだと「ノー」「××」「デイ」で登録単語を拾い出すことができるか。登録候補として、ルールベースで拾い出すという方向もあってもいいかな。ちなみに、ノンXXX、つまりノンストップ、ノンフィクション、ノンプロみたいなのは、一単語で登録されている。ただし、ノンプロフェッショナルは、ノン(接頭詞,名詞接続)+プロフェッショナル(名詞、一般)でちゃんととれる。やっぱり統一性を考えると、後処理でまとめてしまうか。ニュートラディショナル、ニュートラル、ヌーベルバーグ、ネーチャー、ノスタルジーみたいなものも意外に登録されていない。ノーモア 名詞,一般,*,*,*,*,ノーモア,ノーモア,ノーモア・ 記号,一般,*,*,*,*,・,・,・ヒロシマ 名詞,固有名詞,地域,一般,*,*,ヒロシマ,ヒロシマ,ヒロシマこういうのは解析としてはある程度正しいし、ノー・モア・ナガサキ、ノー・モア・XXX という感じでバリエーションもあるので、一単語にしたくない一方、フレーズとしてもとらえたいところがある。後処理でまとめてしまうような感じかな。『用語の手引き』ではナ行が全部で36語しかなく、意外に少なかった。外来語としてよく使われるものと、音の響きは関係あるんだろうか。まあ、「ン」から始まる外来語は、日本語にはまず入ってこないとかはあるんだろうけど(笑)。アフリカだと「ン」から始まる言葉があるし、もっと広い範囲で統計とってみるとおもしろいかな。6文字を超えると略される可能性はかなり高くなるし、受け入れやすさは揺れの大きさに関係するだろうし。どこか探したら、そういうのをちゃんと調べている人がいそうだな。
2003.05.01
コメント(0)
商品券が手に入ったので、デパ地下に連日で食料の調達に行った。結果として、太ってしまった(^^;; 確かにコンビニ弁当よりおいしいけど(比べるな~)、太っちゃうのは嫌だな。歩く距離も2分ばかりよけいにかかるから、運動量も増えているのにぃ。おかしい。商品券はまだ残っているけど、もう1日行ったらやめよう。やっぱり、粗食が一番だ。外来語のカタカナ表記(た行)考えてみると、ちょうど『朝日新聞の用語の手引き』の外来語を使って日本語形態素解析器 MeCab の解析結果を調べていたが、ちょうど「外来語」言い換えの話題が出てきて話がそれてしまったので、また、地道に続けることにする。それにしても、『朝日新聞の用語の手引き』に載っている外来語の選択基準って、いまいちよく分からないな。何を基準にしてるんだろう。まあいいや。そういえば、次のページを見て日本の文化度の低さを感じた。CASTEL/Jの活動停止についてのご案内を見ると、CASTEL/Jのようなものの遺産を活かすような機関がないのだな。ここの研究会の資料欲しい。こういういのってしばらくすると権利関係も曖昧になって誰も管理できなくなり封印する以外なくなるとかして埋もれちゃうんじゃないだろうか。そのまま埋もれていくのは惜しい気がする。さて、本題にもどり、タイム 名詞,一般,*,*,*,*,タイム,タイム,タイムシェアリング 名詞,一般,*,*,*,*,シェアリング,シェアリング,シェアリングタイムレコーダー 名詞,一般,*,*,*,*,タイムレコーダー,タイムレコーダー,タイムレコーダーこの手の複合語を、個々の単語に分割するか1語にしてしまうかについては、次の問題と一緒に考える。ダウン 名詞,サ変接続,*,*,*,*,ダウン,ダウン,ダウンパーカー 名詞,一般,*,*,*,*,パーカー,パーカー,パーカーダウンが名詞-サ変接続になっているが、ここでのダウンは羽毛のダウンであって、下がるの意味のダウン(down)じゃないから、解析誤りということになる。ダウンジャケットとかのダウンだな。ダウンサイジングなら名詞-サ変接続でもいいのかな。ダウンフォール、ダウンヒル、ダウンマーケット、ダウンロード、ダウンサイド、ダウンタイム、ダウンスイングはどうだろう。ダウン症候群の場合なら固有名詞にならないといけないだろうし(Down’s syndrome)。そうやって考えると、やっぱり複合語の扱いが難しいということになってくる。複合語をいちいち登録していては、登録数があまりに多くなりすぎるから、登録数を減らすためには、できるだけ複合語であっても、バラの単語のみ登録する方針にしたいと思う一方、それだと、品詞が正しくつかない確率が非常に高くなるので、結局の所、うまくいかない単語のみ一語として登録するといった方策をとることになりがちなのだが、それだと、今度は似たようなものが一語になったり、複数の語になったりして一貫性を欠くことになってしまうという欠点が出てくる。これを回避するには、複合語を個々の単語への品詞がついた状態で登録できるようにするか、まとめて一単語で登録することを徹底して、かつ、一貫性が検証可能な仕組みを用意するといった2つの方向性が考えられる。で、MeCab の場合、複合語をちゃんと扱える登録の仕方ができないから、後者の選択をとらざるを得なくなるかなぁという気がする。でも、やっぱり複合語は、複数の語として構成されていないと、嫌だなという場面/用途もあるので、こまったところかなぁ。言語処理としては品詞が正しくつくのが好ましいから、正しくない品詞がつくぐらいであれば、長単位で複合語を1単語として登録してしまった方が、あとの処理が楽だし、検索エンジン用の分かち書きに使うのであれば、むしろ品詞は正しくつく必要はなくて、できるだけ細かい(かつ、当然正しい)単位で分かち書きされている方が役に立つだろうし。そうやって考えると、両者の要求を満たす形態素解析器としては、複合語を個々の構成単位を含めて登録できる機能が欲しいところではあるな。まあ、現状、やっぱり人工無能用に使えればいいから長単位で登録して、検索用に使いたいときは、エントリを消し込んでいくような仕組みを作ればいいのかな。で、またもとに戻って、『用語の手引き』には、タンバリンとタンブリンがあるのだな。ならべて書いてあるからどちらも楽器の tambourine をさしているんだろうけど、カタカナ語は、表記の揺れが大きくて困る。時代によっても異なるものだし。電離放射線を照射された物体が単位質量当たりに受け取るエネルギーを表す単位としての gray はイギリスの物理学者のStephen Grayから来ているからグレイと書き、英国の詩人 Thomas Gray はグレーと書き、ダーウィンの知人でもある米国の植物学者 Asa Gray は、グレー。グレアムの法則の Graham はグレアムだけど、電話の Alexander Graham Bell はグラハムと綴ることが多い。Beer は飲み物としてはビールなのに、beer garden ならビアガーデン。でも beer bottle ならビール瓶。ビアとビール、タンバリンとタンブリン、グレアムとグラハム、グレイとグレー....をそれぞれ一緒のものとして扱えるような仕組みも欲しくなってくるな。そうすると、これは空いているフィールドにでも値をつっこんじゃうかな。それとも、やっぱり同義語辞書として別に作るか。けっこう迷うな。ん、複合語ID でもやっぱり辞書に強引につっこんどいて、IDを持っているものなら pickle 化しておいたデータから分割したものを後で読み込んじゃうという手もあるな。どっちにしろ長単位でいけるか。あれ、また、話がそれた。で、再度戻って、チェンジ 名詞,サ変接続,*,*,*,*,チェンジ,チェンジ,チェンジ・ 記号,一般,*,*,*,*,・,・,・オブ 名詞,固有名詞,一般,*,*,*,オブ,オブ,オブ・ 記号,一般,*,*,*,*,・,・,・スペース 名詞,一般,*,*,*,*,スペース,スペース,スペースなんだろう、「オブ」が固有名詞か....。そもそも、英語をそのまま日本語にしたような場合、品詞の付け方どうすんだろう。一単位で名詞にでもして慣用句的に扱うのがいいのかな。困ったもんだ。チック 名詞,一般,*,*,*,*,チック,チック,チック症 名詞,接尾,一般,*,*,*,症,ショウ,ショーダウン症のダウンは固有名詞だけど、このチックは痙攣することのチックだから、名詞でいいのか。XX 症の場合、英語だったら xx’s syndrome のように所有格が出てれば固有名詞ということになるんだろうが、カタカナ語にしちゃうと分からなくなるのだよな。ふぃー、そもそも日本語が安易に外国語を取り入れられる言語だからややこしくなるんだ。やっぱり、外来語排斥運動でもした方がいいんだろうか(笑)。外来語排斥運動は、外来語を排斥する運動ということなので、名詞、名詞(サ変)、名詞(サ変)なのかな。複合語ってのは考えてみると、1つの文と同じようなものだったりするのだな。サ変名詞が末尾に来ているようなものだと、目的語となるようなものを複合語内にもっていて、全体として xxx をする「こと」とかいった感じになるものもたくさんある。その一方で、京都駅みたいなものなら、京都の(にある)駅であるわけで、ちょっと性質は違うな。診断手引きは、診断を手引きするじゃなくて、診断についての手引きだろうし、まあいえたとしても、診断のやり方について手引きすることという感じか。複合語はやっかいだなぁ。あぁ、進まんぞ。チップはサ変名詞になっちゃうけど、野球の tip のチップは、チップするでサ変名詞でもいいけど、「チップを渡す」のチップは、この場合のチップは、チップするとは言えないから、サ変にして欲しくない気がする。こういうレベルで難癖つけると、けっこう問題ある解析はあるかもしれない。人工無能の文生成のときサ変だったら...するという形式に変換してどうこうするとかいったルールを作ったときに、正しくない動作をする可能性があるということにつながる。チップを渡す。チップ 名詞,サ変接続,*,*,*,*,チップ,チップ,チップを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ渡す 動詞,自立,*,*,五段・サ行,基本形,渡す,ワタス,ワタス。 記号,句点,*,*,*,*,。,。,。ワンピース、ツーピースなら一語でスリーピースならスリー/ピースと分かれちゃう類は、やっぱり枚挙にいとまがない。でも、どうせ入れるならスリーピースぐらいまでは入れちゃった方がいさぎいいので登録してしまうことにしよう。ディーシーブランド 未知語,*,*,*,*,*,*,*,*DC 名詞,固有名詞,一般,*,*,*,DC,ディーシー,ディーシーブランド 名詞,一般,*,*,*,*,ブランド,ブランド,ブランド「ディーシー」は単語としては、登録されてないのか。IBMの場合、アイビーエムでも登録されているのに。こういう一貫性を保つのはけっこう難しいかもしれない。一括して整理できるような方法を考えないといけないかもしれない。ふー。「Tバック」は登録されているけど、(紅茶の)「ティーバッグ」は登録されているってどういうこと? いやんなっちゃうな。まあ、ティーバック、Tバックが登録されていて、ティーバッグが登録されていないよりまだましな気もするし、ティー と バッグがそれぞれ登録されているから、未知語にはならなくて、一応ちゃんと名詞+名詞にはなるから、ティーバッグの一語で登録されていないこと自体は、問題ないのだけど。「Tバック」が入っていて、キャミソール(camisole)が入っていないのは、趣味の問題なんだろうかな。ブラスリップ、ペチコート、スリップ、スパッツ、ブルマ、ステテコ、トランクスなども入っていない。ダメじゃん。やっぱり生活感がないのね。ちょっと検索してみたら、下着についてまともに登録しようとしたら、それなりに大変なのだ。でも、検索しながら変態になった気分になってくるので、女性にでも頼みたいが、もっと変態だと思われるので困ったことだ。辞書ってのは世界観そのものだから、言葉を持たないのは知識を持たないに等しい。やっぱり、それぞれの分野の専門家が、それぞれの分野の辞書を作るのがいいのだな。というわけで、専門用語の辞書を収集するというのも一つの手かもしれない。エントリ自体は、専門用語を元にして、品詞やコストをつけていくところだけ、自分でやると。あれ、デザインがデ 助詞,格助詞,一般,*,*,*,デ,デ,デザイン 名詞,一般,*,*,*,*,ザイン,ザイン,ザインになっちゃう。前は大丈夫だったのに...。エントリはあるし、「デザインする」とかなら大丈夫なのに。これ、バグっぽい。デザインについて調べるデ 助詞,格助詞,一般,*,*,*,デ,デ,デザイン 名詞,一般,*,*,*,*,ザイン,ザイン,ザインについて 助詞,格助詞,連語,*,*,*,について,ニツイテ,ニツイテ調べる 動詞,自立,*,*,一段,基本形,調べる,シラベル,シラベルあちゃー。デ 助詞,格助詞,一般,*,*,*,デ,デ,デバッグ 名詞,一般,*,*,*,*,バッグ,バッグ,バッグデバグも同じパターンだな。なにはともあれ、タ行では19個ばかりの未知語が出た。
2003.04.30
コメント(0)
国立国語研究所 「外来語」委員会から、第1回 「外来語」言い換え提案 ── 分かりにくい外来語を分かりやすくするための言葉遣いの工夫についての提案 ── が出ている。確かに日常カタカナが氾濫してわかりにくくなっているところはあるな。言い換えもけっこう難しいものがある。昔の知識人はみな漢文ができて、素養があったけど、今はそうじゃないからね。むしろ、英語を使って和製英語を作る方が楽なぐらいで。まあ、明治時代の文書など見ると、感じが多すぎて逆に辛かったりもするものだけど(笑)。こういうの見ると、難癖つけて終わりというパターンが多く出てくるだろうが、難癖つけるなら、ちゃんと外来語相談窓口 があるわけだし、電話でも受け付けてるわけだから、直接、伝えればいいのよね。マスコミなんかがこういうものをニュースにするときも、ちゃんと受付窓口を明示して、文句があるならここに伝えればいいよというのをちゃんと伝えるようにしないといけないと思う。この場合であれば、中間発表もされているわけだし、ほんとはチャンスがあったのだよな~。やっぱり継続的にこういうものに対してもフォローしていくような仕組みが必要と。たくさん、ありすぎるから。お魚さんの名前の言い換えなんてのも前にあったな。で、国立国語研究所なんかの場合だと、意見すればそれなりに効果があるだろうから、問題があったり、こうした方がいいということがあったら素直に意見をしたらいいかもしれない(でも、どういう意見が出て、どう反映したかというプロセスが明かされないと不信感を抱くが...)。これからまだ第2回に入っていくわけだし、意見を書き込んでみるか。エンパワーメントなんてのは、ほんと止めてくれよなとか思う一方、データベースなんてのは、いったいなんて言い換えるのだろうかと楽しみでもある。ネガティブな面から見ずにポジティブな面から、生活の中の用語としてコンテクストを想像つつ、考えてみるとおもしろいかもしれない。うーん、そういえば、この提案、理解度を大きく4段階に分けて示してるんだけど、根拠が不明だなぁ。なぜに根拠になるデータを出さないのかなぁ。こういう作業をするときに、いろいろデータを収集したりしてるだろうけど、そういうデータを出せばいいのに。なんか問題あるんだろうか。もっとデータを出して欲しい。データを出さないということは、やっぱり意見は欲しくないと思えてしまう。出せるものは、積極的にどんどん出していくと、機関の信頼性が高まって、好意的に一般人に受け入れられる組織になっていくのになぁ。行政機関すべてに言えてるんだけど。さて、国立国語研究所ちょっと眺めてみる。『日本語話し言葉コーパス』(モニター版2002)公開のご案内 ああ、こんなもの出ていたのだな。これ自体は非常に評価できることなんだけど、「本データの利用は研究目的に限る.」遊びじゃダメなのかなぁ。「また公開された論文等のコピー3部を(独)国立国語研究所に送付しなければならない.」とかあるな、日記送りつけたろか(笑)。この話し言葉コーパス欲しいな。国立国語研究所はいろんなデータを制限を付けずに、一般公開して欲しい...。(2)商品開発の禁止本データの利用は研究目的に限る.商品開発を目的とした利用は許可しない. 音響モデル,言語モデル等を作成して研究に利用することはさしつかえない が,それらを利用した音声認識システム等を販売してはならない. なんて制限も取っ払ってしまった方がいい。下手に雇用政策をするより、この手の組織のデータなどを解放することによって、積極的に製品にも使わせてるなどすればいいのに。何か問題があるんだろうか。政府関連機関がいろんな種類のデータを放出してそれをできるだけ制限なく使うことができるようにすれば、いろんな商売が出てくるだろうし。たとえば、総務省が郵便番号データを公開しているが、こういうものは製品に組み込まれて、いろんな製品が出てくるのに役立っているじゃない。そういう経済効果を考えるべきだと思うんだが...。その方が税金を有効に使っているということになる。本来、価値に転換できないものを公開することによって、商品に組み込まれて、販売される。そうすれば、それを使って儲けた会社が税金をまた払う。それで還元されるわけだし、節税によって税金に直接還元されないように思えても、雇用を生み出し、給与が払われれば、そこで税金に還元されていくわけだし。ちと、そういう経済効果とかも考えながらやってほしいものだ。国家公務員さんたちは。研究者にしても科研費の類を使ってやった研究は、いかに社会に還元していくかって考えてほしいものだし...。そういう流れを作ることが日本の経済を強くすることにもつながっていくわけだし。うーん、話がそれて終わったなぁ。
2003.04.27
コメント(0)
CIO Online ナレッジ・マネージメントの世界 はだいぶ量が増えて、まとめて読めるような感じになってきているな。たまにこういうものを読んでみると楽しい。Tripod に作ろうとした傀儡師研究室はぜんぜん更新できないし閉じてしまうことにした。ここ以外は XREA にある 傀儡氏の実験室だけにしておく。が、あっちも全然更新してないな...。このところ、ここもさぼりがちだし。あとは、いつものマニアの世界。○ MeCab の差分を眺めるそういえば、日本語形態素解析器 MeCab がデグレードしているんじゃないのと書いて、そのままになっていたな。074.txt が mecab version 0.74 で 075.txt が mecab version 0.75 だが、確かによくなっているところはよくなっている。うーん、でも難しいものなのだな。パラメータ(コスト)を変えると、また大きく変わるだろうし。作る側としては、たぶん、あまり結果を気にせずに、プログラムとして正しく動いているかどうかを徹底的に追求して、辞書をカスタマイズしてよくしていくのとは別のフェーズとしてとらえた方がいいんだろうし。鍍金がはげる。***** 074.txt鍍金 名詞,サ変接続,*,*,*,*,鍍金,トキン,トキンが 助詞,格助詞,一般,*,*,*,が,ガ,ガ***** 075.TXT鍍金 名詞,サ変接続,*,*,*,*,鍍金,メッキ,メッキが 助詞,格助詞,一般,*,*,*,が,ガ,ガ*****何げに辞書が変わっているが、ipadic からの読みの取り出し方が変わったのかな?Noun.verbal.dic:(品詞 (名詞 サ変接続)) ((見出し語 (鍍金 3552)) (読み {メッキ/トキン}) (発音 {メッキ/トキン}) )これもかげろうです。***** 074.txtも 助詞,係助詞,*,*,*,*,も,モ,モかげ 動詞,自立,*,*,五段・ガ行,命令e,かぐ,カゲ,カゲろう 名詞,一般,*,*,*,*,ろう,ロウ,ローです 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス***** 075.TXTも 助詞,係助詞,*,*,*,*,も,モ,モかげろう 名詞,一般,*,*,*,*,かげろう,カゲロウ,カゲロウです 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス*****これは、「かげろう」がちゃんととれるようになっているので OK。私は山でつくしを摘んだ。***** 074.txtで 助詞,格助詞,一般,*,*,*,で,デ,デつくし 動詞,自立,*,*,五段・サ行,連用形,つくす,ツクシ,ツクシを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ***** 075.TXTで 助詞,格助詞,一般,*,*,*,で,デ,デつくし 名詞,固有名詞,一般,*,*,*,つくし,ツクシ,ツクシを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ*****「つくし」が動詞から名詞になったので OK。でも、固有名詞なのは...。私は彼のしっぽをつかんだ。***** 074.txt彼 名詞,代名詞,一般,*,*,*,彼,カレ,カレの 助詞,格助詞,一般,*,*,*,の,ノ,ノし 動詞,自立,*,*,サ変・スル,未然形,する,シ,シっぽ 形容詞,接尾,*,*,形容詞・アウオ段,ガル接続,っぽい,ッポ,ッポを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ***** 075.TXT彼 名詞,代名詞,一般,*,*,*,彼,カレ,カレの 助詞,連体化,*,*,*,*,の,ノ,ノしっぽ 名詞,一般,*,*,*,*,しっぽ,シッポ,シッポを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ*****「しっぽ」が名詞になったので OK。この手のはよくなっているだろう。たぶん、全体的にひらがな文字列の認識は向上した感じ。日光でゴルフ場建設反対運動が起こった。***** 074.txtが 助詞,格助詞,一般,*,*,*,が,ガ,ガ起っ 動詞,自立,*,*,五段・タ行,連用タ接続,起つ,タッ,タッた 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ***** 075.TXTが 助詞,格助詞,一般,*,*,*,が,ガ,ガ起っ 動詞,自立,*,*,五段・ラ行,連用タ接続,起る,オコッ,オコッた 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ*****「たった」が「おこった」になったので OK。「おこなった」/「いった」などもよくなっている。JR東海は線路の復旧にあたり、およそ5分後に運転を再開しました。***** 074.txt復旧 名詞,サ変接続,*,*,*,*,復旧,フッキュウ,フッキューに 助詞,格助詞,一般,*,*,*,に,ニ,ニあたり 動詞,自立,*,*,五段・ラ行,連用形,あたる,アタリ,アタリ、 記号,読点,*,*,*,*,、,、,、***** 075.TXT復旧 名詞,サ変接続,*,*,*,*,復旧,フッキュウ,フッキューにあたり 助詞,格助詞,連語,*,*,*,にあたり,ニアタリ,ニアタリ、 記号,読点,*,*,*,*,、,、,、*****ぶつかってしまう「あたり」から「にあたり」となったので OK。など、まあ、あげていけばよくなった箇所は結構ある。が、その一方で、私は申し込みを行なった。***** 074.txtは 助詞,係助詞,*,*,*,*,は,ハ,ワ申込み 動詞,自立,*,*,五段・マ行,連用形,申込む,モウシコミ,モーシコミを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ***** 075.TXTは 助詞,係助詞,*,*,*,*,は,ハ,ワ申 名詞,一般,*,*,*,*,申,サル,サル込み 名詞,接尾,一般,*,*,*,込み,コミ,コミを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ*****申(さる)はないだろうが...。彼女は毎日廊下に雑巾を掛けている。***** 074.txtは 助詞,係助詞,*,*,*,*,は,ハ,ワ毎日 名詞,副詞可能,*,*,*,*,毎日,マイニチ,マイニチ廊下 名詞,一般,*,*,*,*,廊下,ロウカ,ローカ***** 075.TXTは 助詞,係助詞,*,*,*,*,は,ハ,ワ毎日 名詞,固有名詞,組織,*,*,*,毎日,マイニチ,マイニチ廊下 名詞,一般,*,*,*,*,廊下,ロウカ,ローカ*****固有名詞が強くなりすぎてしまったのかな。毎日新聞の廊下じゃないんだから...。植木屋さんが来るのは来週以降になった。***** 074.txtEOS植木 名詞,一般,*,*,*,*,植木,ウエキ,ウエキ屋 名詞,接尾,一般,*,*,*,屋,ヤ,ヤ***** 075.TXTEOS植木 名詞,固有名詞,一般,*,*,*,植木,ウエキ,ウエキ屋 名詞,接尾,一般,*,*,*,屋,ヤ,ヤ*****「植木」さんを売ってしまうのか。人身売買じゃないよ...。あの喫茶店はモダンジャズを掛けている。***** 074.txtEOSあ 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,ある,ア,アの 名詞,非自立,一般,*,*,*,の,ノ,ノ喫茶店 名詞,一般,*,*,*,*,喫茶店,キッサテン,キッサテン***** 075.TXTEOSあの フィラー,*,*,*,*,*,あの,アノ,アノ喫茶店 名詞,一般,*,*,*,*,喫茶店,キッサテン,キッサテン*****あの廃屋にはお化けが出る。***** 074.txtEOSあ 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,ある,ア,アの 名詞,非自立,一般,*,*,*,の,ノ,ノ廃屋 名詞,一般,*,*,*,*,廃屋,ハイオク,ハイオク***** 075.TXTEOSあの フィラー,*,*,*,*,*,あの,アノ,アノ廃屋 名詞,一般,*,*,*,*,廃屋,ハイオク,ハイオク*****あのー、「あの」が一語になったのはいいとして、フィラーはないんじゃないかな。フィラーはコストを変えた方がいいのかもしれない。道ゆく人にさえ微笑みかけたいようなあかるい気持だった。***** 074.txtさえ 助詞,係助詞,*,*,*,*,さえ,サエ,サエ微笑み 動詞,自立,*,*,五段・マ行,連用形,微笑む,ホホエミ,ホホエミかけ 動詞,非自立,*,*,一段,連用形,かける,カケ,カケたい 助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ***** 075.TXTさえ 助詞,係助詞,*,*,*,*,さえ,サエ,サエ微笑 名詞,サ変接続,*,*,*,*,微笑,ビショウ,ビショーみかけ 動詞,自立,*,*,一段,連用形,みかける,ミカケ,ミカケたい 助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ*****微笑を見かけたいのかい?なんて感じで、デグレードしているものもけっこうありそう。助詞の細分類もけっこう結果が変わっていたりするので、細かく見ていかないとなんともいえないが(頭のところだけ見て、面倒になった、笑)、NTT 言語処理研究グループ --- 言語リソース --- 機械翻訳機能試験文を使うと、差分が多すぎて、ちょっと見るのが大変。やっぱり、自分の解析させたいようなものがどの程度変わっているかを調査するために、自分用のテスト文も作った方が良さそうだな。たぶん、直感からすると、品詞の大分類(名詞、動詞のレベル)自体はよくなっているものが多いが、細分類で(助詞, 格助詞←このレベル)では、若干変なものも出ているんじゃないかな。あくまで直感だけど。次のように、助詞とかはけっこう判断するのにたくさんあると、見るのが疲れる(^^;;流行はすぐに変わる。***** 074.txtすぐ 副詞,助詞類接続,*,*,*,*,すぐ,スグ,スグに 助詞,副詞化,*,*,*,*,に,ニ,ニ変わる 動詞,自立,*,*,五段・ラ行,基本形,変わる,カワル,カワル***** 075.TXTすぐ 副詞,助詞類接続,*,*,*,*,すぐ,スグ,スグに 助詞,格助詞,一般,*,*,*,に,ニ,ニ変わる 動詞,自立,*,*,五段・ラ行,基本形,変わる,カワル,カワル*****彼は経営の建て直しにあたった。***** 074.txt経営 名詞,サ変接続,*,*,*,*,経営,ケイエイ,ケイエイの 助詞,格助詞,一般,*,*,*,の,ノ,ノ建て直し 動詞,自立,*,*,五段・サ行,連用形,建て直す,タテナオシ,タテナオシ***** 075.TXT経営 名詞,サ変接続,*,*,*,*,経営,ケイエイ,ケイエイの 助詞,連体化,*,*,*,*,の,ノ,ノ建て直し 動詞,自立,*,*,五段・サ行,連用形,建て直す,タテナオシ,タテナオシ*****なんにせよ、地道な世界だなぁ(笑)
2003.04.24
コメント(0)
あとでまた書き直すので書きかけ(忘れないうちに書いておく)日本語形態素解析器 MeCab 0.75 が出ていたのでインストールしてみたら、よくなっているところもあるが、デグレードしているところもあったので、あとで指摘する。
2003.04.20
コメント(0)
『オネーギンの恋文』 を見た。ロシアの文豪アレキサンダー・プーキシンの自伝的傑作を原作とする作品。原作読んでないのだよな。画像としてはきれいだし、映画のできとしても、そんなに悪くないんだと思うけど、なーにか物足りない気がした。こういうのは文字で読んだ方がいいのかな。テンポが速いエンターテイメント系中心に見てたから、こういうのはちょっと退屈な感じがするようになっちゃったのかな。それとも、人を恋する気持ちをそもそも解せん人だから、ラブストーリーは解せんのか (^^;; でも、リヴ・タイラーはとてもきれい。○外来語のカタカナ表記(さ行)さてさて ipadic のチェックは続くのだ。辞書というのは結局、世界観そのものなのだと思う。辞書にないことは、未知の事象になるのだ。辞書に入れるか入れないか、それは世界観を決めることにもなる。どんなにがんばったって、すべての単語を入れることはできないのだから、編集者によってどうしても偏りができる。その偏りこそがその辞書の個性とでもいうものになる。なんて能書きはいいとして、例のごとく MeCab を使って『朝日新聞の用語の手引き』のカタカナのさ行を今日は見てみた。サー 名詞,固有名詞,人名,一般,*,*,サー,サー,サーディン 名詞,固有名詞,人名,名,*,*,ディン,ディン,ディンSir Din ですか。やかましそうな人だこと。しかし、ディンの固有名詞って何のために登録したのだろう。ジェームズディーンのディーン(Dean)はディンとは普通書かないし、どこから来たディンさんなのだろうか。これは、いっそのこと削除してしまった方がいいかな。で、サーディンは登録する。オイルサーディンなんてのも当然ないわけだけど、実に生活感に欠ける辞書なのだよな。まあ、新聞文などが元になっているからしょうがないのかもしれないが、その割に朝日新聞の記者の手引きのカバー率が低い。よく分からんなぁ。サワークリーム、シェービングクリーム、シームレスストッキングなどもない。サイエンティフィックやサイエンティフィックフィクションなどもない。サク 名詞,固有名詞,一般,*,*,*,サク,サク,サクス 動詞,自立,*,*,五段・ラ行,体言接続特殊2,スる,ス,スホルン 名詞,一般,*,*,*,*,ホルン,ホルン,ホルンsaxhorn だけど、サクソルンって綴る方が普通だと思うんだが、なんであえてサクスホルンなんてマイナーな綴りを用語に選択したのかは不明。で、なんだろうこの解析の仕方(動詞のス)はと思ったら、スリがお金をす「スる」とか、賭でお金を「スる」の「スる」なのだな。しかし、実際のところ、こういうパーターンはほとんどあり得ないから、解析失敗パターンとして「カタカナの名詞」「ス(動詞)」「カタカナの名詞」は、一つにつなげる後処理を入れてもいいかもしれない。誤りパターンを後で分析する必要がありそうだ。けっこうこれのおかげで未知語の場合に変になる。こんなのも同じパターン。スノーモービルとスノーを登録した方がよさそう。一瞬 MeCab のバグかなと思って Chasen を調べてみたら、Chasen でも同じだった。コスト変更したら何とかなるのかな。なんか、これよくない。ス 動詞,自立,*,*,五段・ラ行,体言接続特殊2,スる,ス,スノー 感動詞,*,*,*,*,*,ノー,ノー,ノーモービル 名詞,固有名詞,組織,*,*,*,モービル,モービル,モービルス 動詞,自立,*,*,五段・ラ行,体言接続特殊2,スる,ス,スキューバ 名詞,固有名詞,地域,国,*,*,キューバ,キューバ,キューバまぁ、日常生活に疎そうな辞書ではあるが、さすがにサンタクロースは、固有名詞-人名で登録されているな(笑)。サンタクロースが固有名詞-人名だとすると仮面ライダーやウルトラマン、デビルマン、キューティーハニー、(古いなー)といったキャラクターの類は固有名詞-人名として登録するのがいいのだろうか。ちょっと見てみよう。そんなもの登録してあるはずがないと思った君は甘い。調べてみたら、仮面ライダー、ウルトラマン、ドラえもんなんかは登録してあるのだよ。でも、名詞,固有名詞,一般 なのだな。うーん、サンタクロースは実在の人物じゃなくてキャラクターなのだから、仮面ライダーと同じカテゴリだと思うがなぁ。サンタ・ニコラスがなら、まだ人名でもいいけど。うーむ。人名の他に、キャラクターとかいうカテゴリを作って追加したらいいかもしれないなぁ。ちなみに、キューティーハニーやデビルマン、マジンガーZなどは入っていなかった。アムロなんてのも名前としては入っていない。ヤン・ウェンリーなんかもダメだな。オタク度低すぎてダメだわ(笑) 登録商標なんかもカテゴリと用意して、空いている属性にその手の情報を入れるようにするといいかもしれない。ポケモンなんかは入っていないが、ポケットモンスターなら、ポケット/モンスターでたまたま解析はできる。カタカナは長単位で登録したものも、小単位に分けて登録しておくようにすれば、何かのときにいいかもしれない。基本的に小単位のみで登録しておいた方が、当然、辞書の登録数は少なくて済むが、一つの単語としてきれいに扱いたいなら、やっぱり連続した状態で一語にしておいた方がいいな。ポケット・モンスターなんかも一語で登録しちゃう。ストップウオッチなんかも、ストップ/ウオッチで解析できるけど、サ変名詞をどうにかする処理を後で入れたときに、区切られると困る場合もあるので、やっぱりストップウオッチ一語でも登録しておく。ちなみにウォッチでなくてウオッチなのだな。ストップ 名詞,サ変接続,*,*,*,*,ストップ,ストップ,ストップウオッチ 名詞,一般,*,*,*,*,ウオッチ,ウオッチ,ウオッチ意外なことにサーフティーなんかも登録されていない。セーフ/ティーじゃお茶みたいだな。セーフ 名詞,一般,*,*,*,*,セーフ,セーフ,セーフティー 名詞,一般,*,*,*,*,ティー,ティー,ティーベルト 名詞,一般,*,*,*,*,ベルト,ベルト,ベルトうーん。長単位か短単位かは迷うものがやっぱりあるな。スチルカメラみたいなものを見ていると、デジタルカメラもあるし、分かれている方が何かできそうな気もする。ジェット/エンジンなどもレシプロ/エンジン、プロペラ/エンジン... といろいろあるから、バラでも良さそうな気もするが、世界知識という点からは、レシプロエンジン、プロペラエンジンと一単語にしておいた方がよいような気もするし...。スチル 名詞,一般,*,*,*,*,スチル,スチル,スチルカメラ 名詞,一般,*,*,*,*,カメラ,カメラ,カメラ朝日新聞はシューマイなのか。シュウマイではないのだな。で、すげえ、人名になってしまった。シューマイを食べると人を食った話になってしまう。登録せねば。シュー 名詞,固有名詞,人名,姓,*,*,シュー,シュー,シューマイ 名詞,固有名詞,人名,名,*,*,マイ,マイ,マイギブ・アンド・テークが一語で登録されているのであれば、スクラップ・アンド・ビルドみたいなものも一語で登録してしまっていいな。まあ、どこまでやるかというのは難しい問題だが、比較的よく使うものについてはできるだけ登録する方向かな。スクラップ 名詞,一般,*,*,*,*,スクラップ,スクラップ,スクラップ・ 記号,一般,*,*,*,*,・,・,・アンド 名詞,固有名詞,一般,*,*,*,アンド,アンド,アンド・ 記号,一般,*,*,*,*,・,・,・ビル 名詞,一般,*,*,*,*,ビル,ビル,ビルド 接頭詞,名詞接続,*,*,*,*,ド,ド,ドセニョーラ、セニョール、セニョリータみたいなものも意外に登録されていない。ミスター、ミセスなどは登録されているが、ミズは登録されていないな。で、こういうものがどんな品詞になるのだろうか。ミスターやミセスは名詞-一般なのだが、いいのかな。敬称とかのカテゴリで登録しておいた方が嬉しそうなきもする。外国語の敬称を入れたら名詞-接頭-人名とかいうのでミセス 名詞,一般,*,*,*,*,ミセス,ミセス,ミセスロビンソン 名詞,固有名詞,人名,姓,*,*,ロビンソン,ロビンソン,ロビンソン山田様山田 名詞,固有名詞,人名,姓,*,*,山田,ヤマダ,ヤマダ様 名詞,接尾,人名,*,*,*,様,サマ,サマ山田さん山田 名詞,固有名詞,人名,姓,*,*,山田,ヤマダ,ヤマダさん 名詞,接尾,人名,*,*,*,さん,サン,サンサー・トーマス・リプトンサー 名詞,固有名詞,人名,一般,*,*,サー,サー,サー・ 記号,一般,*,*,*,*,・,・,・トーマス 名詞,固有名詞,人名,名,*,*,トーマス,トーマス,トーマス・ 記号,一般,*,*,*,*,・,・,・リプトン 未知語,*,*,*,*,*,*,*,*ミス 名詞,サ変接続,*,*,*,*,ミス,ミス,ミス日本 名詞,固有名詞,地域,国,*,*,日本,ニッポン,ニッポンサー・トーマス・リプトンなんかは、サーが敬称じゃないのね。固有名詞でサーを登録するなって感じもするな。サーという名前もないことはないかもしれないが、普通、先頭についたら敬称だし。ミス日本なんかは、なんだか凄い人が選ばれそうな感じがする(^^;; そうやって考えると、このあたりは、まともな世界観がないという気がしてくる。ソウル 名詞,固有名詞,地域,一般,*,*,ソウル,ソウル,ソウルミュージック 名詞,一般,*,*,*,*,ミュージック,ミュージック,ミュージックいやー、韓国のソウルの音楽をソウルミュージックというという感じの解析だな。これはもうソウルミュージック一語でちゃんと登録しておくのがいいだろうな。ソ 名詞,固有名詞,一般,*,*,*,ソ,ソ,ソサエ 名詞,固有名詞,一般,*,*,*,サエ,サエ,サエティー 名詞,一般,*,*,*,*,ティー,ティー,ティーぎゃー、なんて解析してくれるんだ。これも登録だな。しっかし、こうやってみてると、かなりカタカナ語に関してはボロボロというのが分かってくる。ただいま未知語の数98。
2003.04.19
コメント(0)
SCE、「衝撃と畏怖」商標登録を取り下げで、イラク戦争の作戦名「Shock and Awe」(衝撃と畏怖)を登録商標とするのは取り下げたらしい(4/15)。まあ、妥当なところだな。最初からこうなるって分かるだろうに...。○ 外来語のカタカナ表記(か行)一昨日の続きで、MeCab でカタカナ表記をチェック。カーフェリー 名詞,一般,*,*,*,*,カーフェリー,カーフェリー,カーフェリーカー 名詞,一般,*,*,*,*,カー,カー,カーラジオ 名詞,一般,*,*,*,*,ラジオ,ラジオ,ラジオカーフェリーだと一語で、カーラジオは一語になってないのだな。これはカーラジオでも登録してしまおう。「カーリーヘアー」って死語?(笑)。このあたりも登録しておいていいだろうな。髪型とかカットの仕方とか、まとめて登録してもいいかもしれない。カッティングなども未知語。ガスクロマトグラフィー なんかは、完全に未知語になってしまう。まあ、そんなの日常の会話で出てくると怖いかもしれないが。マニア過ぎるなぁ。ガンマは未知語。ガンマーは名詞で入っている。うーむ。カタカナで未知語だったら、末尾の音ひきを削除して解析し直すとかやってもいいかな。このパターンかなり多いだろうし。キーパー 名詞,固有名詞,組織,*,*,*,キーパー,キーパー,キーパーソ 名詞,固有名詞,一般,*,*,*,ソ,ソ,ソン 名詞,非自立,一般,*,*,*,ン,ン,ンうーむ、こりゃやだな。キーパースンは登録されてるのね。こりゃキーパーソンでも登録しておくしかないか。パーソン/パースンも別途登録しておいた方がよさそう。キオスクはあるがキヨスクがないのでキヨスクも入れておこうかな。キャッシュ 名詞,一般,*,*,*,*,キャッシュ,キャッシュ,キャッシュディス 名詞,一般,*,*,*,*,ディス,ディス,ディスペン 名詞,一般,*,*,*,*,ペン,ペン,ペンサー 名詞,固有名詞,人名,一般,*,*,サー,サー,サーキャッシュディスペンサーって、IPA 辞書を作成した当時はなかったんか? ウソ、そんなことないでしょう。たぶん、カード持たない主義の人が作ったんだ(笑)。意外にキャパシティーなんてのも登録されていない。ギャラ 名詞,一般,*,*,*,*,ギャラ,ギャラ,ギャラン 名詞,非自立,一般,*,*,*,ン,ン,ンティー 名詞,一般,*,*,*,*,ティー,ティー,ティーこれはひどいなぁ。お茶の名前か?んなぁ。クエスチョン、クオータみたいのも登録されていない。クオーターはあるのか。音ひきのあるなしはどういう基準でIPADIC は入れてるんだろうな。クリア 名詞,サ変接続,*,*,*,*,クリア,クリア,クリアラン 名詞,一般,*,*,*,*,ラン,ラン,ランス 動詞,自立,*,*,五段・ラ行,体言接続特殊2,スる,ス,スコン 名詞,一般,*,*,*,*,コン,コン,コンパチ 副詞,助詞類接続,*,*,*,*,パチ,パチ,パチブル 名詞,一般,*,*,*,*,ブル,ブル,ブルなんだかなぁ。か行まで終わって、今のところ67語が未知語になっている。カタカナの場合、表記の揺れの問題もあるから、けっこう多く未知語になってしまうのだな。思ったとおりだ。
2003.04.18
コメント(0)
ひさびさにDVDを借りて見た。『13 Days』。キューバ危機 が題材の映画で、緊迫感ある力作。仮に当時、両国の軍部がもっと強行に勝手に動いたら...。元大統領特別補佐官のケネス・オドネルへの百時間におよぶインタビューなどを元にしているだけに迫力あるのだ。なんとなく外来語のカタカナ表記についてしらべてみた。『朝日新聞の用語の手引き』によると、アルミホイールは自動車の部品のとき、アルミホイルは台所用品の場合に使うのだそうだ。○ 外来語のカタカナ表記(あ行)例によって MeCab で解析してみると、アルミホイルは名詞一単語で登録されているけれど、アルミホイールは、アルミホイールアルミ 名詞,一般,*,*,*,*,アルミ,アルミ,アルミホイール 名詞,一般,*,*,*,*,ホイール,ホイール,ホイールこれは「アルミホイール」一単語でも登録だな。インキと書くと、印刷の場合で、インクと書くと筆記を指すことになる。virus はウイルスでも、ビールスでもよしと。aerosol はエーロゾルなんだって。おもしろいものだ。さすがにこれは登録されていなくてしょうがないような気がしないでもないが。カタカナ表記って、なんせよ入ってきた経緯によってみょうな読み方する場合が結構あるのだよな。英語なら同じものであっても、日本語だと用途によって読み方が変わったりして。ア行の外来語を全部チェックしてみると、アート 名詞,固有名詞,人名,名,*,*,アート,アート,アートディレクター 名詞,一般,*,*,*,*,ディレクター,ディレクター,ディレクターまあ、山田ディレクターとかあるから、アートさんという名前のディレクターでも間違いじゃないんだが、確率的に「アートディレクター」で一単語になる方が多いから一単語で登録。アール 名詞,接尾,助数詞,*,*,*,アール,アール,アールヌーボー 名詞,一般,*,*,*,*,ヌーボー,ヌーボー,ヌーボーいやだわ、IPA辞書って教養なくて。Art Nouveau でございますわ(笑)。アールが助数詞ってこたぁねえでがしょ。アダージョなんかも登録されていないし。この手の言葉は弱いのかもしれない。アイシャドーや、アイバンクみたいなものは、バラになっているより、一単語になっていた方が扱いやすいから、変更なしでいいかな。なんだか、わかんなくなってくるなぁ。アカシア 名詞,固有名詞,地域,一般,*,*,アカシア,アカシア,アカシアんー、これは何だろう。アカシアなんて場所あるの。でも、植物が普通だから、一般名詞だけでいいよ。これは地名は、あかしあ台しか登録されてないからアカシア台もいれてやると。コストをいじってやるとか必要になるかな。なんだかんだで、ここには書かないがけっこう未知語がある。エディターなんか登録されていないのが不思議。オール・オア・ナッシングが一単語は笑えた。まあ、こいうのは微妙なところかもしれないが・・・。エコノミックアニマルなんかも一単語。こういうのは、理想的には細かい単位で切った上でつなげてあるのがいいが、MeCab じゃ、そういうことはできないから仕方ないか。さて、このネタで10日ほど持たせるか(^^;;
2003.04.16
コメント(0)
PS2 の調子がよくなったので『銀河英雄伝説』の DVD を見る。見ながら、自分はアニメファンではないなぁと思った。エンサイクロペディア銀河英雄伝説という付録の DVD がついているのだが、声優さんとかの話聞いても、あまりおもしろいとは感じないのだ。正直、これはなくてもよかった、とか思った。でも、ファンの人だったら、これはすごく嬉しいのだろうなぁ、人の好みは様々だ、とつくづく思う。しかし、こんな情勢のときに、そんなもの見てるなんてなんなのだけど(^^;; 銀河英雄伝説はやっぱり小説も読まねば。amazon に行って注文しようとしたら、『クラウディア 最後の手紙』というのがおすすめで出てきたが、思わず「クラウゼヴィッツ」に読めてしまった。いかん、いかん。ついでなのでちょっといろいろ検索してみると、『麻薬と紛争』―麻薬の戦略地政学―なんて本を見つけてしまった。地政学で世界を読む―21世紀のユーラシア覇権ゲーム、ポスト・アメリカ―世界システムにおける地政学と地政文化 とか、このあたりもおもしろそう。イラク戦争―元国連大量破壊兵器査察官スコット・リッターの証言 ブッシュ政権が隠したい事実、アメリカはなぜイラク攻撃をそんなに急ぐのか?―フォーリン・アフェアーズ・コレクション とかおもしろそう。このページはおもしろいこと書かれているな。探すといろいろおもしろいものが見つかるかもしれない。アメリカの国家犯罪全書 もおもしろそうだ。しかし、現実というものはお話の世界とは違い、一人の人間のペンで簡単に書き留められるほど単純な構造ではないのは確かだな。○ 鳥が飛ぶ、鳥は飛ぶ古い切り抜きを整理していたら、次の例文が出てきた(C言語マガジンの日本語処理の特集かな)。で、さっそく係り受け解析器の CaboCha にかけてみる。「鳥は飛ぶとき羽を広げる。」というのと「鳥が飛ぶとき羽を広げる。」とは本質的に何が違うんだろう。1. 鳥は飛ぶとき羽を広げる。 鳥は-------D 飛ぶ-D | とき---D 羽を-D 広げる。2. 鳥が飛ぶとき羽を広げる。 鳥が-D 飛ぶ-D とき---D 羽を-D 広げる。「は」と「が」が違うだけで、解析結果が変わるものだな。1 だと「鳥は飛羽を広げる」が簡単に取り出せて、2 だと「鳥が飛ぶ」が簡単に取り出せる。また、1 の場合、「(鳥が)飛ぶ」を取り出そうとすると、飛ぶのは何か(鳥)を補完してやらないとならないし、2 の場合、「(鳥が)羽を広げる」の場合も、(鳥が)を補完してやらないといけない。「は」と「が」の使い分けというのは、実際、感覚以上のものとして区別しようとすると難しいものがある。ふと、次の文を書いてみる。「くちばしの黄色い鳥が、飛び上がるとき羽を広げた」、「くちばしが黄色い鳥が、飛び上がるとき羽を広げた」、「くちばしは黄色い鳥が、飛び上がるとき羽を広げた」、「くちばしだけは黄色い鳥が、飛び上がるとき羽を広げた」、「くちばしだけが黄色い鳥が、飛び上がるとき羽を広げた」2. の文って実は、特殊な文だったりするかもしれない。「鳥が飛ぶとき羽を広げる」「鳥が飛ぶとき羽を広げるのはごく普通のことです」「一羽の鳥が飛び上がるとき、羽を広げた」。うーむ、日本語ってよく分からないところがあるなー。「は」と「が」の使い分けや、「が」と「の」の使い分けって、難しいな。A:「僕( )、おなか空いたよ」B:「えっ、誰が?」A:「僕が」最初のカッコに「は」と「が」のどちらを入れるか聞かれたら、「は」と答えるのが普通だろうか。でも、後ろでは「誰が」となるのが普通だろう。「誰はおなかすいたの?」とは言わないな。言える、言えないという感覚はなんなのだろう。座りの悪さというのは、人、地方、年代によっても変わるしな。「鳥()飛ぶとき羽()広げる」助詞って、そもそも冗長性を作り出す言葉なのかもしれない。なくても意が伝わらないことはないし。助詞を軸にしていけばこそ見える世界と、助詞を取り除いてしまった方が見える世界もあるかもしれない。
2003.04.12
コメント(0)
このところ、また日記を書くのをさぼってしまった。今日は朝から豚肉を焼いて食べたが、やっぱり、肉はちゃんと下味を付けてから焼いた方がうまい。面倒だったので、塩コショウもせずに焼いてしまったのだが(^^;;、焼いてから調味料をかけてもダメだ。ちゃんと下準備をしないとうまくないな。今日は床屋にいって髪の毛バッサリきってしまおう。伸び放題で原始人のようになってしまった。原始人見たことないんだけど・・・。と思ったが、やっぱりやめる。うーむ、腰痛が・・・ということで、椅子にじっと座っているの辛いし(^^;;PS2 が DVD をまともに読めなくなってからしばし立つが、とうとうぶち切れて封印のシールをはがして PS2 を開けてしまった。どうせ、レンズにほこりがついているだけだろうし、そんなことのために 9000円とか修理費がかかったらあほらしいと思ったのだ。で、思い切って開けてしまった(よいこの皆さんはやめましょう)。で、開けてみると、目でぱっと見て分かるようなホコリはついていなかった。気にせずレンズクリーナーで読み取りレンズをきれいにしてやって、箱を閉じて DVD を入れる。一発で認識。直った直ったー。ということで、『銀河英雄伝説』の残りの DVD を見るのであった。○南瓜で遊ぶ日本語形態素解析器 MeCab の作者のくどう氏のきまぐれ日記を眺めてみる。日本語係り受け解析器CaboCha/南瓜 cabocha-0.4pre2.exe がWindows版のバイナリのみ公開されているのでダウンロードしてくる。チグリス川とか、7日 とか表示にタグがついてくれるのね。うーむ、これいいかもしれない。出力に XML 表示もあるのか。今時、XML ぐらい扱えないといかんだろうし、XML ちょっと勉強して、XML ベースで人工無能に読み込んでみるのもおもしろいかな。Python 側でも、このデータ構造に合わせてオブジェクトを作ってしまえばいいか。やっぱり、人工無能には形態素解析の結果だと、その後の処理が面倒だし、せっかく係り受け解析器まで公開されているのだから、これを使わん手はないないなぁと思う今日この頃。これはありがたく、遊ばせてもらうことにしよう。それにしても、イラク軍 のようにひとまとまりで組織(ORGANIZATION)のタグを付けてくれるのはありがたい。ARTIFACT, MONEY, DATE, TIME, PERSON, LOCATION, PERCENT, OPTIONAL などのタグがあるようだが、この部分が拡張できるとおもしろいのだけど。ほんとは、ORGANIZATION の下位構造として、会社(COMPANY) とかがあって、XX株式会社であれば COMPANY を指定し、そうするとそれは ORGANIZATION でもあるみたいな感じになって、それが3階層作れると完璧なのだけど。作らんものはなんとでも勝手なこと言えるな(笑)それにしても、くどう氏の日記にも書かれているが、辞書の不整合を直さないと、やっぱりよく分からない振る舞いが出てくる。辞書を直そうと思いつつ、いったいどこから手をつけていいんだかで思考停止中。ゼロ辞書からはじめて、解析した文書にある単語のみ追加していくとかやったらどうなるんだろう。ゼロからはじめて、使われた単語は、既存の辞書から取り出して追加する。まったくのゼロだとさすがにどうしようもないので、助詞、助動詞、代名詞程度から始めてみる。どの程度、それで動くんだろう。まずは、自分の日記を解析させて、徐々に追加していくとかしてみるかな。1単語登録するときに、類似のものも整合性を持つように登録すると。1人の人間の日記の語彙などある程度限られているだろうから、1年もしないうちに、ある程度カバーできるようになるんだろうか。にしても、会話体にかなり近い、文法的に言えばかなりよくない表現も多いから、こけまくるだろうな。それもまた楽しと。なんにしても、ちょっと地道に勉強しないといけないな。といいつつ、日々は過ぎる。
2003.04.10
コメント(0)
家の前の桜並木がきれいだ。桜餅でも食べたくなる。もう数十年昔のこと。私が通っていた小学校は、校庭の周りがぐるーっと桜で囲まれていた。小学校の名前にも桜がついていたから、当然の成り行きだったかもしれない。「緑萌え立つ武蔵野の小川の流れ鳥の声...」って校歌だった。中学校も校庭の周りに桜が植えてあったかな。でも、その中学校はもうなくなってしまった。俳優座の裏にあった中学。あれ、校歌が思い出せないや。思い出せそうで思い出せない(^^;; 「はなだ色」がどうしたこうしたとか入っていたかな。いかん、もう歳だなー。逆行性健忘ってやつで、新しいことから忘れていく。えっ、3日前に何食べたかなんて、当然覚えてないのだ。あなたは、3日間に食べたもの全部言えるだろうか。最近、自分で凄く記憶力が落ちていると思うのだが「としをとるのはすてきなことです、そうじゃないですかぁ」とも思う。「わすれっぽいのはしかたがないです、そうじゃないですか」。でも、悲しい記憶の数ばかり飽和の数より増えて、忘れるよりほかなくなるよりかは、脳細胞がどんどんおっ死んで、単にボケてきただけと思う方が気持ちがいいな(笑)。で、人工無能の場合、その気になれば、すべての発言を記憶装置の量が許す限り覚えておいたり、過去の発言の中から何かを引っ張り出したりすることも可能なわけだが、覚えたり、忘れたり、ということをどうさせていくか、というのはやっぱりポイントになるのかなと思う。どうあがいても、手作業で作ることができるデータの量には限りがあるし、それを軸にしてしまうと、どうしても反応が単調化してしまう。でも、外から入ってきたものを無制限に自分の発言に加えていくことも、会話の質の向上に必ずしもつながらないということも明白。さてどうしたものか。やっぱり、ときどき、睡眠時間をとって、記憶の再構成をしてやる必要があるんだろう。でも、何をどうやって?単純なところから始めると、やっぱり、単語レベルの出現頻度なのだろう。たくさん出てくる単語というのは、やっぱり、強化されるべき。でも、延々と蓄積の総計からそれを求めていたのでは、どうしても固いものになってしまう。そうすると、短期、中期、長期という形で、総計を求めて、一定の閾値を超えたもののみが長期記憶に入るような仕組みというのも軒並みだがいいのかもしれない。知識ベースの人工無能には、中期の記憶をごっそり落としてしまうとというのも意外に有効かもしれない。中期の記憶は、長期記憶を形成するためだけに使用し、そこから何かデータが直接抽出されて、それが会話に反映されるなどということがないようにする。
2003.04.05
コメント(0)
いかんなぁ。ぜんぜん、人工無能が進まない。このところ、また、日記をさぼりがちだし。で、たとえば、人工無能との会話で「いかんなぁ」と入力されたときに、なんて返したらいいのだろう。とりあえず形態素解析すると、次のようになる。いかんなぁ。いかん 動詞,自立,*,*,五段・ラ行,体言接続特殊,いかる,イカン,イカンなぁ 助詞,終助詞,*,*,*,*,なぁ,ナァ,ナー。 記号,句点,*,*,*,*,。,。,。「いかん」=「いけない」の同義語の辞書を持てば、「いけないなぁ」。「なぁ」というのは、たとえば曖昧な感情という属性、あるいは、つぶやきという属性を持たせれば、いちおう、相手の意図は文としてはとらえられる(文脈をとりあえず抜きにして)。で、「いかんなぁ」というときに、どんな答えが返ってくることを期待するのだろう。前に日記で書いていた単純な鸚鵡返しのパターンを応用すれば、「いけないのですか?」あるいは、「いかんのかぁ」みたいなことはできるだろう。やっぱり、それだとおもしろみがなくなってしまう。「いかんなぁ」「いかんのですか。で、何が?」とかすると、ちょっとは会話っぽくなる。このとき、「いけない」が何か目的語を本来とる構文であるという情報を持たせ、「xxx はいけない」というパターンを作り、「xxx」が欠けているパターンが来たら、そこを問い合わせるということも可能かもしれない。これとは別に、「いかん」という単語に対する反応パターンを用意して、なんらかの確率でどちらかに振り分けるというところが限界かな。でも、考えてみると無能:「今日はなんだか調子悪いのです」相手:「いかんなぁ」無能:「何がいかんのですか?」これだとちょっと間抜けな会話って感じがする(これは単純マッチのパターンを用意しておけばできるが、単純マッチのパターンを嫌うなら)。これよりもむしろ、無能:「今日はなんだか調子悪いのです」相手:「いかんなぁ」無能」「そうです。いかんのです」たとえば、相手の言葉をここで、肯定してしまうということも考えらるし、ある意味、その方が自然な会話なのだけれど、これだと、ここで会話が完結してしまう。会話というのは、ある意味、そういう小さなまとまりが連続したものだと考えられるのだが、この流れをできるだけ長くなるように誘導するのが、人工無能との会話を楽しくするためには必要なのかもしれない。ここで、相手が「何がいかんの?」と仮に聞いてくれれば、またそれに対する応答をストーリーとして用意(この場合は、質問に対する答えを用意するパターンを格納)しておけば会話が続くかもしれない。受けと答えとのストーリーパターンを用意するという方向性も考えていいのかな。「何が...」というパターンの質問をされると文脈処理をしなくてはならなくなって、大変で面倒だけど。無能:「今日はなんだか調子が悪いのです」相手:「あっ、そう。コンピュータでも調子悪い日あるの」(質問=コンピュータに調子が悪い日があるか)無能:「コンピュータにだって調子が悪い日があるのです」相手:「ウソつけ」(ウソつけ、に対する単純マッチングパターン)無能:「嘘つきは泥棒の始まりといいますが、残念ながら私には手足がないので泥棒はできないのです。したがって、ウソは私にはつけません」相手:「なんか、むちゃくちゃな論理じゃないかい?」(xxx じゃないか、に対する単純マッチングパターン)無能:「はい、むちゃくちゃな論理ですね」相手:「やっぱり、調子が悪いのね」(質問=調子が悪いのか+文脈処理)無能:「はい、だから、そういったじゃないですか」相手:「ちょっと試してみたのさ」(試してみた、に対する単純マッチングパターン)無能:「もっと試してみてください。どーんと来い!」さて、これだけの会話を交わせるようになるためには、どんなことが必要なのだろう。人工無能を発展させるときに、一つの方向性としては、感情に対してビビットに反応させていく方向があり、もう一つには、トピックあるいは知識に対してビビットに反応させていく方向があるかもしれない。そうすると、やっぱり、ある程度、構文を意識しないといけない。形態素解析だけでは、なかなかそういう次元にたどり着くのが難しい。あと、文脈を保持するためには、いったい何文程度、過去の発言を記録しておく必要があるか。これは、処理の遅さをきにしなければ 、会話全部でいいのだよな(笑)。発言に対する肯定と否定とか、キーワードとか、ある程度、範囲を絞って。それにしても、どんどん仕様ばかり膨らんでいくなぁ。ちょうど 日本語係り受け解析器 CaboCha/南瓜のバージョンも新しく出ていることだし、これを使ってみることにしようかな。試しに解析させてみる。今日は天気があまりよくありません。 今日は-------D 天気が-----D あまり-D | よく-D ありません。この形式だと、人間が見て分かりやすいかもしれないが、人工無能からちょっと使えない。で、-f1 オプションをつけて、もう一度やり直し。今日は天気があまりよくありません。* 0 4D 0/1 3.70684451今日 キョウ 今日 名詞-副詞可能は ハ は 助詞-係助詞* 1 4D 0/1 4.41865572天気 テンキ 天気 名詞-一般が ガ が 助詞-格助詞-一般* 2 3D 0/0 0.36188985あまり アマリ あまり 副詞-助詞類接続* 3 4D 0/0 0.00000000よく ヨク よい 形容詞-自立 形容詞・アウオ段 連用テ接続* 4 -1O 0/2 0.00000000あり アリ ある 動詞-自立 五段・ラ行 連用形ませ マセ ます 助動詞 特殊・マス 未然形ん ン ん 助動詞 不変化型 基本形。 。 。 記号-句点この形式なら扱えないことはない。Python の API はないみたいだが、どっちにしろ、API を持っている MeCab でも、面倒なので標準入力から結果を読み込んで使っちゃっていたし、同じようにして、Python に CaboCha の結果を読み込むようにしてみよう。* で始まる行は、係り受け情報の出力で、4D とか 3D とか2番目のフィールドが、係り先の文節の番号を示しているのだな。D が係るで、O が係らないか。こうなったら、学習データから作るかな。なんだか2年以上かかるコースに入ってきたきた気もするが・・・。なんにせよ、実際の人工無能の会話用データベースを作っていくのと平行してやっていけるし。で、参考に 京都大学テキストコーパス Version 3.0をダウンロードしてきて中身を眺めてみる。げーっ、やっぱり大変だなぁ。めげるめげる。よく、こんなのやったわなと感心する。よく見ると、「らぐびーWさかずきが」とか、けっこうそういうデータ入っているのね、これが(^^;;。こういうの「Wはい」で辞書登録すべきじゃないんだろーか・・・。でも、やっぱりすごい労力。いったいどのくらいの時間かかったのかな。地道なのって苦手(笑)。でも、もうちょっと調べてみる。このデータは 日本語構文解析システム KNPを使ってまず解析させて、それを手作業で直したものなのだな。手作業で全部作るより、KNP を使って解析した結果を手作業で修正した方が、やっぱり楽かな。ふーっ。CaboCha の入力フォーマットを確認する。形態素解析、文節区切り、素性選択まではなんとかなるとして、係り受け解析 はやっぱり、適当な書き方をしたものから自動変換でもするようにしないとかなり辛いな・・・。うーん、どうしたもんかなー。でも、ここまで来たら、もう徹底的にやるぞ(笑)。だって、やっぱり、既存のタイプの人工無能だと、会話してても、どうしてもおもしろくないんだもの。なんにせよ、ちゃんと落ち着いて眺めてみないと手がでないなぁ。
2003.04.04
コメント(0)
ジャストシステムの 日本語パワーアップサイト ATOK.comに、村上龍の日本語問題 という特別企画がある。問題に答えると「抽選で10名様に村上龍氏のサイン本を進呈」らしい。ジャストシステムって、最近、「日本語」に力を注いでこそ生き残っていけるということがよく分かってきたみたいで、こういうサイトを作ってみたり、みんなで作るATOK辞書とか、ATOK方言体感サーバーとか、企画をやっているのね。ATOK 自体も関西弁対応したりとか。全国方言WEB ほべりぐなんていうのもおもしろい。ここでは ATOK16/15 用の方言辞書をダウンロードできたりする。Microsoft Word と競争していた時代は「国産」ということを全面に出して勝負していたようだが、あきらかにブランディングとしては誤りで、「国産」なんてことはもう一言も言わずに、「日本語」を全面に出して、それを「地方性」ということによって引き立てるというよい方向に進んでいると思う。ジャストシステムの日本語テクノロジーなんていうページも、むちゃくちゃ地味な内容だけどもいい。で、また、辞書が商売になるということを、実践するようになってきたのね。歴史用語変換辞書 for ATOK16 とか、電気・電子・情報17万語変換・対訳 for ATOK16 w16 とか、いろんなものを売っている。開発しているのはジャストシステムではなくて、あちこちの専門の会社なのだけど、これは方向としていいと思う。辞書を作ったり、配布したり、共有したり、同期させたり、というところに焦点を絞っていれば、ネット企業の顔も明確にできるわけだし。ATOK Business Solution 辞書配信システムとか、InternetDisk とかいう方向はすでに出しているわけだけど、ここはまだまだ発展させられるし。というかまだしょぼい。まあ、実際にこうしたらいいというアイデアはあれこれあっても、実装するのに時間がかかるだろうからしょうがないかな。Just my shop では、こういうわけの分からないものも売っているが、学習方面をターゲットとしてとらえて、とにかく家庭に入り込みという一つのやり方としてとらえられないことはないが・・・。写真に日記をつけて、楽しかった思い出の写真を探したりとか、そんな製品だったら日本語処理という路線がだせるだろうが。ん、フォントはまだ売っていないのだな。そういえば、■ATOK技術情報 <ATOK10/ATOK11 for Windows アプリケーションプログラムインターフェース仕様書> の ATOK16版とか、早いところ公開した方がいいだろうな。こういうのは、実際に使うか使わないかという問題だけでなくて、イメージの問題もあるのだ。まあ、人の会社だからどうでもいいや。何はともあれ、がばれジャストシステムだな。まあ、もっとがんばれ自分ではある(笑)
2003.04.01
コメント(0)
『銀河英雄伝説』の DVD がやっとすべて届いて喜んでいるんだけれど、PS2 が具合悪いまま放置されているので、DVD 見られないのだ。ゲームはできる状態なので、三国志のゲームでも買ってきてふとやってみようかと思ったのだけど、とりあえずやめておく。まあ、それはどうでもいい。「三顧の礼」 といえば、劉備玄徳と諸葛孔明の三国志のお話だが、こんなフィギュアを作っている人がいるのだな。すごい。キャラクターを視覚化すると、頭の中の想像の世界とはまた違った楽しい世界があるのだな。で、考えてみたら、ここでは Python は直接使わないことにしたので(コードはここでは出さないことにしたから)、シリーズも、Python をはずしてみる。考えてみたけどいい案が浮かばないので、なんだか人工無能というシリーズにしてみた。で、いつものように「三顧の礼」を形態素解析をしてみると、次のように解析された。三顧の礼三顧 名詞,一般,*,*,*,*,三顧,サンコ,サンコの 助詞,連体化,*,*,*,*,の,ノ,ノ礼 名詞,一般,*,*,*,*,礼,レイ,レイで、何を思うかというと、三 名詞,数,*,*,*,*,三,サン,サン台 名詞,接尾,助数詞,*,*,*,台,ダイ,ダイの 助詞,連体化,*,*,*,*,の,ノ,ノ車 名詞,一般,*,*,*,*,車,クルマ,クルマ「三台の車」だと次のように解析されるんだけど、「三顧の礼」の場合は、「三顧」が一語になるのだよな。不純じゃないか。数とその数え方という解析をするのなら「三」「顧」となぜなぜならないのだろう。「一顧」や「二顧」が存在しないのが、用例として明確であり、それ以外は現実的に意味を持たないから「三顧」だけを登録したとしよう。そうすると、「一顧の礼」「二顧の礼」が同様に存在しないことも明らかであるから、むしろこれは、「三顧の礼」と一語で登録した方がいいのじゃないか。いや、形態素解析はあくまで形態素解析であって、正しく形態素を解析することが目的なのだから、「三顧の礼」と一語にしてしまうと、ちょっとまずいでしょ、と思うなら、さて、最初に戻って、それじゃあ、「三」「顧」「の」「礼」と解析するのが正しいでしょうという気がするんだが・・・・。やっぱり、辞書というのはある意味、ご都合主義にならざるをえないとするなら、目的に応じて、カスタマイズをどうやっていくか、というのは非常に重要な問題なんじゃないかと思うのだ。
2003.03.27
コメント(0)
ときどき、無性に餡こ(アンコ)が食べたくなる。そうすると、コンビニで安っぽいあんこが入ったものを買ってきて食べる。でも、これだってものがないのだよな。おいしいアンコが食べたい。あんまりおいしくないものを食べると、満足感がなくて、もっと食べたくなるのだ。やっぱ、デパ地下でも行って買ってこようかな・・・。ちなみに「あんころ餅」は、日本語形態素解析器の MeCab や ChaSen の辞書にちゃんと載っているのだな。でも「あんころもち」だと、ぜんぜんだめだめの結果になる。トーくんの辞書を作ろうかと思ってちょっと、いろいろ調べながら、やっぱり、たとえば「食べ物」という属性を形態素解析の結果にも入れてやりたい気がしてきた。辞書を改良するときに、属性ベースで、たとえば、「食べ物」に焦点を当てて、がーっと、これに対してまず属性をつけてしまうとかやりたいと思い始める。そうすると、属性のファイルを作って、ここにどんどんと食べ物の名前を書き込んで、そのファイルを今度は、形態素解析器の辞書の方にがーっとまとめて反映させるという方向性がメンテナンスしやすいんじゃないかなと。それにしても、「あんころもち」とひらがなにすると、辞書に載っていないから、解析がこけてしまうのはしょうがないとして、ここまでグチャグチャになるのか・・・。これはいくらなんでもなんだなぁ。「あ」「ん」「ころ」がそれぞれ非自立になっているところは、立派といえば立派なんだろうけど、ひらがな文字列の非自立語が連続している場合は、もしかして解析がこけている確率が高いのかな。大量にやってみると何かおもしろいことが分かるかもしれない。こけている確率が高いのであれば、一定の条件でつないでしまって未知語にしてもいいだろうし。あんころもちを食べる。あ 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,ある,ア,アん 名詞,非自立,一般,*,*,*,ん,ン,ンころ 名詞,非自立,副詞可能,*,*,*,ころ,コロ,コロもち 名詞,一般,*,*,*,*,もち,モチ,モチを 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ食べる 動詞,自立,*,*,一段,基本形,食べる,タベル,タベル。 記号,句点,*,*,*,*,。,。,。「ころ」の名詞,非自立,副詞可能っていうのは、何なのだろう。「4月ころ」とかの「頃」なのかな。「いちころ」とかの「ころ」ではないだろうな。やっぱり、ひらがなには弱い。あー、でも人工無能とかで会話していたら、けっこうひらがなにはつよくないとつらいときもあるんだよな。「アルジャーノンに花束」をプロジェクトとして、ひらがな文字列に強い形態素解析器も欲しいかもしれない。いちころい 動詞,非自立,*,*,一段,連用形,いる,イ,イち 動詞,自立,*,*,五段・ラ行,体言接続特殊2,ちる,チ,チころ 名詞,非自立,副詞可能,*,*,*,ころ,コロ,コロまあ、何にせよ、一応、「餅を食べる」ということ自体は、この解析結果からでも分からんことはないな。どうでもいいが、うまいアンコが入ったものが食べたい。
2003.03.26
コメント(0)
新しい炊飯器をもらった。今まで使っていた炊飯器は10年ぐらい前から使っていたのだ。で、早速、新しい炊飯器を使ってみる。最近の炊飯器ってほんとに、うまく炊けるのだな。ご飯がよりおいしく感じる。ビックリしたのは、内釜の厚みと重さ。チタンコートの遠赤厚釜とか書いてあるな。ふーん、これがおいしさの一つの理由なのね。ってコマーシャルとかで見ては知っていたんだけど、いざ内釜を持ち上げてみると、やっぱりズッシリという感じでビックリしてしまった。時代は変わるものだ。まるで浦島太郎みたい(笑)。○ ZODB のパフォーマンス先日、ZODB (Z Object Database) が意外に高速でびっくりしたということ書いたが、もうちょっと、どれくらい使いものになるのかを確かめてみることにした。基本的には、キーとその値という構造を考え、どれだけ高速にデータを登録でき、また引き出すことができるかということを確認してみたいと思う。というわけで、その結果を、傀儡師の実験室に記録しておいた。要するに、MySQL の書き込みと、ZODB の書き込みとで比較をしてみたわけ。ZODB の能力をもう一度確認してみようと思ったのだ。結果だけここで書いておくと、十分満足できるものだということ。遅い遅いと言われる割には、そんなに遅くない。なんで遅いって印象を持つかっていえば、これは、Zope がいけないんじゃないかなぁ。Zope がなければ、そもそも ZODB はなかったわけだけど、実は、ZODB をデータベースとして単体としてみたときには、Zope が ZODB の足を今ひっぱっているような気がしないでもない。複数のユーザがデータベースに同時にアクセスしてコンフリクトが発生するような場面がなければ、キーと値の登録においては、MySQL と張り合える程度の書き込みパフォーマンスがあるということ。やっぱりやってみるもんだな。
2003.03.22
コメント(0)
トーくん の 辞書作成の際のヒント、Tips を読んでちょっと辞書を作って 「くぐつくん」 を賢くしてあげようと思ったのだが、面倒になった。「おみくじ辞書」「血液型辞書」を公開しているサイトがあったのでとりあえずダウンロードしてみる。あと、リンク集にあるサイトも眺めてみる。辞書の作り方のイメージは分かった。うーむ、とりあえずは、@Nifty のページから一個一個追加しよう。面倒だからやっぱり一括登録も覚えようとも思うが、辞書作りが面倒ね。でも、それをやらなきゃ意味ないしな。おもいっっきりマニア目指そうかな。で、あと、傀儡氏の実験室の方で、ちょっと遊んだ。何を遊んだかというと、XREA のサーバには日本語形態素解析器 MeCab など、当然のようにインストールされていないだろうし、import MeCab として Python から MeCab を使える可能性などほとんどないに等しい。でも、それだとやっぱり寂しいので、別の自分のマシンにリクエストを送って、そちら側で形態素解析をさせて結果を戻すということをしてみた。まあ、裏側でいったり来たりするわけで高速なレスポンスは期待できないものの、どんなに重い処理でも自分のマシンなら人に迷惑をかけることもなく処理させてしまうことができるし、自分のマシン自体は公開する必要がないので、これいけるなーということをやってみたわけ。これで、人工無能用に小さいデータをやりとりするだけであれば、事実上何でもできるようになった (さすがにでかいデータをあまりやりとりしてたら警告をくらうだろうけど、会話のデータだけならたいしたことないし)。これでおもしろいことができる可能性が高くなった。が、肝心のプログラムはぜんぜん進んでいないではないかという話がある(^^;;
2003.03.19
コメント(0)
バニラをくだけ! WAVE ウェーブ という雪印のアイスを食べた。208kcal なり。やっぱりアイスは冬だよね。バニラアイスの中にソーダ氷が入っているもので、なかなかおいしい。でも「もうほんのちょっとだけ」ソーダ氷の量が多い方がいいかな。雪印の関係者の方がいらしたら、お願いそうして(笑)そういえば、人工無能おしゃべりキャラ「トーくん」登場! をあっちに入れたんだけど、ぜんぜんお話してあげてないので、誰かお話にいってください。変な絵のところをクリックするとお話できます。有料サービスになったら、さすがに少し有効活用しようかと思っていたのだけど、「無料期間延長!2003年6月末まで無料でご利用できます。」 だって。もう少しほっとこ(笑)。こういうマーケティングって難しいものなのだろうな。あんまり流行るとサーバ重くて大変だし、あまり使われないのもなだろうし、バランス難しいだろうな。デフォルトトーくんの辞書グループ一覧とか、辞書作成の際のヒント、Tipsとかのページちゃんとあったのね。トーくん情報交換BBSとかあるのね。少しのぞいてみよう。ランキングとかもできてるのね。ランキングってどの程度使われると載るんだろう。私のはぜんぜん使われてないから、絶対載らないのは分かるんだけど。まあ、とりあえず @nifty の方、このページご覧になったら、こういう情報を多少くどくていいからトーくんのメールとかに書いて欲しいなー。一週間誰も話さなかったら、「誰も話しに来てくれない、さみしいよー」とかいう形でオーナーを召還するぐらいのこともしたらいいし。今、使われているキャラクター数 885 あるのね。月200円だと、177,000円か。今のところ大赤字だろうなー。ただ、これって別の意味もあって、@Nifty の課金制度を使ってもらおうという意図もあるだろうから、仮に課金制度の1ユーザ獲得コストを 3,000円とすると、3000 * 885 = 2,655,000円の効果ってことになる。ただ、全員が新規ユーザのはずはないので、そこまでも経済効果はないだろし、焼け石に水って感じもする。そうすると、次に何をするかといえば、無料でいいやって割り切っちゃうと、会話の中に出てきたキーワードとかをマイニングして、マーケティング資料にしたりとか、辞書構築の際の参考にしたりとか、あるいは、会話の中に広告を含ませたりして、そちらから収入を得るとか、そっちの方向があり得るところ。でもどっちかっていうと、最終的には、これをもう少し高度にして、企業のページで使ってもらったりしてもう少し高い料金でサービスできるようにとか、そういうのも視野に入っているのかな。まあ、短期的には儲からないだろうけど、長期的に見ると、こういうのは大企業がやる分には、ノウハウたまっていいだろうな。実際に何をユーザが入力するかを知るのはすごく有効。作っている人は何より、実践的な経験値が上がるし。大規模でやると、小規模だと見えないものが見えてくるのね。あと、だんだんと、入力される内容が変化していくのもサービスが1年以上続けば分かるはずなので、チェックすべきだろうし、って私が見られるわけじゃないから、どうしようもないんだけど。見せろっていったって見せてくれないだろうし(笑)
2003.03.17
コメント(0)
「ことばの散歩道」というページを見つけた。なぜ「いっぽん、にほん、さんぼん」なのか?とか、 「立直」はなぜ「リーチ」と読むか?とか、読み物として楽しく書いてある。動詞の活用は、どのように変わったか?nのあたりもおもしろい。この方、高校の国語の50才台の先生みたい。最近 50 才とか聞いても、あんまりトシ~って感じがしない。そのぐらいの歳には、自分もあっという間になっちゃうのかなとか思えるようになった。だいたい人生80年ぐらいだとすると、40才になってもまだ半分だものね。そうやって考えると、まだまだ生きなきゃいけないのか、フーって感じ。先は長いのだよな。○ ZODB が意外に速く (Python で人工無能)ZODB (Zope Object Database) が思ったより速くて驚いた。結論から言うと、MySQL で MeCab で使っている形態素解析用の辞書を全部、見出しをキーにして、その他のフィールドをこれに対する値として登録したところ、5分程度で終わってしまった。MySQL だと 10分程度だったので、それより速かったことになる。うーん意外。ただ、条件は同じじゃないので、MySQL の方も同じようなことをすれば、さらに速くなりそうな気はする。とにかく一概に比較はできないけど、十分な速さを持つということが分かって満足。これは下手に MySQL を使うより、作り方によっては ZODB を使った方が遙かに効率的なこともあり得るというショッキングなテスト結果でもある。とはいえ、自分でやっておいて信じられない。もう一度、プログラム自体両方見直して、やり直してみよう。何かの間違いかもしれない (^^;;とにかく、ちょっと積極的に ZODB を使ってみることにした。いったん作られたデータにを検索するときは、インデックスをメモリ上に持っているから速いし (その分メモリを食うのは言うまでもない)。ただし、起動は時間がかかるという難点はある。数MBのインデックスを最初に読み込むことになるからだ。まあ、今想定している人工無能の場合、いったん起動したらそのまま使い続けるという使い方なので、これは問題ない。ZODB のデータの粒度は、オブジェクト指向だけあって大きく、元データの倍の大きさになってデータベースサイズが約 80 MB に膨れあがってしまったが、まあいいとしよう。で、とにかく人工無能のイメージとしては、がんがんと、対話や処理途中のデータを ZODB 上に保存していき、時々、睡眠時間をとってバッチ的に頭の整理をするというような感じ。ゆえに、文脈とかもある程度考慮する。文脈をどういう形で表現して持たせるか、というのは難しいところかもしれない。
2003.03.16
コメント(0)
IBM のサイトを見ているうちに(Notes の Web版が出たというので見に行ったら迷子になって(笑)、ついでにふらふらしていたら 言語的注釈付け のページを見つけた。「白いヨットの帆」は、「白い」が「ヨット」に係って「ヨットが白い」のか、「白い」が「帆」にかかって「帆が白い」なのか、どちらか判定するのは文書を書いた本人でなければ分からないことがあるから、これを白い<seg>ヨットの帆</seg> として、プログラムに教えてあげるためのタグとして、LAL (Linguistic Annotation Language) という仕様を作ってやってますよという話。「大きな黒い瞳の女の子」「美しい水車小屋の娘」とかよく例に出される、係り受けのあいまいさについて最初からタグをつけちゃうという反則ワザ。この発想自体は10年以上前から確実にあったものだし、たいした話ではないのだが、これをなんとか実用に結びつける技術にしようとがんばっている人がいるわけだなと。いわゆるセマンティックウェブとか関わりあう世界かな。それにしても、題名だけ見て来た人に殴られそうな内容だな(笑)で、とにかく、いちいち手でタグをつけたら大変だから専用エディタでとなって、XML エディタみたいなやつを使うのかな。まあ、それはよいとして、やっぱり現実的にはつらいだろう。曖昧性を持つ文だけをピックアップしてくれて、それにタグをつけていくというような形にでもしない限りは。でも、最近のウェブは自動的に DB から抽出したフィールドを使って構成する場合もあるから、そういうものを対象とすればあながち非現実的でもないけど。どの辺にターゲットをおいて今やってるんだろうな。「翻訳の王様」の機能強化のためなのかセマンティックウェブとかと関わるところでやってるのかどっちなんだろうかと、なんとなく興味を持ったので今日は取り上げてみた。で、もう一つの例として、山田は<lal:w sense="hum">長崎</lal:w>と<lal:seg>神戸へ行った</lal:seg>。 があげられているのだけど、「長崎」というのが人であればたしかに難しい。というかそういう悪文を書くなよなという世界でもあるが、実際そういう文章はたくさんある。で、いつもの MeCab で形態素解析をかけてみると次のように解析される。「と」は「並立助詞」で、「長崎」と「神戸」が地域名として解析されるので、たぶん、この結果を使って係り受け解析を行えば、長崎と神戸が並立であることを認識できるんだろう。確率的に見たら、たぶん、このようになっていた方が正しい確率が高いからいい。山田は長崎と神戸へ行った。山田 名詞,固有名詞,人名,姓,*,*,山田,ヤマダ,ヤマダは 助詞,係助詞,*,*,*,*,は,ハ,ワ長崎 名詞,固有名詞,地域,一般,*,*,長崎,ナガサキ,ナガサキと 助詞,並立助詞,*,*,*,*,と,ト,ト神戸 名詞,固有名詞,地域,一般,*,*,神戸,コウベ,コーベへ 助詞,格助詞,一般,*,*,*,へ,ヘ,エ行っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,行う,オコナッ,オコナッた 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ。 記号,句点,*,*,*,*,。,。,。でも、これを「山田はカールスモーキー石井と神戸へ行った。」とすればどうなるだろう。カールスモーキー石井は、人名しか入っていないから、山田とカールスモーキー石井は、神戸へ行った、となるのかな。形態素レベルで見ると、この場合もやっぱり「と」は「並列」になるのね。地域名か人名かの違いしかない。山田はカールスモーキー石井と神戸へ行った。山田 名詞,固有名詞,人名,姓,*,*,山田,ヤマダ,ヤマダは 助詞,係助詞,*,*,*,*,は,ハ,ワカールスモーキー石井 名詞,固有名詞,人名,一般,*,*,カールスモーキー石井,カール スモーキーイシイ,カールスモーキーイシイと 助詞,並立助詞,*,*,*,*,と,ト,ト神戸 名詞,固有名詞,地域,一般,*,*,神戸,コウベ,コーベへ 助詞,格助詞,一般,*,*,*,へ,ヘ,エ行っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,行う,オコナッ,オコナッた 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ。 記号,句点,*,*,*,*,。,。,。次のような例と比べてみると、これはこれで間違いではないということか。「と」はどうあがいても、並立の助詞ということか。英語に直したら、地名として並列になっていたら and 相当だし、人とであれば with になるわけで、同じ「と」でも違いがある「と」が一緒の品詞になるというわけだ。つまり「私と彼は××に行った」と解釈すればよいということなのかな、並列ってことは。私は彼と外へ行った。私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシは 助詞,係助詞,*,*,*,*,は,ハ,ワ彼 名詞,代名詞,一般,*,*,*,彼,カレ,カレと 助詞,並立助詞,*,*,*,*,と,ト,ト外 名詞,一般,*,*,*,*,外,ソト,ソトへ 助詞,格助詞,一般,*,*,*,へ,ヘ,エ行っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,行う,オコナッ,オコナッた 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ。 記号,句点,*,*,*,*,。,。,。それじゃあ、これはどういうことなんだろう。「誰と」の「と」は「格助詞、一般」になる。あなたは誰と行きますか。あなた 名詞,代名詞,一般,*,*,*,あなた,アナタ,アナタは 助詞,係助詞,*,*,*,*,は,ハ,ワ誰 名詞,代名詞,一般,*,*,*,誰,ダレ,ダレと 助詞,格助詞,一般,*,*,*,と,ト,ト行き 動詞,自立,*,*,五段・カ行促音便,連用形,行く,イキ,イキます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マスか 助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ。 記号,句点,*,*,*,*,。,。,。なんだか、この品詞体系によって損をしている気がする。けっきょく、基本的には既存の文法に基づいた品詞体系を IPADIC はとってしまっているから、いけないんじゃないだろうか。MeCab 自体別に、他の品詞体系とコーパスを用意して接続コストを計算しさえすれば継続的に使えるようなものだろうから、もうちょっとコンピュータ処理が減る方向で品詞体系を作り直すような人がいて欲しいものだ。って大変だからやらないんだろうけど、助詞の再分類、細分類をするだけで、形態素解析の結果だけを利用した場合でも、もっと有効な言語処理を行えるようになるはずなんだけど・・・。そういえば、最初の話とずれたままなので、もとに戻して、形態素解析結果から、確信度/正解予想が0-100%の値で簡単に取り出せれば、はずす可能性が高い場合は、他の処理を行うということをすれば、やっぱり、いろいろおもしろいことができる。たとえばタグづけをする場合にも、曖昧性が高いものだけ自動的にピックアップするとか。
2003.03.14
コメント(4)
まだパラパラと見ただけなのでよく分からないが、けっこう R 言語はなじみやすいように感じた。とりあえず 気長に勉強,R 言語 は一通り眺めてみたが、ここからだけでも、あぁ便利そうだなというのが感じられた。やっぱり、インタプリタ形式で使えるというのもいい感じ。ちょこちょこと試していけるのがいい。グラフのプロットもインタラクティブにできるし。あと何がいいかといえば、NA (Not Available、欠損値) がちゃんとあるところ。統計ソフトだから当然なのだけど安心する。自分でプログラム組むと、そういうところも書かなきゃいけなくて面倒だもの。行列や配列の計算ができるのは、当然といえば当然なのだけど、やっぱりいい。そうした話とは別に、すごいなと思ったのは、Packages - Update Packages from CRAN とか Install Package from CRAN なんてメニューがあって、パッケージのインストールがメニューから簡単にネット経由でできてしまうところ。これは正直驚いてしまった。こんな便利なものが無料で使えるなんていい時代になったものだ。このページがとりあえず、ぱっと使うには一番役に立ちそう。必要な統計処理の項目ものを見つけて、その通りにすればいいのだから(^^) R による統計処理。でもまあ、R 入門から地道にはじめてみようかな。統計処理というのは、社会的にみても非常に重要なものなんだから、中学高校で、ほんとはきっちり教えるべきもんだと思う。でないと、総務省「通信利用動向調査」発表、インターネット人口普及率が5割を超えるの記事をよく見ると分かるように、めちゃくちゃな話が何気なくとおっていくことになってしまう。こんなんめちゃくちゃな話を国がやっているということは、もっと批判されるべきこと。総務省の総務省統計局統計センターが出している「家計消費状況調査(IT関連項目)」では、「インターネットを利用できる機器を保有している世帯の割合が50.3%」なのに、情報通信政策局総合政策課情報通信経済室が出すと、「インターネットの世帯普及率は、前年の60.5%から大幅に増加し、81.4%」ってことになるの。誤算の範囲超えてると思うのだけど。要するに、世論操作のために数字を使っているということだよね。統計なんて言うのは建前にすぎなくて。でも、こういう数字が一人歩きして、どんどん訳の分からないことになっていく。それが狙いなんだろうけど。めちゃくちゃな数字が出てきたら、やっぱり叩かんとダメだと思う。世の中わけのわからない数字だらけで気がおかしくなりそう(笑)。大語彙連続音声認識デコーダ Julius ってどの程度ちゃんと認識してくれるんだろう。と試してみると、うーん、これは厳しい。やっぱり、このあたり商用のソフトとかなり差がある。5分もたたないうちにあっさり放棄 (^^;;
2003.03.12
コメント(0)
なんとなく R 言語を使いたいと思い始める。R 言語というのは、S 言語というベル研で開発された統計処理言語の S 言語を、GNU project の一部としてオープンソースで新たに作っているもので、Microsoft の Office に対する OpenOffice みたいなものだと思えばいいだろう。開発は商品の S 言語とはまったく独立して行われているけれど、「S 言語用のプログラムの 95% はそのまま R で変更なしに動くそうです」。Perl に CPAN というライブラリがあるのと同様、R 言語には、CRAN というライブラリがあるようだ。会津大学にこのミラー(ftp://ftp.u-aizu.ac.jp/pub/lang/R/CRAN/)があるので、そちらを利用することもできるようだ。で、R 言語をダウンロード(ftp://ftp.u-aizu.ac.jp/pub/lang/R/CRAN/bin/windows/base/)する。ここにあるのは R-1.6.2 で Windows 版。インストールの方法はここにあるようにいたって簡単。インストールしたら、Rgui をダブルクリックして起動してみる。まあ、なんだかまだよく分からないが、とりあえず quit() を入力して終了。とりあえず、東工大 数理・計算科学専攻/情報科学科 間 瀬 茂氏のページを情報源とする。日本語訳のマニュアルもある。マニュアルは こっちがいいのかこういう風に大学の先生が情報を公開してくれるのは非常にありがたい。生涯学習なんのかんのという話にしたって、こうやって大学の関係者が情報の一部をウェブ上に公開すれば、それだけで十分という話がある。なんたら講座の受講料を国が負担しますというあのばかげた金のばらまきをするぐらいであれば、大学の研究室などに大量に情報公開用のサーバをばらまくとともに、書籍購入用の費用等のために金をばらまいた方が1000倍ましなのだが。これに加えて公共図書館にウェブアクセスのための施設を置く。かなりお金がかかるように見えて、今ばらまいている金額に比べたら非常に安上がりのはず。ほんとにあんなばらまき、一部の業者が得してるだけじゃん。あれいったいくらの予算使っているんだろう・・・。という話はおいておこう(笑)。r-help や R-jp に投稿された記事からまとめた R 使用上のヒント なんてページもあるな。あと、とりあえず、いくつかのページをピックアップ。気長に勉強,R 言語 1日~8日と1週間ちょっと毎日学習できる量があるな。Rによる多変量解析入門 ここに下平英寿氏(東工大 統計科学)のページに、講義用のスライドや資料があるな。Linux で科学しようのページにも R言語が取り上げられている。Notes on S adn R は Mac の人だな。でね、どうして R 言語なんて突然いうのかといえば、R/SPlus - Python Interface、RPy (R from Python)、The Omegahat RSPython package for R & SPlus のようなものがあって、Python からも使えるかなと思ったから。というか、もう少し数字に強くならなきゃなーというのがあって、統計の勉強をやっぱりちゃんとやり直そうというのもあるのだ。難しい数学はどうせわかんないし(^^;; 一応、人工無能とかの話とかとも全部つながってるんだけど、あまりにも構想が難しすぎて、自分でもよく見えない。というか、構想はなくて、直感しかないじゃんというだけの話。なんにせよ C や C++ でゴリゴリ書くことができないんで、こうやっていったん外側にデータを出して統計パッケージとかで処理して、その結果を使って・・・という感じなのだけど、何をどうするかはよくまだ分からない。作る前から、全部見えちゃってるとおもしろくないんで、試行錯誤してみるのだの世界なの。書籍を読みたければ、『渡辺利夫 著 使いながら学ぶS言語』オーム社 2500円とか、『S言語I、II 』ベッカー、チェンバース&ウィルクス著 渋谷政昭/柴田里程 訳 共立出版 5150円とか、S言語のものを読めばよいようだが、とりあえずオンラインマニュアルやネット上で読める資料を見るので買うのはやめておく。
2003.03.11
コメント(0)
ジャガイモを電子レンジで調理して食べた(それだけってことは、さすがにない(笑))。サツマイモもそうだけど、一番弱くしておいて、時間をかけて調理するのがコツ。その方がおいしく仕上がるのだ。○ 再び ZODB に挑戦 (Python で人工無能)先日 ZODB でサンプルが古いから動かんと書いたけれども、何か勘違いして、やり損なっただけみたいなので、やり直し。で、ZODB に単語の「見出し」と「読み」を登録する簡単なプログラムを作ってみた。この程度だと、あんまり ZODB の良さが分からんかもしれないなーと思いつつ(笑)。データベースに接続したりとかするところは、RDBMS とか使っていても同じようなもので、いったん接続用のリソースを確保しておいて、それを使ってデータベースにアクセスするというところでは変わらないのといえば変わらないが、いったん接続してしまったあとは、通常の python のディクショナリ形式のデータにアクセスするのと同じようにデータにアクセスできるので、もうちょっと手の込んだものをやってみるとメリットが明確になるかな。でも、単語(word) オブジェクトをそのままデータベースにぶち込んでいるところに注意なのだ。これができるから便利なの。で、とりあえずソースはこんな感じ。ZODB for Python Programmer を参考に、これをもっと単純にした感じ。起動すると、「一覧表示(’L’)、単語追加(’A’)、終了(’Q’): 」こういうメニューが表示されて、それぞれの機能を実行できる。単語の追加は、見出しと読みを入力するだけ。# いろいろ読み込む(笑)from ZODB import DBfrom ZODB.FileStorage import FileStoragefrom ZODB.PersistentMapping import PersistentMapping# こいつは、ZODB をインストールすると一緒にインストールされているのだ。from Persistence import Persistent# Persintent クラスを継承した Word クラスを宣言class Word(Persistent): """A word""" def __init__(self, midashi, yomi): self.midashi = midashi self.yomi = yomi# データベースを設定# 最初に words.fs というファイル名の格納場所を用意する。# ファイル words.fs を使ったストレージ(格納場所)を使って# データベースとしてアクセスすることにする。# 通常のファイルじゃなくて、BSDDB とか使う場合は、ここが# 変わることになる。storage=FileStorage("words.fs")# このストレージを初期値として ZODB データベースオブジェクトを# 作成する。db=DB(storage)# DB を開いて、接続用の変数に代入する(接続オブジェクトを作る)connection=db.open()# ZODB の接続オブジェクトの root メソッドを使って、# データベースのルートを開く。ちょうど、Unix の / や# Windows の C:\ のディレクトリ/フォルダを開いた状態と# 考えてみることにしよう。root=connection.root()# root に words というキーがなかったら、words というキーで# root 上に 空のディクショナリを作ってやる。if not root.has_key("words"): root["words"] = {}# root から words をキーとして値を取り出す。# 2度目からは、ちゃんとこれで前に保存してあったものが# 読み込まれることになる。words=root["words"]# 一覧表示用の関数の定義def listWords(): """ 登録単語の一覧を表示する """ if len(words.values())==0: print "登録された単語がありません。" print return for word in words.values(): print "見出し: %s" % word.midashi print "読み: %s" % word.yomi printdef addWord(midashi, yomi): """ 単語を新規登録する """ # words ディクショナリ中に、この見出しがすでに登録 # されていたら、登録済みのメッセージを表示する。 if words.has_key(midashi): print "この単語は登録済みです。" return else: # 未登録であれば、この単語を見出しをキーにして # words ディクショナリに追加する。 words[midashi]=Word(midashi, yomi) # words に再登録して更新する。 root[’words’] = words # このトランザクションをコミットする。 get_transaction().commit() print "単語 %s が追加されました." % midashi printif _name_=="_main_": while 1: choice=raw_input("一覧表示(’L’)、単語追加(’A’)、終了(’Q’): ") choice=choice.lower() if choice=="l": listWords() elif choice=="a": midashi=raw_input("見出し:") yomi=raw_input("読み:") addWord(midashi, yomi) elif choice=="q": break # データベースを閉じる connection.close()で、実行するとこんな感じ。一覧表示(’L’)、単語追加(’A’)、終了(’Q’): A見出し:人工無能読み:じんこうむのう単語 人工無能 が追加されました.一覧表示(’L’)、単語追加(’A’)、終了(’Q’): L見出し: 人工無能読み: じんこうむのう一覧表示(’L’)、単語追加(’A’)、終了(’Q’): A見出し:形態素解析読み:けいたいそかいせき単語 形態素解析 が追加されました.一覧表示(’L’)、単語追加(’A’)、終了(’Q’): L見出し: 形態素解析読み: けいたいそかいせき見出し: 人工無能読み: じんこうむのうこれで ZODB も使えるようになったので、また、ipadic をぶち込んでみるかな。これはかなり時間がかかるだろうな。インデックスも作ってあげないと見出しの検索しかできなくておもしろくないか。インデックスを作ったら、かなりデータサイズが大きくなるだろうし、さらに時間がかかりそう。うーん。まあ、これは遅くてかまわないので、どの程度、どんなことになるかとりあえずやってみるかな。
2003.03.05
コメント(0)
久々に自分で肉を焼いて食べた。なんて生活だ(笑)。このところのお気に入りは、ノルウェー産の子持ちシシャモ。安くてうまいのでいい。体にもいいしね。で、たまには自分で肉を焼いて食べようと豚肉を買ってきた。やっぱりコンビニの弁当についている肉より自分で焼いた肉の方がうまい。鉄のフライパンにしっかり油をひいて焼いて食う。テフロン加工のフライパンは焦げ付かなくていいのだけど、やっぱり鉄のフライパンで焼いた方が肉はうまい。○ 形態素解析器ベンチマーク (Python で人工無能)しばらく前に形態素解析器のベンチマークをしようと思っていてすっかり忘れていた。ということで、簡単なベンチマークをやってみた。この機械翻訳用の試験文から日本語だけを切り出して5回繰り返すテキストファイルを作っやってみた。それとは別に、1文だけ入れたファイルを作って、500回繰り返すというアバウトなテストをやってみた。比較したのは、MeCab、Chasen、JUMAN、Breakfast、kakasi。結果として、改めてびっくりしたのは MeCab の優秀さだった。最初のテストでは、 MeCab < kakasi < Chasen < Breakfast < JUMAN だが、MeCab が圧倒的にかつ信じられないほど速く、kakasi なんか目じゃないという強さ。JUMAN はお役目ご苦労様でしたという感じ。2番目のテストでは、 kakasi < MeCab < Breakfast < JUMAN < Chasen という感じになった。MeCab は kakasi にかなりよい線で張り合っているが(それでもやっぱり kakasi は速い)、Breakfast、JUMAN、Chasen は、お話にならないぐらいに2つに比べて遅い。ここから、1文単位で動かす場合は、kakasi がサイズが小さいし、中身が単純なだけに有利に働くということが分かる。これに対して、Chasen はやたらと起動時間に時間がかかっているという感じ。いったん起動して解析を始めれば、量が多くなるほど kakasi のメリットは見えなくなっていく(つまり、純粋な解析速度そのものはそれほど速くない)。ただ、1文単位でそんなに形態素解析を行うようなことは、なんらかの自然言語処理のプログラムでも作らない限りはあり得ず、数十キロバイト単位のインデックス用のキーワードの切り出しに使うのであれば、Chasen が kakasi にそれほど劣った速度にはならないはず。ということで、全文検索用に kakasi か chasen のどちらがいいかということになれば、基本的に Chasen を使った方がいいんじゃないのと思える。また、MeCab はどういう条件でもばかに速いので、キーワードインデックスの切り出しなど一定度のテキスト容量がある場合には、kakasi よりも MeCab の方が速度的にも有利になるはず。で、kakasi はもうお役目ご苦労様になる。それに、kakasi はキーワードの切り出しにしても、分かち書きが適当でない場合もやはりやや多いし・・・。Breakfast は、Chasen より起動が速いせいか単文の場合やや速いものの、量がある場合は Chasen と順位が逆転した。また、MeCab とはまったく張り合えるような速度ではなかった。MeCab はこれで、安定度して使えるという評価を得られれば、kakasi や Chasen にとって代わるケースが増えるだろう。が、辞書登録がやや面倒とか、その他、若干、使用上の問題において chasen に劣る部分があるので、完全に置き換わることにはならないかもしれないが。まあ、個人的には、これから MeCab をもっと使い込んでいこうという確信を強める結果ではあった。形態素解析結果については、面倒なので見ない(笑)。結果は辞書によっていくらでも変わるし、kakasi はそもそも、分かち書きはしてくれても品詞がつかないし、分かち書きの結果もかなり適切でないことも多いので対象外。Mecab と Chasen はやや、違うところがあるものの、おおよそ同じ感じになるだろうと予測がつくし、JUMAN はちょっと癖があるけど、場合によっては便利なこともある。さらに、Breakfast はといえば、品詞体系がまた違うので一概に比較できない。分かち書きだけを比較するということをしてみると、特長が分かっておもしろいかもしれないが、やっぱり面倒なのでやらない。で、試してみた結果、MeCab はやっぱりかなり優秀だった。ほんとにびっくり。Chasen の新しいバージョンはどうだろう。機能が若干削られて、Dart を取り入れているだけに、速度向上は期待できる。そのうち試してみよう。なんにしても、ベンチマークをするときには、どういう単位(量)を扱うかということも、ちゃんと検討しなくてはいけないなというのも改めて感じた。
2003.03.04
コメント(0)
グリコのジャイアントソフト、ビター&バニラを食べた。やっぱりアイスは冬に限るのだ。これはバニラの部分はあんまりうまくないが、ビターチョコの部分がうまい。ボリュームたくさん、カロリーたくさん、257kcal。でも、ポテトチップス一袋食べるより、よっぽどカロリーすくないのだよね。コンビニの商品って入れ替わりがけっこう激しいけど、それなりの期間たっても消えてなくならないということは、そこそこ売れているということなのかな。○ ipadic をちょっと眺める (Python で人工無能)ipadic のマニュアルを眺めてみる。このマニュアルは ipadic 2.5.1 用に書かれているな。新しい ChaSen 2.3.0 はまだ時間がないので入れていない。いや、日記書くのやめれば、その程度の時間はあるんだけど(笑)。よけいな処理もなくなって Darts (Double-ARray Trie System) も使われてということで、なんだか速くなるんじゃないかなーという期待はあるのだけど、面倒なのでいれてない。ipadic-2.5.0 と ipadic-2.5.1 の比較をするのは、とりあえずは ChaSen の方がいいかな。MeCab だとなぜか、Make してる最中に落ちちゃって ipadic 2.5.1 使えないし。原因は調べれば分かるのかもしれないが面倒なので放置。単純に diff だと ipadic 2.5.0 と ipadic 2.5.1 の違いがよく分からないが、いろいろツール作ってから調べることにしようっと。で、とりあえず、またちょっと ipadic について調べる。ipadic-2.5.1/doc あたりをまず眺める。品詞体系そのものは、2.5.0 と 2.5.1 の違いはなさそう。どちらも、情報処理振興事業協会(IPA) で設定されたIPA 品詞体系(THiMCO97) に修正を加えたというもの。まずは、1998年5月に公開したIPA品詞体系日本語辞書(ipadic1.0b2) があって、日本語ディクテーション基本ソフトウェアの開発」の成果を反映させて修正改良が行われたと。で、「 ipadic-2.5.0 の品詞体系は ipadic-2.4.X と同じものを利用しますが、今後、茶筌 project では品詞体系(活用型/活用形)の大幅な変更を行っていきます。」とドキュメントに書かれているが、このあたり、で、いまいったいどうなったのかよく分からんな。2.5.X というのは、なんにせよ、開発版ということなのかと改めて気づく(^^;; つまり、Linux などの偶数のバージョンと奇数のバージョンとかと同じ感覚でとらえればいいわけか。で、辞書ファイルは (Noun.dic など) の品詞ごとに分かれた辞書がまずあって、連接表ファイル (connect.cha)、 品詞定義ファイル(grammar.cha)、活用型定義ファイル (ctypes.cha)、活用形定義 ファイル(cforms.cha) がある。ということで、品詞自体は、まず、品詞定義ファイル(grammar.cha) を見ればいいということだな。品詞定義ファイル(grammaer.cha)の「(動詞%」みたいに % がついているやつは、活用する品詞。ついていないのは活用しない品詞と。人工無能も活用する品詞としない品詞の区別を明確に持たせた方がよいかもしれないな。(chasen のドキュメントより引用)BNF で書かれているな。で、BNF って何の略だっけ。Backus Naur Form でした。バッカスさんと、ノーアさんが作った書式(Form) だから、2人の名前からつけられたと。BNF記法入門(1) ─XML関連仕様を読むために─なんてものも見つかった。でも、どっちかっていうと yacc 入門みたいなところを見た方がいいのかな。でも、Javaコードの診断: 拡張可能アプリケーションの設計 第4回, S式がどのように軽量のブラック・ボックス拡張性を実現するかみたいなものの方が、S式を扱っているからいいのか。と話がそれる。とにかく grammer.cha とか connect.cha ctype.cha とかも RDBMS に入れてしまおうかな。うーん、この量なら pickle とかで持たせて毎回読み込んじゃってもいいかな。全部合わせて 1MB 強程度だし。と、話がどんどんとそれる。が、文の生成のときに役立てられそうな気もするし。なんだか、どんどん仕様ばかり妄想的に膨れあがっていくなー。まあ、いいや。ふと、おもしろいと思ったのが、フィラー。で、フィラーって何?といったら、要するに詰め物で、その語自体に特別な意味はなく、むしろ、会話の途中に間をとったりするために使われるような語のことを指すのだろう。「その、なんか、あのー、えーと、えー、あの、と、えーっと、うん、ま、えと、まあ、そのー、うんと、ええと、え、そうですね、あ、」というのがフィラーとして登録されているが、ここを増強すると口語に対してもっと強くなりそうな気もする。「えっとー」とか「んで」なんて入っていないものね。「まあそのー」とかすると、「まあ(感動詞)/そのー(フィラー)」に解析されるけれど、「まあ」と「そのー」は、それぞれ登録されているものの結果としては、両方ともフィラーという風には解析されない。意味的に言ったら、たぶん両方フィラーなんだろう。Noun.place.dic に地域名が入っているが、郵政省の郵便番号データから作り直したとすると、やはりこの程度の数になるのかな。ipadic のエントリ数は 67295。郵便番号データからとったらどうなるか。鄙俗 (ヒゾク) みたいな難しい言葉もたくさん入っているが、むしろ、このレベルの文字は当用漢字に入っていないだろうから、鄙俗より、ひ俗と書かれるか、それではわかりにくいからそもそも、別の言葉に言い換えられる言葉かもしれない。人工無能っぽくかわいくするためには、当用漢字だっけ、常用漢字だっけにある文字だけを固有名詞、地域名以外は残して後はバッサリけずってしまうとかいうのをやってもおもしろいかもしれない。でも、コストの付け方が問題だな・・・。
2003.03.03
コメント(0)
とりあえず、昨日は、いいかげんにデータベースに放り込んだので、もう少しちゃんと入れ直すことにしよう。とりあえず、正規化するにしても、どんなエントリが入っているか、ちょっと見てみるのに RDBMS に入れちゃった方が便利だから(笑)。ちゃんと正規化すれば、少しは Gadfly でもパフォーマンスがよくなるかもしれないが、やっぱり遅そうなので、Gadfly はあきらめて、MySQL でやることにする。MySQL がインストール済みなら、Sourceforge から、MySQL Pythonをダウンロードしてインストールすれば、すぐに Python からも MySQL が使えるようになる。ということで、昨日は MySQL の方もセットアップしてしまった。で、昨日のは、こんな感じでデータを登録した。#! /usr/bin/pythonimport sysimport MySQLdbCSVFile = "C:¥¥Program Files¥¥mecab¥¥dic¥¥ipadic¥¥dic.csv"# MySQL サーバに接続するtry: conn = MySQLdb.connect (host = "localhost", db = "pytest")except MySQLdb.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit (1)# カーソルを作成cursor = conn.cursor ()# コマンドの前半だけ用意するcmd0 = """insert into dic ( mkey, cost, pos1, pos2, pos3, pos4, pos5, pos6, genkei, yomi, hatsuon) values """cmd0 = cmd0.replace(’¥n’, ’ ’)cmd0 = cmd0.replace(’ ’, ’ ’)# カウンタc = 0# CSV ファイルを開き、最初の行を読み込む# ちなみに行末の改行(¥n)が邪魔なので1文字捨てている。csvfile = open(CSVFile, ’r’)line = csvfile.readline()[:-1]while line: # カンマ区切りのデータをリストに分解 [’見出し’, ’品詞1’, ’品詞2’] line = line.split(’,’) # "(’見出し’, ’品詞1’, ’品詞2’, ...)" という文字列が欲しい。 # のだが面倒なので、タプル(a, b, c...) という形式にリストから # いったん変換して、その表示用の文字列を使ってしまう(^^;; line = tuple(line).__repr__() # コマンドの前半部と読み込んだ行を合体して、 # その行を挿入するための SQL 文を作る cmd = cmd0 + line # sql コマンド を実行し、データを挿入する cursor.execute(cmd) # どのくらいまで進んだか、画面に表示しておく # 1000 ごとに ’.’ を1つ表示しておく c = c + 1 if ((c % 1000) == 0 ): print ’.’, # 次の行を読み込む # ちなみに行末の改行(¥n)が邪魔なので1文字捨てている。 line = csvfile.readline()[:-1]# csv 形式の辞書を閉じるcsvfile.close()# テスト用に小さい csv ファイルを最初に作ってテスト# でかいのでそのままやると大変...# cursor.execute("select * from dic")## cursor が示しているポイントから、# データをすべて取り出して(fetchall)、# 変数 x に代入してすべての取り出した行に対して操作を行う。##for x in cursor.fetchall():# print x# とするとデータが多くて大変なので# 確認しないでとりあえず閉じて終わり。conn.close()sys.exit (0)とりあえず、データをぶち込んだら検索してみる。Gadfly と比べてやっぱり速くて気持ちいい。それにしても、こういう汎用の RDBMS と比べて、形態素解析の辞書引きって速いよなーと思う。まあ、RDBMS の方が遅いけれど、いろいろ遊べるのだよな。#! /usr/bin/pythonimport sysimport MySQLdbCSVFile = "C:¥¥Program Files¥¥mecab\\dic¥¥ipadic¥¥dic.csv"# connect to the MySQL servertry: conn = MySQLdb.connect (host = "localhost", db = "pytest") cursor = conn.cursor ()except MySQLdb.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit (1)# 検索の例cursor.execute ("SELECT * FROM DIC where mkey=’北’")# 検索結果をいいかげんに表示rows = cursor.fetchall ()for row in rows: for r in xrange(len(row)): print "%s " % row[r] , print "¥n"print "%d 行、マッチする行ががあります。" % cursor.rowcountてな具合でまず動けばいいって感じでやってみた。これでも、いろいろ検索できるので便利なのだ。名詞だけを抜き出したり、固有名詞だけを抜き出したり、あっという間にできてしまうから。で、正規化する前に、まずデータを眺めてみることにしよう。と、また、これもシリーズ的に長々と続くんだろうか。いつになったら、人工無能に組み込まれるのだー。でも、本質的に、たくさーんのデータをこれから扱っていこうと思うので、やっぱり、どこにどういう風に格納しておけば楽に扱えるかなというのも、やっぱりやっておかないとならないし、辞書も鍛えなきゃならないし。最初の予定では3月中に第2弾でもう少し賢いバージョンにしようと思っていたが、当分、ちまちま、辞書をいじったりとかの実験を続けるかも(^^;;ころころ気が変わるんだ。で、実はテーブルはむちゃくちゃなことしているので(大笑い)、これから正規化したりしながら、ちょっとまともに直していく。create table dic ( mkey VARCHAR(40), cost VARCHAR(40), pos1 VARCHAR(40), pos2 VARCHAR(40), pos3 VARCHAR(40), pos4 VARCHAR(40), pos5 VARCHAR(40), pos6 VARCHAR(40), genkei VARCHAR(40), yomi VARCHAR(40), hatsuon VARCHAR(40) );で、いちいちプログラムを書くのも面倒なので、mysql のコマンドラインで接続して、キーをたたいてしまうことにする。見出し語の長いのはどの程度だろうとちょっと眺めてみると、mysql> select mkey from dic where length(trim(mkey)) > 39;げげっ、40文字じゃ足りてなかった。途中で切れてるやつがある。ということで、元データから見直し。mysql> select max(length(trim(pos1))) from dic;のように、各フィールドの最大文字列帳をとりあえず見直し。で当然、見出しが40に収まっていないものは、読みや原形も収まりきらないので 40 文字を超えている。その他は、コスト、品詞1...6 は、 4, 8, 24, 12, 4, 20, 14 文字あれば足りる。コストは 4文字で数字なので、INT にしておけば足りるな。面倒なのでもう一度フィールドを長くして入れてカウントしてみよう。無精だがやり方(笑)。create table dic ( id INT(7) PRIMARY KEY NOT NULL AUTO_INCREMENT , mkey TEXT, cost INT(4), pos1 VARCHAR(8), pos2 VARCHAR(24), pos3 VARCHAR(12), pos4 VARCHAR(4), pos5 VARCHAR(20), pos6 VARCHAR(14), genkei TEXT, yomi TEXT, hatsuon TEXT);で、ざっくりと、もう一度テーブルを定義し直して入れ直す。で trim で空白をカットして length で長さをとって、max で最大値を求める。読みの類は74文字とかなり長芋のも登録されているし、見出しキーや原形も52文字とかなり長いものがある。ふーん。avg で平均を見てみると、読みの平均は 9.7875。こういうのが一瞬でできちゃうから MySQL は便利でいい。mysql> select max(length(trim(hatsuon))), max(length(trim(yomi))) from dic;+----------------------------+-------------------------+| max(length(trim(hatsuon))) | max(length(trim(yomi))) |+----------------------------+-------------------------+| 74 | 74 |+----------------------------+-------------------------+1 row in set (1.31 sec)mysql> select max(length(trim(genkei))), max(length(trim(mkey))) from dic;+---------------------------+-------------------------+| max(length(trim(genkei))) | max(length(trim(mkey))) |+---------------------------+-------------------------+| 52 | 52 |+---------------------------+-------------------------+1 row in set (1.24 sec)mysql> select avg(length(trim(yomi))) from dic;+-------------------------+| avg(length(trim(yomi))) |+-------------------------+| 9.7857 |+-------------------------+1 row in set (1.15 sec)固有名詞の数を数えてみると 142154 と、368198 の見出しのうち、38.6% の割合。名詞(214618) のうち、66.2% もの割合を占めていることが分かる。実際のところ活用形が展開されて登録されているので、かなりの割合を固有名詞が占めているということになるな。ただし、「きれい」などは、名詞-形容動詞語幹というように登録されているから、純粋な名詞が全部と言うことではない。また、サ変名詞などもあるし。mysql> select count(mkey) from dic;+-------------+| count(mkey) |+-------------+| 368198 |+-------------+1 row in set (1.27 sec)mysql> select count(mkey) from dic where pos1=’名詞’;+-------------+| count(mkey) |+-------------+| 214618 |+-------------+1 row in set (1.52 sec)mysql> select count(mkey) from dic where pos2=’固有名詞’;+-------------+| count(mkey) |+-------------+| 142154 |+-------------+動詞の数も確かに多いのだが、動詞の活用形とひらがなで登録されているものも併せて考える必要がある。1/10 程度に考えてみると、まあ、それでも 1万を超える数が登録されているので、主な動詞はだいたいカバーされているということなのかな。mysql> select count(mkey) from dic where pos1=’動詞’;+-------------+| count(mkey) |+-------------+| 125259 |+-------------+1 row in set (1.40 sec)mysql> select count(mkey) from dic where pos1=’形容詞’;+-------------+| count(mkey) |+-------------+| 24174 |+-------------+1 row in set (1.29 sec)品詞の一覧も簡単に作れちゃうから楽でいいのだ。これで品詞テーブルも楽に作れちゃう。別に正規化なんかしなくても、けっこう使えてしまうのが RDBMS のよいところ。って何の話だ。とうぜん、こういうのも Python のプログラム内から実行することができるわけね。だから、人工無能との会話で、何か地名が出てきたら、似たような地域名を引っ張ってくるとか、人名だったら、また別の名前を検索して引っ張ってくるなんてことも簡単にできるわけ。それが役に立つかは別にして(笑)。mysql> select distinct pos1 from dic;+----------+| pos1 |+----------+| 名詞 || 副詞 || 形容詞 || 動詞 || 接頭詞 || 接続詞 || 連体詞 || 記号 || 助詞 || 助動詞 || 感動詞 || フィラー || その他 |+----------+13 rows in set (1.77 sec)
2003.03.02
コメント(0)
○ 辞書をRDBMS に入れて遊ぶ 1 (Python で人工無能)今日はのっけから本題のみ。とりあえず、Gadfly に MeCab で使っている ipadic を試しに登録してみることにした。まず、辞書を作成するディレクトリのチェックと作成から。Gadfly はデータベースごとにディレクトリを作っておいた方がよいので、C:\\GadflyDB にまとめてデータベースを置くディレクトリとしておいて、そこにさらに ipadic というディレクトリを用意して、そこにデータベースを置くことにする。import sysimport osimport gadfly# とりあえず、 DB を C:¥GadflyDB というディレクトリに# 保存することにする。もし、このディレクトリが存在しない# 場合には、ディレクトリを作成し、作成できない場合は# 終了することにする。DBDataDir = "C:¥¥GadflyDB¥¥ipadic"if not os.path.isdir(DBDataDir): try: os.mkdir(DBDataDir) except: print "ディレクトリが作成できません。"# データベース名DBName = "ipadic"# でもって、今度は、データベースを用意する。とりあえず、# まずテーブルを作成してやる。そうしたら、ちょっと、ここに# 実際にデータを登録できるかどうか、試してみよう。# これはデータをコミットして正式にデータベースに書き込むので# はなくて、最後に rollback してみる。# ここから本番# Gadfly への接続用にオブジェクトを作成し、# connection という変数に代入する。connection = gadfly.gadfly()# DBDIR (C:¥GadflyDB¥ipadic)にある# ipadic というデータベースの使用を開始する。# もし、存在しない場合は、勝手に新規に作成される。# 存在する場合は「初期化」される。connection.startup(DBName, DBDataDir)# カーソルオブジェクトを作成し、# cursor という変数に代入する。cursor = connection.cursor()# sql コマンドを用意する。cmd = """create table dic (key varchar, cost varchar, pos1 varchar, pos2 varchar, pos3 varchar, pos4 varchar, pos5 varchar, pos6 varchar, genkei varchar, yomi varchar, hatsuon varchar) """# sql コマンドを実行し、テーブルを作成するcursor.execute(cmd)# コミットして、データベースに反映させるconnection.commit()cmd = """insert into dic (key, cost, pos1, pos2, pos3, pos4, pos5, pos6, genkei, yomi, hatsuon) values (’若松山’,’3524’,’名詞’,’固有名詞’, ’一般’,’*’,’*’,’*’,’若松山’, ’ワカマツヤマ’, ’ワカマツヤマ’) """# sql コマンド を実行し、データを挿入するcursor.execute(cmd)# test テーブルにあるデータをすべて選択する(select)cursor.execute("select * from dic")# テーブルができたか確認するprint cursor.pp()# 明示的に前の命令(挿入)をロールバックして無効にする。cursor.rollback()# 接続を閉じるconnection.close()ここまででいったん終了。とりあえずテーブルは作成してコミットしたので、テーブルはちゃんと残っているはずなので、これを使う。よけいなテスト用のデータはロールバックしたので残っていないはず。さて、これから ipadic の MeCab 用の csv ファイルから、ガツンと読み込んでやることにする。import sysimport osimport gadfly# データベース名DBDataDir = "C:¥¥GadflyDB¥¥ipadic"DBName = "ipadic"# ipadic の csv ファイルの場所を指定するCSVFile = "C:¥¥Program Files¥¥mecab¥¥dic¥¥ipadic¥¥dic.csv"# データベースはすでに作成されているので、# これからは接続するだけでいいというか、初期化しちゃだめ。connection = gadfly.gadfly(DBName, DBDataDir)cursor = connection.cursor()csvfile = open(CSVFile, ’r’)# コマンドの前半だけ用意するcmd0 = """insert into dic (key, cost, pos1, pos2, pos3, pos4, pos5, pos6, genkei, yomi, hatsuon) values """# カウンタc = 0# 最初の行を読み込む# ちなみに行末の改行(\n)が邪魔なので1文字捨てている。line = csvfile.readline()[:-1]while line: # カンマ区切りのデータをリストに分解 [’見出し’, ’品詞1’, ’品詞2’] line = line.split(’,’) # "(’見出し’, ’品詞1’, ’品詞2’, ...)" という文字列が欲しい。 # のだが面倒なので、タプル(a, b, c...) という形式にリストから # いったん変換して、その表示用の文字列を使ってしまう(^^;; line = tuple(line).__repr__() # コマンドの前半部と読み込んだ行を合体して、 # その行を挿入するための SQL 文を作る cmd = cmd0 + line # sql コマンド を実行し、データを挿入する cursor.execute(cmd) # どのくらいまで進んだか、画面に表示しておく # 1000 ごとに ’.’ を1つ表示しておく c = c + 1 if ((c % 1000) == 0 ): print ’.’, # 次の行を読み込む # ちなみに行末の改行(\n)が邪魔なので1文字捨てている。 line = csvfile.readline()[:-1]# csv 形式の辞書を閉じるcsvfile.close()# テスト用に小さい csv ファイルを最初に作ってテスト# でかいのでそのままやると大変...# cursor.execute("select * from dic")## cursor が示しているポイントから、# データをすべて取り出して(fetchall)、# 変数 x に代入してすべての取り出した行に対して操作を行う。##for x in cursor.fetchall():# print x# とするとデータが多くて大変なので# 確認しないでとりあえず閉じて終わり。connection.commit()connection.close()だいたい、1秒間に100行程度しか処理できない。うーむやっぱり大量のデータを扱うのはつらいってことかもしれない。せいぜい、4桁程度のデータまでかな。MySQL を使って同じことを Python からやってみたが、あっという間に終わった。Gadfly だと2時間以上かかるものが、MySQL だと 10分程度。うーん。ちょっと考えちゃうな。1行ごとにコミットしてみたり、1000行ごとにコミットしてみたり、checkpoint の設定を自動ではなく、手動にしてみたりもしたが、どうあがいても遅い。検索はどうだろう。まあ、やらないでも分かるな・・・。できあがったデータ量も、Gadfly 45MB 程度、MySQL は 30MB 程度と、容量もやっぱり差が出る。ちなみに、元のデータは 26MB 程度なので、MySQL がやっぱり優秀なのだな。検索してもやっぱり、全然速さが違う。うーん、Gadfly はちょっと数十万行とかあつかう場合は、やっぱり厳しいな。インデックスをつけたとしても、そんなに速くならないだろうし(MySQL もインデックスなしで同じようなテーブルで作ったから条件同じだし)。ということで、この用途に対しては Gadfly をあえて使うこともないという、当たり前の結論に達して、MySQL でいいやということになる(笑)。この記事、カテゴリを変更して再登録しようとしたが、文字数制限がきつくなって再登録できないので、後半部を 別の日に入れておく。
2003.03.01
コメント(0)
あぁ、今日で2月も終わりか。あいかわらずさえないな。時間ばかりどんどんたってしまう。生産性最悪最低が続くな・・・。○ 記憶と再生その10 (Pythonで人工無能)だらだらと 10 日目に突入してしまった。次回からは題名変えよう。昨日は Gadfly を動かしてみたが、実際にデータはどこへ行ったのだろうか。ということで、ファイルを開いてみる。C:\GadflyDB のディレクトリにデータを保存することにしたので、そこにどんなファイルができているかを見てみる。そうすると、データベース名に gfd という拡張子がついたファイル TestDic.gfd と、テーブル名に grl という拡張子がついたファイル TEST.grl ができているのを確認できた。うむ、Gadfly の場合、指定したディレクトリにベタにデータベースのファイルが格納されることになるので、データベースごとにディレクトリを作ってやる必要があるのだな。Zope から Gadfly を使う場合も同じなので予想はしていたが。ということで、これは今後気をつけることにしよう。で、ファイルをテキストエディタで開いてみると、バイナリ形式のファイルになっているようだ。TestDic.gfd には、CreateTable とか、ColumnDef とか、VARCHAR などといった文字が見えるので、このファイルに定義の類が入っていることが想像できる。TEST.grl の方も見てみると、やっぱりバイナリ形式のファイルになっていて、0001, test1, 0002, test2 といった文字が見つかることから、データはテーブルごとに、テーブル名のファイルに格納されると想像できる。もっとも Gadfly のソースコードでちゃんと確認すればいいのだけど、とりあえず面倒なので、まあそうなっているのだろうですませる。オープンソースのいいところは、ソースが見たいときはみればいいし、見たいと思わないときは見なくていいということだ(笑)。だいたい、よっぽど何か知りたいとか、改造したいとか思ったときぐらいしか実はソースは見ない。だから進歩ないんだよな(^^;;とりあえず、昨日保存したデータを Gadfly を使ってプログラム上から確認してみることにする。# Gadfly を使えるようにモジュールをインポートする。import gadfly## もう一度、同じディレクトリを指定。DBDIR = "C:\\GadflyDB"# Gadfly への接続用にオブジェクトを作成し、# connection という変数に代入する。# 作成の時は、ここは gadfly.gadfly() としておいて# その後、connection.startup("testdic", DBDataDir)# と初期化してあげていたが、初期化が必要なのは1回だけ。# 次回の接続からは次のように、gadfly のオブジェクトを# 作成するときに、指定してやる。# というか、ここでまた初期化してしまうとデータが消えて# しまうので、よくよく注意すること。# ここは fool proof になるように、既存のデータベースが# あるときに初期化しようとしたらエラーを出すとか改造しようかな・・・connection = gadfly.gadfly("testdic", DBDIR)# カーソルオブジェクトを作成し、# cursor という変数に代入する。cursor = connection.cursor()# test テーブルにあるデータをすべて選択する(select)cursor.execute("select * from TEST")# cursor が示しているポイントから、# データをすべて取り出して(fetchall)、# 変数 x に代入してすべての取り出した行に対して操作を行う。for x in cursor.fetchall(): # つまり、その行(x) を表示する。 print xという感じで、接続の仕方が違うだけで、あとは昨日と同じ。で、基本的な使い方がわかったので、いよいよ明日以降で、IPADIC を読み込んでみることにする。さて、Gadfly はどの程度のパフォーマンスを見せてくれるのだろうか、楽しみ。PostgreSQL や MySQL とか使ってもいいのだけど、データベースのプロセス雨後かしっぱなしになるので、けっこうじゃまくさいのね。Gadfly だったら必要なときに必要なプログラムを起動したときだけ使うことができるから、まっとうに動くんであれば、Gadfly を使っちゃいたいわけ。インストールも簡単だし。あと、ちょっと興味ある機能もあるのだけど、それはそのうちに。うむ、そういえば、日本語の問題はどうかなとかあるな。一応、昨日ちょこっと動かした範囲では大丈夫だったけど。Zope では EUC の環境しか試したことないので、SJIS でちゃんと動くかどうか、実はよくわかっていない(^^;; 最悪、EUC-JP で動かして・・・、入出力で文字変換入れるから、無用に遅くなって嫌なのだけど。
2003.02.28
コメント(0)
2003年4月7日、鉄腕アトムの誕生日にはどれくらい、それにちなんだ催しが開かれるのだろう。いろんな会社がこれにあわせてロボットの展示や発表をするんだろうか。前にも書いたかもしれないが、やっぱりロボット産業は、日本の21世紀を担う産業になるだろうな。でもって、ロボットがたくさんの人の職を奪うことも事実。数百万円で買えるロボットであれば、人間を雇うよりよいよね、という職業がたくさんあるから。実際のところ人型でないロボットというのは、いたるところにあるわけだし。自動販売機みたいなものから、自動券売機、自動改札機、駐車場のゲートなんか、昔は人がやっていたようなものが、どんどんロボットに置き換わっている。工場だってそうだし。おもしろいのは、自動化されているようで自動化されず人がやっていることもたくさんあることかな。オートメーション化されて作られていると思えるようなものが、実は人間がやっていたりとか。今のところ、同じことをするのであれば、人間の方がはるかに柔軟性に富み、また、コスト的に安いというものがたくさんあるが、ロボットが高機能で柔軟になり、価格が下がったときには、いろんな仕事が人間からロボットにまた置き換わっていくだろう。そうすると、だんだんと単純労働ができなくなってしまう。これは、単純労働に向いている人にとってはつらいことだ。そうすると、職業をもっと多様化していかなければならないわけだけど、まだ、十分な多様化した職業がない。だいたい職自体が足りないのだから・・・。スーパーのレジなんかは、200年たたないうちに、人間からロボットに変わるんじゃないだろうか(というか、一種のセルフで済むようになる)。そうすると、ますます広い意味での娯楽産業を発展させていかないとならないだろう。大学なんかも、一種の娯楽産業に位置づけてもいいだろう。知的生産レベルの娯楽から、無為の娯楽まで、幅広い娯楽が必要とされるし、また貧富の差がよけいに広がっていくから、なんとか金持ちが喜んで浪費する仕組みも作らないといけない(笑)。金持ちから搾取せよと。税金ではなく楽しく使って頂けるようにね。○ 記憶と再生その9 (Pythonで人工無能)一昨日、Python の簡易 RDBMS である Gadfly をインストールしたが、一つ忘れていたことがある。gadfly-1.0.0\kjbuckets に Windows 用のバイナリが入っていた。ということで 2.2 の下にある kjbuckets.pyd を C:\python22jp\lib\site-packages に放り込む。これで kjbukets が C で書かれたものを使うようになるので高速化される。ちなみに、pyd の拡張子がついたものは、python 用にコンパイルされた C や C++ などで書かれてコンパイルされた拡張モジュール。端的に言えば、DLL 。で、とりあえず、準備ができたので、ちょっと使い始めてみることにする。ちなみに ここに日本語訳があった。一般には実用性がないと言われる Gadfly だが、最新のバージョンは、新しく書き直されたもので、限られた用途で使用する分には実用に耐えるようなものになっているのではないかと思う(これから試してみないとわからないけどね)。a simple in-memory SQL implementation like Gadfly may be useful for serious work. と書かれている。このトーンが昔に比べて変わっているのだ。昔は、どちらかといえば、実験的な実装だから本格的に使うには別の RDBMS を使ってねというトーンがもっと強かったような気がする。Gadfly のメインモジュールは、Python DB-SIG で議論された Greg Stein の Python Database API に、まだ、全部をちゃんと実装しているわけではないが忠実に従おうとしている。データベースへのアクセスは1プロセスのみが行える方式で、複数のクライアントが同時にアクセスするような利用方法はできないが、一応、Gadfly サーバプロセスを動かしておいて、これと通信する形であれば、データベースにアクセスするのは1つのプロセスだけということになるので、複数のプロセスからアクセスさせることも可能になるようだ。とはいえ、負荷が高いような場合はつらいみたいだけど。で、python を起動したら、次のようにしてみる。# とりあえず、 DB を C:\\GadflyDB というディレクトリに# 保存することにする。もし、このディレクトリが存在しない# 場合には、ディレクトリを作成し、作成できない場合は# 終了することにする。DBDataDir = "C:\\GadflyDB"import osif not os.path.isdir(DBDataDir): try: os.mkdir(DBDataDir) except: print "ディレクトリが作成できません。" os.exit# Gadfly を使えるようにモジュールをインポートする。import gadfly# Gadfly への接続用にオブジェクトを作成し、# connection という変数に代入する。connection = gadfly.gadfly()# DBDIR (C:\GadflyDB)にある# TestDic というデータベースの使用を開始する。# もし、存在しない場合は、勝手に新規に作成される。connection.startup("testdic", DBDataDir)# カーソルオブジェクトを作成し、# cursor という変数に代入する。cursor = connection.cursor()# test という名前の table を作成(create)する。# フィールドは、id (整数型の id と、可変長文字列(varchar) の namecursor.execute("create table TEST (id integer, name varchar)")# test テーブルにデータを挿入(insert)する# 挿入するフィールドは、id と name で、値はそれぞれ 1 と ’テスト’print "(1, ’test1’) と (2, ’test2’) を挿入します。"cursor.execute("insert into TEST (id, name) values (1, ’test1’)")cursor.execute("insert into TEST (id, name) values (2, ’test2’)")# test テーブルにあるデータをすべて選択する(select)cursor.execute("select * from TEST")# cursor が示しているポイントから、# データをすべて取り出して(fetchall)、# 変数 x に代入してすべての取り出した行に対して操作を行う。print "\n挿入後に取り出したデータ"for x in cursor.fetchall(): # つまり、その行(x) を表示する。 print x# この接続で実行された操作をコミットする。# 操作結果を実際に DB に反映するには commit しなければならない。#print "\nトランザクションをコミットします。"connection.commit()# 今度は、id が 1 のレコード(つまり、今挿入した行) を更新する。# 変更後の name には ’変更済み’ という値を設定する。print "\n id が 1 の行を ’changed’ に変更します。"cursor.execute("update TEST set name=’changed’ where id = 1")# test テーブルにあるデータをすべて選択するcursor.execute("select * from TEST")# cursor が示しているポイントから、# データをすべて取り出して(fetchall)、# 変数 x に代入してすべての取り出した行に対して操作を行う。print "\n変更後に取り出したデータ"for x in cursor.fetchall(): print x# カーソルの内容を表示するprint "\nカーソルの内容"print cursor.pp()# トランザクションがちゃんとサポートしているところが# ポイントなのだ。いったんテーブルに操作を加えたあと# でもコミット(捜査結果を反映させる)前であれば、# 前のコミットまでさかのぼって、テーブル内容を元に# 戻すことができる。すばらしい。本格的なのだ。connection.rollback()print "\nトランザクションを中断して、前にコミットした時点に戻ります。"# test テーブルにあるデータをすべて選択するcursor.execute("select * from TEST")# カーソルの内容を表示するprint "\nカーソルの内容"print cursor.pp()connection.close()print "\nデータベースを閉じます"どうやら一応、使えるみたいな感じだな。出力結果は次のようになる。(1, ’test1’) と (2, ’test2’) を挿入します。挿入後に取り出したデータ(’0001’, ’test1’)(’0002’, ’test2’)トランザクションをコミットします。 id が 1 の行を ’changed’ に変更します。変更後に取り出したデータ(’0001’, ’test1’)(’0002’, ’test2’)カーソルの内容ID | NAME ============0001 | test10002 | test2トランザクションを中断して、前にコミットした時点に戻ります。カーソルの内容ID | NAME ============0001 | test10002 | test2データベースを閉じます
2003.02.27
コメント(0)
ちょっといいことと、ちょっと悪いことがあった日だった。詳細省略。○ 記憶と再生その8 (Pythonで人工無能)かなりしつこいこのシリーズなのだ。今日は、"GadflyB5: SQL Relational Database in Python":http://gadfly.sourceforge.net/ を見てみる。Gadfly は Python 用の SQL Relational Database の一つで、アプリケーションサーバ Zope についてくるので Zope ユーザにはおなじみのもの。でも、これは何も Zope で使わなければいけないというものでもなくて、単体でもちゃんと動くので試してみるのだ。MySQL とか PostgreSQL とか高速でよいフリーの RDBMS があるのに(これらも Python から使える)、あえて Gadfly を使うのはなぜかと言えば、あんまり意味はない。以前、ちょっと試しに使ってみたことはあるが、まともな用途の RDBMS として使うのには向いていないと一般に言われているので、Gadfly をあえて覚える必要もあるまいと思って、ちょこっと動かしてやめてしまったから。でも、これを機会にちょっとどの程度使いものになるのか見てみようかなという単純な理由。"とりあえずまずここからダウンロード Gadfly 1.0.0.tar.gz":https://sourceforge.net/project/showfiles.php?group_id=662 する。うっ、いやな予感。まあいいや。とにかくダウンロードしたら、ファイルを解凍し、解凍したディレクトリに DOS プロンプト上で移動する(work にファイルを解凍したとする)。C:\> CD \workC:\work\gadfly-1.0.0>python run_testsnot running kjbuckets C module test..................................................................----------------------------------------------------------------------Ran 66 tests in 22.552sOKkjbuckets C module が RedHat 用のバイナリしかついていないようなので、動かないのでパスするが、それ以外に 66 のテストが行われて 22.552 秒で終了。で、test ディレクトリの中にあるソースを見れば、どういう風に使うかという例にもなってしまうが、これはとりあえず脇においておく。テストが OK のようなので、実際にインストールしてみる。C:\work\gadfly-1.0.0>python setup.py installとすると、c:\python22jp\Lib\site-packages\gadfly にモジュールがインストールされる。今日はここまで。
2003.02.25
コメント(0)
このところ、日記に濃い内容を書きすぎて疲れた(笑)。次は ZODB を使ってあれこれしようと思っていたが、あまりに疲れるので、ちょっと休憩して、別のところを進めることにした。で、次は何をというと、形態素解析用の辞書を鍛えたり観察するのに便利なように、MeCab の辞書(dic.csv)を RDBMS にぶち込んでしまおうかと思う。ぜんぜん軽くなってない。まあいいや (^^;; 人名だけ取り出して表示したりだとかしたいのね。IPADIC って「カールスモーキー石井」だとか、「ラサール石井」だとか「ビートたけし」や「グレート義太夫」もあるし。でも「ビートきよし」はないと(笑)。でも「グラン浜田」とか載ってないし、「獣神サンダーライガー」なんて載ってないのだ。「ジャイアント馬場」や「アントニオ猪木」でさえない。プロレスラーには冷たいのね。こうゆう中途半端になるやつって(人を指しているのではなく、時代によって入れ替わりが激しい芸能人など)を登録するかどうかってのは難しいところがあるかもしれない。経済 ケイザイ 経済 名詞-一般学 ガク 学 名詞-接尾-一般みたいな学問は、「xx」「学」と一般になるのかと思いきや、「哲学」「地学」みたいなものは、一語になる。こういうのはまさに処理の都合という登録なのだろうな。xxx 理論はに関しても「相対性理論」は一語になる。有名じゃない理論は「xx」「理論」となるわけだし。でも、特殊/相対性理論と一般/相対性理論は一語にはなっていない。ふーむ。特殊/相対性/理論、一般/相対性/理論となっていた方が、登録されていないものとのバランスがとれるんだけどな。ということで、grep なんかで探してもいいのだが、あえて python から、このへんをマイニングできるようにしてみようかなと。
2003.02.23
コメント(0)
『WebDAV入門』(ISBN4-88309-220-8) を読んだ。けっこう誰でも読めるような感じの読み物風になっていて、それでいてよくわからないノリがある。入門向けにはちょうどよいかもしれない。ジャストシステムは出版部を持っているのだな。○ 記憶と再生その7 (Pythonで人工無能)まだまだしつこく続く。このシリーズ。うーん。だって奥が深いんだものね。といいつつ最初から、ここが到達点という ZODB にやっときた。昨日 pickle を使ったときに、読み込みと書き込みが独立した感じになっていて、やっぱり保存と読み込みを意識しなければいけないような感じで、ちょっとスマートじゃないなという感じだった。実は。それに、これっていちいちメモリ上に全部読み込んじゃってるんじゃないの?ってことはデータが大きくなれば、それを全部読み込んじゃ、はき出してと繰り返しになったら、とんでもないし、開きっぱなしでどんどん書き込んで、途中で保存する前に落ちてしまったら、ぜんぶ結果が消えてしまって、やっぱりスマートじゃない。# 書き込み時>>> p = pickle.Pickler(open(’pickledata’, ’w’))>>> p.dump(dic)# 読み込み時>>> u = pickle.Unpickler(open(’pickledata’, ’r’))>>> dic = u.load()てなことで、やっぱり ZODB にチャレンジということになる。まず基本として、Zope Corporation の Jim Fulton 氏の Introduction to the Zope Object Database と A.M. Kuchling氏の ZODB & ZEO Introduction を起点として ZODB について見ていくことにした。まずはざーっと流し読み。終わり。ZODB のアーキテクチャは、次のようなレイヤを持つようだ。でもって、上位のレイヤはマルチスレッドだけれども、トランザクションをしっかり管理していて、実際に DB にアクセスできるのは1つのスレッドだけになるように作られている。オブジェクトはスレッドごとに持ち、トランザクションでコミットする時点でコンフリクトが発生していれば ConflictError を返すような感じ。でもって、非常に頻繁に書き込みが行われるようなアプリケーションでは、ちょっと弱いところがあるみたい。つうか、RDBMS でアプリケーションを作ったとしても、コンフリクトは発生するわけだし、まあ、トランザクションが長ければ長いほど、コンフリクトが発生しがちになるし、しょうがないな。+--------------------+| App +-----------|| +-----|Transaction|+--|-+ +-----------+| DB | Connection |+--------------------+| Storage Interface |+--------------------+んと、このへんは、やっぱりRDBMS の方がトランザクションがしっかりしていて、ロールバックもしっかりしているし、ReadOnly のアクセスや DirtyRead の類をきっちり意図的にできるから RDBMS の方が問題がなさそうに思えるだけで、本質的には変わらない共通の問題はあるような気がする。Zope なんかで変なことが起こるとしたら、トランザクションを通常気にせずにアプリケーションを作っている人たちが作ったものが原因じゃないかと思う。ああいうものでなく、きっちりすべて自分でトランザクションを意識して制御できるようなアプリケーションであれば、それほど信頼性が低いというような感じではない。RDBMS は、いわゆる表の形になるものについては効率的に扱うことができるが、そうではない場合は面倒になる。で、ZODB は Zope Object Database っていうぐらいだからオブジェクトを格納するのに適しているはずだな。で、まあとりあえず、Sourceforge のZODB and ZEO に行って、ZODB3 をダウンロードしようと思ったが、Windows の環境でやろうと思うので、コンパイルするのが面倒だし Download ZODB3-3.2a1.win32-py2.2.exe (676550 bytes)をダウンロードすることにした。インストールはダブルクリックでちょいちょいでインストール完了。C:> pythonPython 2.2.2(SJIS enhanced) (#37, Oct 15 2002, 15:30:03) [MSC 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import ZODBimport ZODB で読み込むと、カラカラからと、読み込んで(2,3数秒かかった)。で、上記ページのサンプルを動かしてみようと思ったが、ZODB が変わったせいか動かせない・・・。うーむ、やられた。ということで今日はここまで。
2003.02.22
コメント(0)
三菱電機、言葉の関連性を学習する概念抽出型文書知識サーバーを開発 (japaninternet.com) の記事を読む。このところ、この手の自然言語処理を使った製品があれこれ出てくるようになってきた。自然言語処理の製品のピークはたぶん2007年~2010年あたりになると思うので、ボチボチとそこそこのものが出てきているのかもしれない。何を根拠に 2007年~2010年かといわれると、まあ、あんまり根拠はないが、開発サイクルを考えるとそういうもんでしょと思うわけ。1990年代にかなり実用の基礎となりそうな研究が出ているので、それが商品サイクルに乗ってくるのに10年程度かかると。で、とりあえず上記の記事を読んでいて「レンディションフリー文書解析技術」というところに目がとまった。本題じゃないところね。要するに文字認識の話なんだろうが、この分野はかなりのレベルに達しているのかな。類義語辞書を自動作成っていうのもおもしろい。「ピッチ」と「PHS」と「ケータイ」と「低料金」が関連語になるのか。ふーん。で、結局どうすんだろうな。膨大な情報を。分類できればそれはそれで役に立つんだろうが、そこからいかに役立つ情報を引っ張り出すか。その方が感心があるな。Google の場合、リンクの関連から重要性を判断するということになるが、たとえば自治体などで資料の重要性をどう判断するか。んー、重要文書って書いてあるやつ。丸秘って書いてあるやつ。そういうのがいわゆるページランクの高いものに相当すると。で周辺の文書があるし、書類があると。お役所用の Google って感じね。いや、お役所だけでなく、会社の書類とかも同じことだろう。あと、プレスリリースの位置づけとか考慮して。うむ、そうやって考えてみると、Google のように巨大なインターネットを相手にしたものから、今度は企業レベルに検索技術が落ちていくということだな。で、その後は個人のレベルと。個人のレベルもそうやって考えてみると見えてくるわな。3~5年でかなり実用的なものが作れるだろう。ふーむ。なるほどね。もっとも、個人の生活がそこに追従してくるのにはもっと時間がかかるだろうな。ちなみに、記事にはぜんぜんそんなところまで書いてなくて、製品の紹介だけ。『銀河英雄伝説』の DVD が届いたが、PS2 が意地悪して DVD を再生してくれないので見ることができない。CD-ROM で音楽は OK だし、ゲームもできるし、って確認するためにゲームしちゃったじゃん。よけいなことを・・・。○ 記憶と再生 その6(Python で人工無能)さて、けっこうくどくど続いているこの記憶と再生だが、まだ続くぞ。今日こそは pickle なのだ。そういえば、近所に食料雑貨が売っている店があって、ピクルスが何種類もおいてあるんだよな。小さいのから大きいのまで。あと、一般的なキュウリだけじゃなくて、ブロッコリーとかも入っているやつがある。なかなかうまいのだけど、やっぱりキュウリの酢漬けにしたやつが一番好きだ。と書いていると、また今日も力尽きて本題にたどり着けなくなるのでいかん。pickle には、Python で書かれた pickle と C で書かれた cPickle の2種類がある。で、単純に考えれば、Python で書かれた pickle より C で書かれた cPickle の方が早い。ただし、長所と短所が同居している。だからこそ、Python 版の方も残っている。ウェブアプリケーションサーバの Zope を作っている Jim Fulton が cPickle は書いたらしい。Zope の ZODB というオブジェクト指向のデータベースは、要するに cPickle の化けもんということになるんだろうな。むちゃな・・・。で、dbm のときに話を出したが、キーになれるのが dbm でも gdbm でも bsddb でも、文字列だけであると。文字列ということは、シリアライズ(直列化、あるいは真っ平らにフラットニング)しないといけないということなのだな。で、このシリアライズが pickle にする=ピクル化の基本になるようだ。で、シリアライズしたものを元に戻すのが非ピクル化と。酢漬けにした場合は、どう洗っても元に戻らないのだけど、Python オブジェクトの場合は、漬け物にしても、ちゃんとその後、元に戻せるので便利なわけだ。このpickle化する処理に使われるのが Pickle というオブジェクトと、Unpickler というオブジェクト。端的に言えば、漬け物作成器というところなのかな。ピクルスが作りたければ、オブジェクトを Pickler に入れてやれば、ぽんと出てくる。いったん漬け物にしてしまったオブジェクトも Unpickler にいれてやれば元にもどる。構文は、Pickler(file [, bin]) 。つまり、Pickler(f) とすれば、Pickler オブジェクトが一つ作成される。入れ物を指定して、漬け物器をつくるということだな。で、p = Pickler(f) で、漬け物器を変数に割り当てておけばよいと。bin を指定した場合にはバイナリファイルになる。テキストファイルよりバイナリファイルの方が効率はよいが、テキストファイルになっていれば、あとでファイルをエディタで開いて強引に修正することもできるし(笑)、とりあえず、テキストファイルにしておこう。で、注意は、file のところはファイル名ではなくて、ファイルオブジェクトじゃなきゃいけないので、あらかじめ f = open(’pickledata’, ’w’) としてファイルオブジェクトを開く必要がある。で、pickle 化したものを取り出すには、Unpickler を作成してやると。構文は、Unpickler(file) で、テキストかバイナリかは指定する必要がない。勝手にファイル形式から判断してくれる。使うときには u = Unpickler(f) とすれば漬け物からの取り出し器ができあがる。でやっぱり、f = open(’pickledata’, ’r’) でファイルを開いておく必要がある。とりあえず使ってみることにする。# まず pickle モジュールを読み込んで使えるようにする。>>> import pickle# ファイルを書き込み用にファイルオブジェクトを作る。f = open(’pickledata’, ’w’)# Pickler オブジェクトを生成する。# 作るときは、ピクル・ピクラーとおまじない>>> p = pickle.Pickler(f)# 試しに入れるためのデータを作るために、前に作ったクラスを# また使い回す(笑)>>> class testdic: def __init__(self): self.dic = {} def setValue(self, key, val): self.dic[key] = val def getValue(self, key): return self.dic[key]# インスタンスを生成して、dic にセット>>> dic = testdic()# キーに対応する値を登録してやる>>> dic.setValue(’俺’, ’私’)>>> dic.setValue(’僕’, ’私’)# 試しに値を見てみる>>> print dic.getValue(’俺’)>>> print dic.getValue(’僕’)# 両方とも「私」が返る# 作った test用辞書クラスのインスタンスを保存>>> p.dump(dic)# ファイルを閉じる>>> f.close()ふむ、簡単だ。ファイルをテキストエディタで開いてみる。そうすると、次のような感じでテキストファイルに判読可能な形で記憶されているのが確認できる。(i__main__testdicp0(dp1S’dic’p2(dp3S’僕’p4S’私’p5sS’俺’p6S’私’p7ssb.いったん、環境を閉じてオブジェクトが消えてしまった状態にしてから、もう一度 python を起動してから、今度は読み込んでみよう。# まず pickle モジュールを読み込んで使えるようにする。>>> import pickle# ファイルを読み込み用にファイルオブジェクトを作る。>>> f = open(’pickledata’, ’r’)# 読み込み用は、ピクル・アンピクラーのおまじない>>> u = pickle.Unpickler(f)# アンピクラーを使ってファイルから酢漬けのオブジェクトを取り出す>>> dic = u.load()File "c:python22jplibpickle.py", line 824, in find_class klass = getattr(mod, name)AttributeError: ’module’ object has no attribute ’testdic’うむうむ。ここで問題発生。クラスの定義自体は保存されていないから、取り出すことができないのだ。しょうがない、クラスの定義を再度してみよう。いや、データファイルを開いたときにわかっていたでしょうに(笑)。# いったんファイルを閉じておく>>> f.close()# クラスを定義>>> class testdic: def __init__(self): self.dic = {} def setValue(self, key, val): self.dic[key] = val def getValue(self, key): return self.dic[key]ファイルを開いて、#>>> f = open(’pickledata’, ’r’)# 読み込み用は、ピクル・アンピクラーのおまじない>>> u = pickle.Unpickler(f)# としておいてから、再度アンピクルに挑戦。>>> dic = u.load()# 今度は成功するので試してみる>>> dic.getValue(’俺’)’私’>>> dic.getValue(’僕’)’私’めでたし、めでたしなのであった。pickle の場合、クラスインスタンスを保存はできるけれど、クラス定義そのものは保存されない。これは、実は非常に便利といえば便利なことなのだ。クラス定義とインスタンスのデータが分離できるということだから。クラス定義を変更しても、データは影響を受けないわけ。属性を増やしたとしても、読み込むときにデータが読み込まれないだけだし、メソッドを追加したとしてもまったく問題はない。削除しちゃったときはそれはそれでまた打つ手があるということだし。で、非常に便利に使えそうだということがこれでわかった。だが、dump と load という点において、ほとんど同じようなことをこの数日してるわけで、進歩がないといえば進歩がないという話もあるという・・・。まあ、それはそれでよいのだ。pickle はもっと奥が深いが、とりあえずこの辺にしておこう。
2003.02.21
コメント(0)
全268件 (268件中 151-200件目)