ノック55:分割したデータをデータフレームで保持しよう
単語に分割されたデータをデータフレーム型にし保存します。
#タイトルと著者名の取得
with open('data/hashire_merosu.txt',mode='r',encoding='shift-jis') as f :
title = f.readline()
author = f.readline()
title = title.replace('\n','')
author = author.replace('\n','')
#公開日と修正日の取得
with open('data/hashire_merosu.txt',mode='r',encoding='shift-jis') as f :
content = f.readlines()
import pandas as pd
df = pd.DataFrame(content,columns=['text'])
df['text'] = df['text'].str.replace('\n','')
date = df[(df['text'].str.contains('日公開'))|(df['text'].str.contains('日修正'))].copy()
date['text'] = date['text'].str.replace('公開','')
date['text'] = date['text'].str.replace('修正','')
date['text'] = date['text'].str.replace('年','/')
date['text'] = date['text'].str.replace('月','/')
date['text'] = date['text'].str.replace('日','')
date['text'] = pd.to_datetime(date['text'])
#メイン文をbody変数に
with open('data/hashire_merosu.txt',mode='r',encoding='shift-jis') as f :
content = f.read()
content = ' '.join(content.split())
import unicodedata
content = unicodedata.normalize('NFKC',content)
import re
pattern = re.compile(r'^.+(#地から1字上げ].+#地から1字上げ]).+$')
body = re.match(pattern,content).group(1)
body=body.replace('#地から1字上げ] ------------------------------------------------------- ','')
body=body.replace(' [#地から1字上げ]','')
#ここまでのデータをデータフレーム型に
release_date = date.iat[0,0] #左側が行、右側が列 0行0列
update_date = date.iat[1,0] #1行0列
booklist = pd.DataFrame([[title,author,release_date,update_date,body]],
columns=['title','autor','release_date','update_date','body'])
#ノック54 形態素解析
body = booklist.iloc[0,4]
parsed = parsed[:-2]
#ノック55
*values, = map(lambda s: re.split(r'\t|,',s),parsed)
print(values[:4])
map(lambda 引数 : 処理, シーケンス)
引数はs、処理は re.split(r'\t,',s)、シーケンスはpasedとなります。
re.split(r'\t,',s) はタブまたはカンマがある場合はカンマに置換する処理です。
mapはparsedを1行ずつ処理し、その結果をリストとして保持していきます。
*values=で、結果をvaluesに格納しています。アスタリスクがついているので、
中身を分割してもつことになります。
実行結果
6712
表層形 品詞 品詞細分類1 品詞細分類2 品詞細分類3 活用型 活用形 原型 読み 発音
0 メロス 名詞 一般 * * * * * None None
1 は 助詞 係助詞 * * * * は ハ ワ
2 激怒 名詞 サ変接続 * * * * 激怒 ゲキド ゲキド