「サ変接続名詞+を(助詞)」で構成される文節が動詞に係る場合のみを対象とする 述語は「サ変接続名詞+を+動詞の基本形」とし,文節中に複数の動詞があるときは,最左の動詞を用いる 述語に係る助詞(文節)が複数あるときは,すべての助詞をスペース区切りで辞書順に並べる 述語に係る文節が複数ある場合は,すべての項をスペース区切りで並べる(助詞の並び順と揃えよ) 例えば「別段くるにも及ばんさと、主人は手紙に返事をする。」という文から,以下の出力が得られるはずである. 返事をする と に は 及ばんさと 手紙に 主人は このプログラムの出力をファイルに保存し,以下の事項をUNIXコマンドを用いて確認せよ. コーパス中で頻出する述語(サ変接続名詞+を+動詞) コーパス中で頻出する述語と助詞パターン ''' from operator import itemgetter from knock41 import get_chunk_list for chunks in get_chunk_list("neko.txt.cabocha"): for chunk in chunks: if not chunk.check_pos('動詞'): continue # 係り元の「サ変接続名詞+を(助詞)」で構成される文節を取得 sahen_wo = '' for src in chunk.srcs: sahen_wo = chunks[src].get_sahen_wo() if not sahen_wo: continue predicate = sahen_wo + chunk.get_surfaces('pos', '動詞')[0] # 述語 case_frame = [] for src in chunk.srcs:
def path_to_text(path): '''Chunkオブジェクトを要素とするリストを受け取り そのオブジェクトの表層形を '-> surface -> surface -> surface' の形にして返す ''' result = '' for chunk in path: result += '-> ' + chunk.normalized_surface() return result with open('result49', 'w') as output_file: for line in get_chunk_list(): # 名詞を含む文節の組み合わせを取得 noun_chunk = [] for chunk in line: if chunk.check_pos('名詞'): noun_chunk.append(chunk) pairs = list(combinations(noun_chunk, 2)) for pair in pairs: x, y = pair #output_file.write(f'{x.normalized_surface()} {y.normalized_surface()}\n') # # 根までのパスを取得 x_path = get_path_to_root(line, chunk, x.dst) y_path = get_path_to_root(line, chunk, y.dst)
可視化には,係り受け木をDOT言語に変換し,Graphvizを用いるとよい. また,Pythonから有向グラフを直接的に可視化するには,pydotを使うとよい. ''' import CaboCha import pydot_ng as pydot from knock41 import get_chunk_list sentence = input('文を入力してください : ') # Cabochaで入力文を解析して結果をファイルに保存 with open('sentence.cabocha', 'w') as f: cabocha = CaboCha.Parser() f.write(cabocha.parse(sentence).toString(CaboCha.FORMAT_LATTICE)) # 係り元と係り先の文節を取得 edges = [] for chunks in get_chunk_list("sentence.cabocha"): for chunk in chunks: if chunk.dst != -1: src = chunk.surface() dst = chunks[chunk.dst].surface() if src != '' and dst != '': edges.append(((src, dst))) # グラフを描画 graph = pydot.graph_from_edges(edges, directed=True) graph.write_png('result.png') # pip install pydot_ng # brew install graphviz # pip install graphviz