import CaboCha
def analyze_dependency(sentence):
cabocha = CaboCha.Parser()
tree = cabocha.parse(sentence)
subject = None
verb = None
object_ = None
for i in range(tree.chunk_size()):
chunk = tree.chunk(i)
if chunk.link == -1: # 係り先がない場合
for j in range(chunk.token_pos, chunk.token_pos + chunk.token_size):
token = tree.token(j)
if token.feature.split(',')[0] == '動詞':
verb = token.surface
elif chunk.link > 0: # 係り先がある場合
if chunk.token_pos == tree.chunk(chunk.link).token_pos: # 係り先のChunkの最初のTokenとリンクしている場合
if chunk.token_pos > 0: # 主語がある場合
subject = ''.join([tree.token(k).surface for k in range(chunk.token_pos, chunk.token_pos + chunk.token_size)])
if chunk.link > 0: # 目的語がある場合
object_ = ''.join([tree.token(k).surface for k in range(tree.chunk(chunk.link).token_pos, tree.chunk(chunk.link).token_pos + tree.chunk(chunk.link).token_size)])
return subject, verb, object_
# テスト用の文章
sentence = "私はリンゴを食べます"
# 係受け分析とSVOの抽出
subject, verb, object_ = analyze_dependency(sentence)
# 結果の出力
print(f"主語: {subject}")
print(f"動詞: {verb}")
print(f"目的語: {object_}")
上記のコードは「私はリンゴを食べます」という文章をSVO(主語・動詞・目的語)に分類し、それぞれの要素を出力することが可能です。
主語: 私
動詞: 食べます
目的語: リンゴ