ようこそ!yohasebe.com は長谷部陽一郎が言語学の研究のこと、プログラミングのこと、等々について思いつくままに書くサイトです。その他、大学での担当授業に関する連絡や、ソフトウェアの公開も行っています。どうぞごゆっくり。

RSyntaxTreeに機能追加

Posted by Yoichiro Hasebe Mon, 03 Nov 2008 12:32:00 GMT

RSyntaxTree というツールを公開しています。しばらく前に ミシガン州立大の Dr. Alan Munn から「こんなことできないか」というリクエストがあり、「多分できる」と返事をしました。要するに、今までは左側のような出力しかできなかったのを、右のように出力できるようにしてほしいとのこと。

約束した以上もういい加減やらないと、と思って、本日の授業が終わってから取りかかりましたが、1年以上前に自分が書いたコードはもはや意味不明。適当にいじくっているうちに、何とかできました。新バージョンでは、ツリーの末端のノードにつながる枝のシェイプを triangle, vertical-bar, nothing の3種類から選べるようになっています。

しかし、そもそもなぜこのような機能が必要だったのかは不明(ご本人に聞いていなかった)。単なる好み?

サーバメンテナンス

Posted by Yoichiro Hasebe Mon, 03 Nov 2008 08:38:00 GMT

先週末、サーバのメンテナンスを行いました。その結果、1つ前のエントリーが消えてしまいましたが、単に「最近ブログ書いてないなー」という内容だったので問題ないでしょう。

金曜日にサイト全体のレスポンスが異様に悪くなりました。ソフトウェア的な不具合はどこにも見つからなかったので、ハードウェアかと思ってNICを交換したものの、それでも改善されず。いろいろ調べてみると、参照していたDNSに問題があったようで、変更したら直りました。

ついでなので、Rubyを最新バージョンに上げたり、調子に乗って色々やったのですが、そうすると今度はブログ・エンジンのTypoが動かなくなって、これにも大変悩みました。Typo 5.1.3はRuby 1.8.7に対応してないのですね。Railsのコンフィグファイルを少しいじって対処しました。

このところyohasebe.comへの繋がりが悪かったのはそういう訳です。ちなみにこのサイトで一番参照が多いのは RSyntaxTree で、ほとんどが海外からのアクセスです。そう考えるとこのエントリーは英語で書くべきだったかもしれません。とにかくご不便をおかけしました。

Posted in

品詞解析RubyライブラリEngTagger

Posted by Yoichiro Hasebe Wed, 21 May 2008 14:04:00 GMT

5月の初めからPerlを勉強しています。今後仕事で必要になる可能性があるので。8年くらい前に小さなスクリプトを作って遊んだりしてたけど、Perlのオブジェクト指向はどうもよく分からんなぁと思って使うのを止めたのでした。あらためて調べてみると、これが結構合理的だし面白い。

早速何かに役立てたいと思いつつも、ある程度の規模のプログラムをPerlで書く気にはなりません(それだったらRubyで書きたい)。じゃあPerlモジュールを何か見つけてきてそれのRuby移植版を作ろう。ということで、CPANを眺めていたら、Lingua::En::Taggerというのを見つけました。どんなモジュールかというと、Part of Speech Tagger、すなわち品詞解析器です。Pen Treebankのコロケーション情報を元にした隠れマルコフモデルを使い、入力された英文を品詞解析します。ライセンスはGPL2でした。

ゴールデンウィークの時間を使って、何とか一通りの作業が完了。もとのPerlモジュールがそうなのだけど、英文中からすべての名詞を抜き出したり、固有名詞(と思われるもの)を抜き出したり、修飾句に導かれた名詞句を抜き出すといった機能があります。もちろんこれらをすべて実装。

コードの品質はともかく、Rubyライブラリとして需用は少なからずあると思うので、RubyForgeでgemとして公開することにします。詳細は以下の通り。

プロジェクト・サイト

インストール

gem install engtagger

使い方

require 'rubygems'
require 'engtagger'

# EngTaggerオブジェクトの作成
tgr = EngTagger.new

# サンプルテキスト text
text = "Alice chased the big fat cat."

# textに品詞タグ付与(XML形式)
tagged = tgr.add_tags(text)
# => "<nnp>Alice</nnp> <vbd>chased</vbd> <det>the</det> <jj>big</jj> <jj>fat</jj><nn>cat</nn> <pp>.</pp>"

# text中の全ての名詞・名詞句およびその頻度を取得
word_list = tgr.get_words(text)
# => {"Alice"=>1, "cat"=>1, "fat cat"=>1, "big fat cat"=>1}

# タグ付けされたテキストから名詞を抽出
nouns = tgr.get_nouns(tagged)
# => {"cat"=>1, "Alice"=>1}

# タグ付けされたテキストからすべての固有名詞を抽出
proper = tgr.get_proper_nouns(tagged)
# => {"Alice"=>1}

Posted in ,

クラスインスタンス変数は継承されるか

Posted by Yoichiro Hasebe Thu, 28 Feb 2008 13:15:00 GMT

RHGによると、クラスの特異クラスはスーパークラスの特異クラスを継承している。

ということは、クラスメソッドはサブクラスに受け継がれるということだ。ならばクラスインスタンス変数はどうなんだろう?これもサブクラスに受け継がれるのだろうか?

class Bird
  #クラスインスタンス変数の設定
  @can_fly = true
  #特異クラスにアクセス
  class << self
    #クラスメソッドの設定
    def can_fly?
      @can_fly
    end
  end
end

class Sparrow < Bird
  #クラスインスタンス変数の再設定
  @can_fly = true
end

class Penguin < Bird
  #クラスインスタンス変数の再設定
  @can_fly = false
end

class Ostrich < Bird
  #クラスインスタンス変数を設定しない
end

puts "Bird can fly: " + Bird.can_fly?.to_s
puts "Sparrow can fly " + Sparrow.can_fly?.to_s
puts "Penguin can fly: " + Penguin.can_fly?.to_s
puts "Ostrich can fly: " + Ostrich.can_fly?.to_s

これを実行すると

Bird can fly: true
Sparrow can fly true
Penguin can fly: false
Ostrich can fly:

確かにクラスメソッドは継承されるけど、クラスインスタンス変数は継承されないことが分かった。考えてみるとクラス「インスタンス」変数なんだから当たり前だ。でもこうやってはっきり確認すると気持ちがいい。

Posted in  | Tags

Older posts: 1 2 3 ... 59