LoginSignup
0
0

More than 1 year has passed since last update.

n-gram を試してみる ~国会議事録・コロナ編~

Last updated at Posted at 2022-03-14

行ったこと

2022年と2020年における国会のコロナに関する議論、発言を対象に、
Ngramの考え方を用いて、どのような言葉が連なって使用されたのかを調べました。

背景

自然言語処理に興味を持つ。
山内長承『Pythonによるテキストマイニング入門』2017、オーム社 を入手。
最初の項目、Ngramの概念を学ぶ。
なにか有意義なこと(?)をしたい。
その結果、国会の議事録を分析しようと考え至る。

----追記. 2022/03/18
つづきです。
【言語処理・共起】コロナ国会議論を2年前のそれと比較した。
https://qiita.com/yyyoichi/items/48aa94539d5002ce1ed6
-----ここまで-

目的

あくまでNgramをつかって有意義らしいことをしてみること。
Ngramについてはこちらも参考にしました。ありがとうございます。
N-gramの作り方

環境

windows10
python 3.9.9
mecab
NEologd

処理

簡単に

  1. 国会の議事録を取得するためのurlを作成する
  2. 議事録を取得する
  3. 発言について形態素解析を行う
  4. 2-gramを作成する
  5. 出現頻度が高い順に2-gramを並べ替える

ソースコードはGit hubに挙げています。
結城 浩『Java言語で学ぶ デザインパターン入門 第3版』2021、SB Creative を勉強しています。再利用性の高いコードを書こうとしています。
クラス設計他、ご指摘、アドバイスいただければ嬉しいです。

サンプルコード
Main.py

from collections import Counter
from request.Minute import Minute
from request.Url import Url
from language.Token import Morpheme

KEYWORD = "コロナ"
#形態素解析器
m = Morpheme()
#url作成
maker  = Url(3)
maker.any(KEYWORD)
maker.maximumRecords("30")#30コ取得
maker.nameOfHouse("参議院")
maker.recordPacking("json")
# maker.from_("2021-01-01")
maker.until("2020-03-14")
url = maker.getUrl()#設定したクエリをもつURLを取得する
print(url)
#議事録データを取得
fetch = Minute(url)
#コロナにヒットする発言データが帰ってくる
res = fetch.get()
if res == None:
    exit()
n_gram = []
it = res.iterator()#発言をループする
while it.has_next():
    rc = it.next()#発言のデータ
    print(rc.speaker())
    print(rc.speakerYomi())
    speech = rc.speech()
    sentences = speech.getSentences()# 。(読点)区切りでリスト化
    
    for sentence in sentences:
        if KEYWORD not in sentence:
            #コロナというワードがなければスルー
            continue
        #形態素解析された原形の単語をもつリスト
        words = [w.prototype() for w in m.parse(sentence).getValues()]
        d = list(zip(words[:-1], words[1:]))#2つセットにする
        n_gram.extend(d)
dic2 = Counter(n_gram)#出現回数をカウント
dic2 = sorted(dic2.items(), key=lambda x: x[1], reverse=True)[:50]#上位50位を取得
print("\n")
print("結果")
for d in dic2:
    print(d)
    


結果

前置きが長くなりました。
ある日付から遡って最も近い30件のコロナに関する発言を取得し、すべて2-gramを作成。もっとも多かった組合せ上位50件を表示しています。
なお、表層形ではなく、原形を使って2-gramを作成しています。

2022-03-14から上位50件

