まずは試しに解析してみる
import MeCab as mc
tagger = mc.Tagger('')
results = tagger.parse('列島縦断 鉄道乗りつくしの旅~JR20000km全線走破~ダイジェスト')
print(results)
# 列島 名詞,一般,*,*,*,*,列島,レットウ,レットー
# 縦断 名詞,サ変接続,*,*,*,*,縦断,ジュウダン,ジューダン
# 鉄道 名詞,一般,*,*,*,*,鉄道,テツドウ,テツドー
# 乗り 名詞,接尾,一般,*,*,*,乗り,ノリ,ノリ
# つくし 名詞,一般,*,*,*,*,つくし,ツクシ,ツクシ
# の 助詞,連体化,*,*,*,*,の,ノ,ノ
# 旅 名詞,サ変接続,*,*,*,*,旅,タビ,タビ
# ~ 名詞,サ変接続,*,*,*,*,*
# JR 名詞,一般,*,*,*,*,*
# 20000 名詞,数,*,*,*,*,*
# km 名詞,一般,*,*,*,*,*
# 全線 名詞,一般,*,*,*,*,全線,ゼンセン,ゼンセン
# 走破 名詞,サ変接続,*,*,*,*,走破,ソウハ,ソーハ
# ~ 名詞,サ変接続,*,*,*,*,*
# ダイジェスト 名詞,サ変接続,*,*,*,*,ダイジェスト,ダイジェスト,ダイジェスト
# EOS
文字列形式でアウトプットされ、tabやら改行やら、カンマなどいろいろ区切り文字があるのでめんどくさそう。
ちなみに名詞は名詞でも英語(ローマ字)は以下のように、カンマの区切りの数も変わるよう
tagger = mc.Tagger('')
results = tagger.parse('NHK紅白歌合戦')
print(results)
# NHK 名詞,固有名詞,組織,*,*,*,* <= カンマ6個
# 紅白 名詞,一般,*,*,*,*,紅白,コウハク,コーハク <= カンマ8個
# 歌合戦 名詞,一般,*,*,*,*,歌合戦,ウタガッセン,ウタガッセン <= カンマ8個
# EOS
名詞だけ抽出してみる
簡単な処理の順番
処理の順番的には、
①形態素解析
②改行で分割
③tabで分割
2つに別れる
["紅白","名詞,一般,*,*,*,*,紅白,コウハク,コーハク"]
④後半をさらにカンマで分割
['名詞','一般','*','*','*','*','紅白','コウハク','コーハク']
⑤上記リストの始まりが名詞であれば、名詞リストに追加
ソースコード
# 名詞を抽出
def extractNoun(text):
tagger = mc.Tagger('')
results = tagger.parse(text)
keywords = []
keywords_kana = []
for r in results.split('\n'):
cols = r.split("\t")
if len(cols) >= 2:
parts = cols[1].split(",")
if parts[0].startswith("名詞"):
keywords.append(cols[0])
if len(parts) > 7
keywords_kana.append(parts[7])
return keywords, keywords_kana
色々試してみた
list = [
'NHKニュース',
'生活の知恵',
'ピーマン袋',
'生活ほっとモーニング',
'土曜元気市',
'お元気ですか日本列島',
'経済羅針盤'
]
for name in list:
keyword, kana = extractNoun(name)
print('○' + name)
print('名詞 : ' + ','.join(keyword))
print('カナ : ' + ','.join(kana))
# ○NHKニュース
# 名詞 : NHK,ニュース
# カナ : ニュース
# ○生活の知恵
# 名詞 : 生活,知恵
# カナ : セイカツ,チエ
# ○ピーマン袋
# 名詞 : ピーマン,袋
# カナ : ピーマン,ブクロ
# ○生活ほっとモーニング
# 名詞 : 生活,モーニング
# カナ : セイカツ,モーニング
# ○土曜元気市
# 名詞 : 土曜,元気,市
# カナ : ドヨウ,ゲンキ,シ
# ○お元気ですか日本列島
# 名詞 : 元気,日本,列島
# カナ : ゲンキ,ニッポン,レットウ
# ○経済羅針盤
# 名詞 : 経済,羅針盤
# カナ : ケイザイ,ラシンバン
最後に
次回は実際に名詞が羅列されたcsvやエクセルを読み込んで
いい感じにDataFrameにするところまでやりたい