#困っていること
青空文庫の「吾輩は猫である」から品詞を得てその数をカウントし、表示するプログラムを作っているのですが、どうすればいいかわかりません。
#該当のソースコード(実行結果は長いので省略)
以下のプログラムは同作品の形態素解析を行うプログラムです。このプログラムを元に、品詞を得てその数をカウントし、表示するプログラムを作ります。
python
1import urllib.request 2 3from janome.analyzer import Analyzer 4from janome.charfilter import * 5from janome.tokenizer import Tokenizer 6 7 8class MainTextCharFilter(CharFilter): 9 10 def __init__(self, start, end): 11 self.start = start 12 self.end = end 13 14 def apply(self, text): 15 return text.split(self.start)[1].split(self.end)[0] 16 17# 夏目漱石 18# 吾輩は猫である 19url = 'http://www.aozora.gr.jp/cards/000148/files/789_14547.html' 20 21html = '' 22 23with urllib.request.urlopen(url) as response: 24 html = response.read().decode('shift_jis') 25 26 27char_filters = [UnicodeNormalizeCharFilter(), 28 MainTextCharFilter('<div class="main_text">', '<div class="bibliographical_information">'), 29 RegexReplaceCharFilter('<rp>(.*?)</rp>', ''), 30 RegexReplaceCharFilter('<.*?>', '')] 31 32tokenizer = Tokenizer() 33 34analyzer = Analyzer(char_filters, tokenizer) 35 36for token in analyzer.analyze(html): 37 print(token) 38 39
#実行結果の一部
python
1吾輩 名詞,代名詞,一般,*,*,*,吾輩,ワガハイ,ワガハイ 2は 助詞,係助詞,*,*,*,*,は,ハ,ワ 3猫 名詞,一般,*,*,*,*,猫,ネコ,ネコ 4で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ 5ある 助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル 6。 記号,句点,*,*,*,*,。,。,。 7名前 名詞,一般,*,*,*,*,名前,ナマエ,ナマエ 8は 助詞,係助詞,*,*,*,*,は,ハ,ワ 9まだ 副詞,助詞類接続,*,*,*,*,まだ,マダ,マダ 10無い 形容詞,自立,*,*,形容詞・アウオ段,基本形,無い,ナイ,ナイ 11。 記号,句点,*,*,*,*,。,。,。
#試したこと
上のプログラムから最後から2行目のfor token~print(token)の部分を消して、以下に書き換えてみましたが、0が延々と表示されてしまいます。
python
1meishi=0 2doushi=0 3for token in analyzer.analyze(html): 4 if token == "名詞": 5 meishi=meishi+1 6 elif token =="動詞": 7 doushi=doushi+1 8 9 print(meishi) 10 print(doushi)
#実行結果
python
10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260
#追記 (printの中身が表示されない)
「試したこと」の部分に書いたプログラムに0が延々と表示されていたのはprintをfor文の中に入れていたからでした。そこで、そのプログラムを以下に書き換えてみましたが、今度は実行画面に何も表示されなくなりました。表示するにはどうすればいいでしょうか?
python
1meishi=0 2doushi=0 3for token in analyzer.analyze(html): 4 if token.part_of_speech.split(',')[0] == "名詞": 5 meishi=meishi+1 6 elif token.part_of_speech.split(',')[0] =="動詞": 7 doushi=doushi+1 8 9print("名詞:"+str(meishi)) 10print("動詞:"+str(doushi))
#変更点
・回答のように、「if token=="名詞"」を「 if token.part_of_speech.split(',')[0] == "名詞"」に変更(動詞の部分も同様)
・printをfor文の外に移動
#回答を受けて追記(printをfor文の中に入れた時の実行結果)
python
1名詞:1 2動詞:0 3名詞:1 4動詞:0 5名詞:1 6動詞:0 7名詞:1 8動詞:0 9名詞:1 10動詞:0 11名詞:2 12動詞:0 13名詞:2 14動詞:0 15名詞:3 16動詞:0 17名詞:3 18動詞:0 19名詞:3 20動詞:0 21名詞:3 22動詞:0 23名詞:4 24動詞:0 25名詞:4 26動詞:0 27名詞:4 28動詞:0 29名詞:4 30動詞:0 31名詞:4 32動詞:0 33名詞:4 34動詞:0 35名詞:4 36動詞:0 37名詞:5 38動詞:0 39名詞:5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/07/04 02:14
2019/07/04 03:55 編集
退会済みユーザー
2019/07/04 04:14 編集
2019/07/04 23:21 編集
退会済みユーザー
2019/07/05 00:33