(('ます', '。'), 52)
(('は', '、'), 22)
(('する', 'て'), 20)
(('て', 'いる'), 19)
(('君', '国務大臣'), 18)
(('国務大臣', '*'), 18)
(('*', '内閣府特命担当大臣'), 16)
(('内閣府特命担当大臣', '*'), 16)
(('、', '新型コロナウイルス感染症'), 15)
(('とともに', '、'), 15)
(('に関する', '件'), 14)
(('まいる', 'ます'), 13)
(('件', '*'), 12)
(('て', 'おる'), 11)
(('、', 'コロナ禍'), 10)
(('へ', 'の'), 10)
(('する', 'た'), 10)
(('の', '推進'), 10)
(('おる', 'ます'), 10)
(('て', 'いく'), 9)
(('いる', 'ます'), 9)
(('について', 'は'), 9)
(('の', '基本方針'), 9)
(('、', '新型コロナ'), 9)
(('必要', 'だ'), 8)
(('推進', 'する'), 8)
(('て', 'まいる'), 8)
(('新しい', '資本主義'), 8)
(('基本方針', 'に関する'), 8)
(('に', '、'), 7)
(('を', '推進'), 7)
(('ポスト', 'コロナ'), 7)
(('の', '対応'), 7)
(('の', '実現'), 7)
(('国民', 'の'), 7)
(('等', 'を'), 7)
(('君', '厚生労働省'), 7)
(('中', '、'), 6)
(('に', '向ける'), 6)
(('万全', 'を'), 6)
(('後', 'の'), 6)
(('など', '、'), 6)
(('を', '行う'), 6)
(('ます', 'た'), 6)
(('新型コロナウイルス感染症', 'の'), 6)
(('の', '影響'), 6)
(('対応', 'する'), 6)
(('、', 'ポスト'), 6)
(('こと', 'が'), 6)
(('国民', '生活'), 6)

2020-03-14から上位50件

(('ます', '。'), 45)
(('て', 'いる'), 35)
(('は', '、'), 34)
(('する', 'て'), 24)
(('という', 'こと'), 24)
(('する', 'れる'), 23)
(('だ', 'ある'), 20)
(('ある', 'ます'), 20)
(('が', '、'), 19)
(('する', 'た'), 18)
(('て', '、'), 17)
(('を', 'する'), 17)
(('、', 'この'), 16)
(('に', 'は'), 15)
(('けれども', '、'), 15)
(('、', '新型コロナウイルス感染症'), 14)
(('れる', 'た'), 14)
(('に', '、'), 14)
(('だ', 'ござる'), 14)
(('ござる', 'ます'), 14)
(('と', 'する'), 13)
(('いる', 'ます'), 13)
(('て', 'おる'), 13)
(('ます', 'た'), 13)
(('よう', 'に'), 13)
(('れる', 'て'), 12)
(('、', '今回'), 12)
(('今回', 'の'), 12)
(('に', 'なる'), 12)
(('新型コロナウイルス感染症', 'を'), 11)
(('に', 'する'), 11)
(('、', '政府'), 10)
(('は', 'ない'), 10)
(('の', 'か'), 10)
(('こと', 'だ'), 10)
(('おる', 'ます'), 10)
(('と', '、'), 10)
(('ところ', 'だ'), 10)
(('ます', 'けれども'), 10)
(('もの', 'だ'), 9)
(('する', '、'), 9)
(('が', 'ある'), 9)
(('て', 'いく'), 9)
(('ます', 'が'), 9)
(('的', 'だ'), 8)
(('する', 'こと'), 8)
(('と', '思う'), 8)
(('ので', '、'), 8)
(('、', 'その'), 8)
(('、', 'これ'), 8)

感想

結果を受けて、どう考えますでしょうか?
私は、2年経過しポストコロナなどの議論の軸が現れたのかな、と感じました。

目的について

Ngramを使ってみたかっただけなのですが、正しい使い方なのでしょうか。分かりません。
意味のある単語に限定したほうがいいのかとも思いました。句点ものぞいたり。
ひとまず、今回はこの辺で。

参考

参考にしたサイトや書籍です。

サイト

mecab
https://taku910.github.io/mecab/

インストール
https://obenkyolab.com/?p=2682

NEologd
https://qiita.com/zincjp/items/c61c441426b9482b5a48
https://qd-suriken.com/2020/04/22/widows%E3%81%A7mecabneologd/

前処理
https://note.com/narudesu/n/na35de30a583a
https://qiita.com/Hironsan/items/2466fe0f344115aff177

Ngram
https://qiita.com/kazmaw/items/4df328cba6429ec210fb

書籍

言語処理について
山内長承『Pythonによるテキストマイニング入門』2017、オーム社

その他参考

結城 浩『Java言語で学ぶ デザインパターン入門 第3版』2021、SB Creative

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0