LoginSignup
4
8

More than 5 years have passed since last update.

cabocha-rubyの使い方メモ

Posted at

概要

cabocha-rubyの使い方メモ。

インストール

gem install cabocha

使い方

require "cabocha"
include CaboCha
parser = Parser.new
tree = parser.parse("吾輩は猫である。")

解析済みのcabochaファイルを読み込みたい場合は、たぶん次の方法でできるはず。一文ずつ解析するので、最初のEOSまでしか読み込まない。

> source = File.read("neko.cabocha")
> parser = Parse.new("-I4")
> tree = parser.parse(source)

メソッド

CaboCha::Parser

結果を文字列で取得する場合。

> text = "吾輩は猫である。"
> output = parser.parseToString(text)
> puts output
    吾輩は-D
  猫である。
EOS

文字列はASCII-8BITで返される。エンコーディングを変更するにはString#force_encodingを使う。

> output.encoding
#=> #<Encoding:ASCII-8BIT>
> output.force_encoding "UTF-8"

結果をCaboCha::Treeオブジェクトで取得する場合。

> tree = parser.parse(text)

CaboCha::Tree

センテンス関係

> tree.sentence.force_encoding("UTF-8")
=> "吾輩は猫である。"
> tree.sentence_size
=> 24

チャンク関係

> chunk = tree.chunk(0)
=> #<CaboCha::Chunk:0x007f96b408ee48 @__swigtype__="_p_cabocha_chunk_t">
> tree.chunk_size
#=> 2

トークン関係

> token = tree.token(0)
=> #<CaboCha::Token:0x007f96b407c068 @__swigtype__="_p_cabocha_token_t">
> tree.token_size
#=> 6
> tree.size
#=> 6

解析結果を文字列で取得。定数は次のいずれか。

  • 0: CaboCha::FORMAT_TREE
  • 1: CaboCha::FORMAT_LATTICE
  • 2: CaboCha::FORMAT_TREE_LATTICE
  • 3: CaboCha::FORMAT_XML
  • 4: CaboCha::FORMAT_NONE
> puts tree.toString(FORMAT_TREE)
    吾輩は-D
  猫である。
EOS

出力レイヤーの確認と変更

  • 0: CaboCha::OUTPUT_RAW_SENTENCE
  • 1: CaboCha::OUTPUT_POS
  • 2: CaboCha::OUTPUT_CHUNK
  • 3: CaboCha::OUTPUT_SELECTION
  • 4: CaboCha::OUTPUT_DEP
> tree.output_layer
#=> 4
> tree.set_output_layer(OUTPUT_RAW_SENTENCE)
> puts tree.toString(FORMAT_LATTICE)
吾輩は猫である。

文字コードと品詞セット

文字コード 品詞セット
0 CaboCha::EUC_JP CaboCha::IPA
1 CaboCha::CP932 CaboCha::JUMAN
2 CaboCha::UTF8 CaboCha::UNIDIC
3 CaboCha::ASCII
> tree.charset
#=> 2
> tree.posset
#=> 2

削除関係。#clear_chunkはチャンクだけ削除する。#clearは全て削除する。

> tree.clear_chunk
> tree.chunk_size  #=> 0
> tree.token_size  #=> 6
> tree.empty  #=> false

> tree.clear
> tree.chunk_size  #=> 0
> tree.token_size  #=> 
> tree.empty  #=> true

値の設定。設定してもただちに解析結果が変わるわけではないので、何に使うかは不明。

> tree.set_sentence "名前はまだ無い。"
> tree.set_charset EUC_JP
> tree.set_posset IPA

使い方がよく分からないメソッド。

> tree.read
> tree.what

CaboCha::Chunk

チャンク番号、トークン番号はいずれも文頭からの通し番号

  • #link 係り先チャンク番号
  • #head_pos 意味的主辞トークン番号
  • #func_pos 統語的主辞トークン番号
  • #token_pos チャンク先頭トークン番号
> chunk.link #=> 1
> chunk.head_pos #=> 0
> chunk.func_pos #=> 1
> chunk.token_size #=> 2
> chunk.token_pos #=> 0
> chunk.score #=> 0.0
> chunk.additional_info #=> nil
> chunk.feature_list_size #=> 18
> chunk.feature_list(0).force_encoding("UTF-8") #=> "FCASE:は"

CaboCha::Token

出現形

> token.surface.force_encoding("UTF-8") #=> "吾輩"
> token.normalized_surface.force_encoding("UTF-8") #=> "吾輩"

素性

> token.feature.force_encoding("UTF-8")
=> "代名詞,*,*,*,*,*,ワガハイ,我が輩,吾輩,ワガハイ,吾輩,ワガハイ,混,*,*,*,*,ワガハイ,ワガハイ,ワガハイ,ワガハイ,*,*,0,*,*"
> token.feature_list_size #=> 26
> token.feature_list(0).force_encoding("UTF-8") #=> "代名詞"

その他。

> token.ne #=> nil
> token.additional_info #=> nil
> token.chunk
=> #<CaboCha::Chunk:0x007f96b41036f8 @__swigtype__="_p_cabocha_chunk_t">

#neは固有表現 (named entity) のタグがついてる場合に使う。

> parser = Parser.new("-n1")
> tree = parser.parse("日本")
> token = tree.token(0)
> token.ne
=> "B-LOCATION"
4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8