概要
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"