傀儡師の館.Python

傀儡師の館.Python

PR

×

Calendar

Keyword Search

▼キーワード検索

Archives

2026.05
2026.04
2026.03
2026.02
2026.01
2025.12
2025.11
2025.10
2025.09
2025.08

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2003.01.04
XML
カテゴリ: ことばの処理
去年のアクセスログを眺めた。全部はとってはいないのだけど、時々保存していたのだ。で、co.jp と ac.jp を見ていると、うーん、やっぱりこの分野はまだ限られた範囲の人しか興味をもっていないのかなーという感じだった。つまり、ドメイン名を見るだけで、あぁ、あそこかと分かってしまうようなものが多い。CMS にしても、自然言語処理もいまいちマイナーなのね。Googleで「人工無能 Python」で検索すれば、このページがトップに出てくるけど、そういう探し方をする人はいないみたいだ(笑)。だいたいできあがってもいないものがトップに来るのもヘンだな。「人工無能 Python Eliza」までいったら、ほとんど全滅だものなー。日本以外のサイトだと「artificial intelligence Python Eliza」なら、287件、「artificial intelligence Python」にいたっては、67100件だよ。「人工知能 Python」だとわずか 197件。「人工知能」が61,900件。「artificial intelligence」が1,540,000件。日本だと人工知能の検索に比べて人工知能 + Python が0.3%。

全ウェブだと 4.35%。「人工知能 Java」が 5,400件。「人工知能 Perl」1,250件、「人工知能 lisp」が1,710件、「人工知能 prolog」が1,490件。「人工知能 scheme」425件。「人工知能 smalltalk」419件。そうすると、人工知能関連では、Java → Lisp → Prolog → scheme → smalltalk → Python ということか。なんていう検索はある意味当てにならないのだな。「人工知能 COBOL」だと 640件なのだ(爆笑. COBOL は主として事務処理系で使われてきた言語)。コンピュータの歴史みたいな話のページに両方出てくる可能性が高いからこういうことになるんだろう。とはいえ、Java がこの分野でかなり重要な位置を占めるようになってきたことだけは間違いないだろう。

日本語のページを対象に言語ごとに検索してみると、Java は 86,200件、Lisp 49,700件、Python 60,100件、Scheme 29,900件、Prolog 19,000件、SmallTalk 24,300件、COBOL 43,300件、Fortran 42,600件。さて、ここで Perl 389,000、Ruby 289,000件だ。やっぱりそれぞれ宝石の名前とかぶるから桁違いになる。Python は蛇のパイソンともダブるけどやっぱりああいうものを趣味とする人は少ないだろうし、モンティーパイソンの Python も熱狂的な人はいるだろうけど、やはり限られている。直接関係ないページを省くようなアルゴリズムで件数を計算できるとおもしろいのだがな。まあ、プログラミング固有の単語を入れてやれば、もう少しちゃんと分かるだろう。「def python」で検索すれば、まあ、よほどのことがない限りそのページはプログラミング言語としての python だろうし、「java buffer」で検索すれば、よほどのことがないかぎり Java コーヒーにはならないだろうし。ということで検索結果のページ自体の内容を簡単にフィルターしていけば、ほんとは、もう少しまともな結果が得られるだろうがまあいいや。あと、ジェネラルな記述を消去していくとかね。

あ、やっぱりもう少しだけ。「人工無能 Java」が 2,430件。「人工無能 Perl」が 1,720件。なんにせよ、Java の普及度はかなり高くなっているみたいだ。[人工知能」61900件、「人工無能」14,400件。「人口無能」2,990件。うーむ、人口無能はやっぱり人工知能にはかなわないのだなー。こうやって、継続的にときどき、検索件数を記録しておいて、たまに推移を見ると面白いことが分かるだろう。ちなみに Zope だと日本語サイトで 53,100件、Python が 60,100件。全ウェブで、Zope が 11,200,000、Python が 4,840,000件。Java が 31,900,000件。JDK 92,600件、JRE 255,000件。ふーん、Monty Python と、蛇の Python、ギリシャ神話の Python、魚の Zope が果たしている役割は、けっこう大きいということだろうか。Monty Python を排除しようとして Monty があったら排斥しようとしても、それこそ Python を作った Guido van Rossum 氏のページまで省かれてしまうだろうし、Zope の開発プロセスは fishbowl プロセスとか言われているから、なかなか排除するのが難しいのだな。そうすると、やっぱりリンクもある程度追わないと、重要なページを削除してしまうことになる。

さてさて、とにかく今年もマイナーの楽しみをじっくり味わうことにしよう。

○ 形態素解析(MeCab)の呼び出しを関数に (Python で人工無能)

前回、関数の作り方をちょっとやったので、今回は MeCab を呼び出しているところを関数化してしまうことにする。で、さっそく次のようにしてみる。


def keitaiso_kaiseki(s):
  from popen2 import popen2
)
  fo.write(s)
  fo.close()
  klist = fi.read()
  fi.close()
  sentence = []
  for gyou in klist.split( ’¥n’ ):
    keitaiso = gyou.split( ’¥t’ )
    dic = {}

      dic[ ’表層形’ ]= keitaiso[0]
      n = keitaiso[1].split(’,’)
      dic[ ’品詞’ ]=n[0]
