👋

【MeCab】Pythonで文章内の単語の出現頻度を調べる【4ステップ】

2022/04/04に公開

流れ

  1. MeCabをインストールし、文章を分かち書きする※MeCabのインストールは本記事では扱いません。
  2. 不要な文字を消す
  3. 全単語を読み込む。値を入れるdictを作る。
  4. dict内に既出の単語がなかったらvalueを1に設定。あったらvalueを+1する。

使う文章

txt = '''
 防衛装備庁は1日、サイバー攻撃への対策強化のため、防衛省と契約し、保護が必要な情報を扱う全ての企業を対象とした「防衛産業サイバーセキュリティ基準」を新たに設けたと発表した。これまでは企業の社内システムから外部への情報流出の監視が中心だったが、システムの不審な動きやウイルスのチェックなど項目を増やした。2023年度に結ぶ契約から適用する。米国の対策をモデルにした。
'''

引用元 Yahooニュース(https://news.yahoo.co.jp/pickup/6422623)

コード

import MeCab
import numpy

#わかち書き 辞書はneologdを使用。
tagger = MeCab.Tagger('-d /opt/homebrew/lib/mecab/dic/mecab-ipadic-neologd')

#文末に表示される''を消す。
words = tagger.parse(txt).split('\n')[:-2]

#値を入れていくdict
wordFreq = {}

#各行の全単語を処理するまで繰り返し
for word in words:
    #既出の単語なら1を足す、なければ1を入れる。
    if word in wordFreq:
        wordFreq[word] += 1
	
       #なかったら
    else:
        wordFreq[word] = 1


#集計した単語の,出現回数を出力
for term, count in wordFreq.items():
    print(count, term)
    

品詞を消したい場合(文字だけ出したい場合)

import MeCab
import numpy

#わかち書き 辞書はneologdを使用。
tagger = MeCab.Tagger('-d /opt/homebrew/lib/mecab/dic/mecab-ipadic-neologd')

#文末に表示される''を消す。
words = tagger.parse(txt).split('\n')[:-2]

#品詞を消した単語を格納するリスト
l = []

#'\t'で区切れるので、スプリットして単語を取得する。
for element in words:
    e = element.split('\t')[0]
    l.append(e)
 
#値を入れていくdict
wordFreq = {}
# 各行の全単語を処理するまで繰り返し
for word in l:
    # 既出の単語なら1加算、初めてなら1をセット
    if word in wordFreq:
        wordFreq[word] += 1
    else:
        wordFreq[word] = 1


# 集計した単語の,出現回数を出力
for term, count in wordFreq.items():
    print(count, term)

自然言語処理を始めたい方におすすめの一冊

自然言語処理〔改訂版〕 (放送大学教材)
https://amzn.to/3NJxaRE

放送大学のテキストになります。
めっちゃ難しそうな表紙ですが、放送大学の初学者の学生が理解できるものになっており、
自然言語処理の理屈を知るには良い一冊だと思います。

Discussion