Esempio n. 1
0
「サ変接続名詞+を(助詞)」で構成される文節が動詞に係る場合のみを対象とする
述語は「サ変接続名詞+を+動詞の基本形」とし,文節中に複数の動詞があるときは,最左の動詞を用いる
述語に係る助詞(文節)が複数あるときは,すべての助詞をスペース区切りで辞書順に並べる
述語に係る文節が複数ある場合は,すべての項をスペース区切りで並べる(助詞の並び順と揃えよ)
例えば「別段くるにも及ばんさと、主人は手紙に返事をする。」という文から,以下の出力が得られるはずである.

返事をする      と に は        及ばんさと 手紙に 主人は
このプログラムの出力をファイルに保存し,以下の事項を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:
Esempio n. 2
0

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)
Esempio n. 3
0
可視化には,係り受け木を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