’品詞細分類1’ ]=n[1]
      dic[ ’品詞細分類2’ ]=n[2]
      dic[ ’品詞細分類3’ ]=n[3]
      dic[ ’活用形’ ]=n[4]
      dic[ ’活用型’ ]=n[5]
      dic[ ’原形’ ]=n[6]
      dic[ ’読み’ ]=n[7]
      dic[ ’発音’ ]=n[8]
      sentence.append(dic)

  return sentence

で、これが保存されているファイルを読み込んだら、次のようにしてみる。作成した keitaiso_kaiseki 関数に解析させたい文字列を渡してやって、変数 result に結果を保存する。

>>> result = keitaiso_kaiseki( "今日はあなたに会えてよかった。" )

そうしたら、今度は、解析結果から一部を1行ずつ(形態素の1つ1つを取り出しながら、ディクショナリ形式で保存されている情報を引っ張り出して表示してやる。

>>> for k in result :
  print k[’原形’], k[’品詞’], k[’活用形’], k[’活用型’]

今日 名詞 * *
は 助詞 * *
あなた 名詞 * *
に 助詞 * *
会える 動詞 一段 連用形
て 助詞 * *
よい 形容詞 形容詞・アウオ段 連用タ接続
た 助動詞 特殊・タ 基本形
。 記号 * *


実際の結果(result)の中身は、こんな感じになっている。
>>> print result

[{’品詞細分類1’: ’副詞可能’, ’原形’: ’今日’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’*’, ’表層形’: ’今日’, ’読み’: ’キョウ’, ’活用型’: ’*’, ’品詞’: ’名詞’, ’発音’: ’キョー’, ’活用形’: ’*’}, {’品詞細分類1’: ’係助詞’, ’原形’: ’は’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’*’, ’表層形’: ’は’, ’読み’: ’ハ’, ’活用型’: ’*’, ’品詞’: ’助詞’, ’発音’: ’ワ’, ’活用形’: ’*’}, {’品詞細分類1’: ’代名詞’, ’原形’: ’あなた’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’一般’, ’表層形’: ’あなた’, ’読み’: ’アナタ’, ’活用型’: ’*’, ’品詞’: ’名詞’, ’発音’: ’アナタ’, ’活用形’: ’*’}, {’品詞細分類1’: ’格助詞’, ’原形’: ’に’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’一般’, ’表層形’: ’に’, ’読み’: ’ニ’, ’活用型’: ’*’, ’品詞’: ’助詞’, ’発音’: ’ニ’, ’活用形’: ’*’}, {’品詞細分類1’: ’自立’, ’原形’: ’会える’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’*’, ’表層形’: ’会え’, ’読み’: ’アエ’, ’活用型’: ’連用形’, ’品詞’: ’動詞’, ’発音’: ’アエ’, ’活用形’: ’一段’}, {’品詞細分類1’: ’接続助詞’, ’原形’: ’て’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’*’, ’表層形’: ’て’, ’読み’: ’テ’, ’活用型’: ’*’, ’品詞’: ’助詞’, ’発音’: ’テ’, ’活用形’: ’*’}, {’品詞細分類1’: ’非自立’, ’原形’: ’よい’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’*’, ’表層形’: ’よかっ’, ’読み’: ’ヨカッ’, ’活用型’: ’連用タ接続’, ’品詞’: ’形容詞’, ’発音’: ’ヨカッ’, ’活用形’: ’形容詞・アウオ段’}, {’品詞細分類1’: ’*’, ’原形’: ’た’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’*’, ’表層形’: ’た’, ’読み’: ’タ’, ’活用型’: ’基本形’, ’品詞’: ’助動詞’, ’発音’: ’タ’, ’活用形’: ’特殊・タ’}, {’品詞細分類1’: ’句点’, ’原形’: ’。’, ’品詞細分類3’: ’*’, ’品詞細分類2’: ’*’, ’表層形’: ’。’, ’読み’: ’。’, ’活用型’: ’*’, ’品詞’: ’記号’, ’発音’: ’。’, ’活用形’: ’*’}]


とりあえず、これで MeCab を使った形態素解析を Python からできるようになった。ちなみに、上記のリストは、楽天にアップロードするために全角半角が入り混じっているのでそのままだと動かない(全角の記号はすべて半角に直してやる必要があるし、スペースも全角で入っているので注意)。

まあ、本当はオブジェクト指向的に作り直してやった方がよいし、そもそもエラー処理ぐらい入れんかいという話もある。ちゃんと抽象化してインターフェイスもきっちり分けて、MeCab と Chasen と Juman を簡単に切り替えられるようにとかした方がいいだろうし。なんていうのは、考えないことにする。とりあえず動きゃいいんだよ。そもそも、MeCab.exe のパスだって埋め込んでるレベルなんだから、Windows でしか動かんじゃない(笑)。

で、次は、いよいよ、ここで得られた情報を使って何かしてみよう。かと思いきや、やっぱり形態素レベルで分かち書きされているだけより文節にちゃんと分かれていた方が使いやすいので CaboCha/南瓜 を使って係り受け解析までやってからの方がいいな・・・。と誘惑に駆られる。たが、モデル作成に毎日新聞のデータを使っているので研究目的以外での利用は原則として認められないということだ。遊びに使うとあとで怖いので、CaboCha の方は手をつけないことにする。ブツブツブツ(以下、省略)。





お気に入りの記事を「いいね!」で応援しよう

Last updated  2006.09.13 06:32:25
コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: