質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

284閲覧

python 形態素解析について

---stax---

総合スコア148

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/05/29 14:50

表題の件で質問させてください。
あるテキストファイルを読み込んで、文単位で形態素解析を行い名詞だけ抽出し、基本形を文ごとのリストにしたいと考えています。

このようなテキストを形態素解析するとして

まず冒頭、天皇陛下の御公務の負担軽減等について申し上げます。現在、有識者会議で検討を進めており、近々論点整理が行われる予定です。

①以下のようなひとまとめのリストではなく

['冒頭', '天皇陛下', '公務', '負担', '軽減', '等', '現在', '有識者', '会議', '検討', '論点', '整理', '予定'

②このような文単位で形態素解析されたリストを作りたいです

[['冒頭', '天皇陛下', '公務', '負担', '軽減', '等'], ['現在', '有識者', '会議', '検討', '論点', '整理', '予定']

以下のコードを作成したのですが、このやり方では①のようになってしまいます
②のような形にするにはどのように処理を書くべきでしょうか?
初歩的な質問になりますがアドバイス宜しくお願い致します。

python

1import re 2import numpy as np 3from collections import Counter 4from janome.tokenizer import Tokenizer 5import itertools 6 7def readin(filename): 8 with open(filename, "r") as afile: 9 whole_str = afile.read() 10 sentenses = (re.sub('。', '。 \n', whole_str)).splitlines() 11 return [re.sub('','', u) for u in sentenses if len(u)!=0] 12 13t = Tokenizer() 14 15 16filename = (r'C:\Users\Desktop\abe-enzetsu-2017-01-20.txt') 17string = readin(filename) 18 19ret = [] 20 21for sentense in string: 22 sentense.splitlines() #1行に区切る(for sentense in stringで分離してるから要らない?) 23 for v in t.tokenize(sentense): #形態素解析する 24 if v.part_of_speech.split(',')[0] in ['名詞']: #名詞のみ抽出(なぜか引数なしsplit()では何も表示されない) 25 print(v.base_form) #確認 26 ret.append(v.base_form) #基本形でリストに格納 27print(ret)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

あまりもとのコードに手を入れずに書くとこういう感じで期待した動作になりますか?
tmp_retという一時的なリストを用意しただけですが。

python

1ret = [] 2 3for sentense in string: 4 sentense.splitlines() #1行に区切る(for sentense in stringで分離してるから要らない?) 5 tmp_ret = [] # 各センテンス用の一時的なリストを用意 6 for v in t.tokenize(sentense): #形態素解析する 7 if v.part_of_speech.split(',')[0] in ['名詞']: #名詞のみ抽出(なぜか引数なしsplit()では何も表示されない) 8 print(v.base_form) #確認 9 tmp_ret.append(v.base_form) #基本形で一時的なリストに格納 10 ret.append(tmp_ret) # メインのリストに追加 11print(ret)

投稿2018/05/29 15:03

denzow

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

---stax---

2018/06/14 05:23

回答ありがとうございます 返答遅くなってしまい申し訳ありません 頂いたコードで目標を達成することが出来ました ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問