###やりたいこと
mecabを用いて入力したテキストファイルのセリフ部分(「」や『』で囲まれている部分)の
名詞(代名詞,非自立名詞,数,固有名詞を除く)を取り出して行列selsに格納したいのですが、
作成したコードを実行してみたところ、selsには何も格納されておらず、
何も出力されませんでした。
(使用するテキストファイルに問題はなく、形態素解析のみであれば正常に実行できます。)
ループ内の考え方としては
今見ている形態素が if '「'または'『'だった場合 flagを1にする ループの始めに戻る else if '」'または'』'だった場合 flagを0にする ループの始めに戻る else if flagが1 かつ 名詞だった場合 if 名詞が代名詞,非自立名詞,数,固有名詞のいずれかの場合 ループの始めに戻る selsに形態素を追加する
といった感じです。
分かりにくかったらすみません。
以下に作成したコードを記します
python
1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3 4import MeCab 5 6m = MeCab.Tagger ("-Ochasen") 7 8doc = input('select file:') 9f = open(doc, "r",encoding = "utf-8") 10text = f.read() 11f.close() 12 13#文字列を改行位置で区切って分割する(形態素解析) 14chunks = m.parse(text).splitlines() 15 16sels = [] 17 18#絞り込み 19#chunk:形態素解析結果(1行の文字列) 20for chunk in chunks: 21 #水平タブ(\t)で区切り、文字列リストを作成 22 cols = chunk.split('\t') 23 if len(cols) >= 4: 24 #parts:品詞の種類 25 parts = cols[3].split('-') 26 if cols[2] == '「' or '『': 27 flag = 1 28 continue 29 elif cols[2] == '」' or '』': 30 flag = 0 31 continue 32 elif (flag == 1 and parts[0].startswith('名詞')): 33 if parts[1] in ['代名詞','非自立','数','固有名詞']: 34 continue 35 #要素を追加 36 sels.append(cols[2]) 37 38print('\n%s:絞り込み結果↓\n' %doc) 39for sel in sels: 40 print(sel)
selsに形態素が格納されない原因と解決策を教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/20 10:11