「インプット大全」を読んだ話

なぜ読んだのか

勉強したこと、聞いたこと、調べたことが全く残っていないと感じているので、インプットのやり方から見直すために読んでみました。

本の紹介

学び効率が最大化するインプット大全 (サンクチュアリ出版) 樺沢紫苑 (著)

amazonのリンクはこちら

わかったこと

インプットをするために一番大事なことは、目的を持ってインプットをすること、そして必ずアウトプットをすることだと思いました。

そのための手法が多く紹介されていたのですが、その中でもすぐに実践できそうなものをピックアップしました。

  1. いらない情報を捨てる
  2. メモを取る
  3. 「あとで〇〇する」ということを意識しながら聴く

## いらない情報を捨てる

人が初めて聞いたことで覚えておけることは大体3つだそうです。大事なことを覚えておくためには、そもそもターゲットにする情報を絞るということが大事だとわかりました。必要以上に情報に触れないという選択もあるということを知ることができました。

メモをとる

これは「いらない情報を捨てる」というのとほとんど同じ理由で、人は覚えておける数が少ないので、書いておくべきという考えに則っていると思います。

またこれは私の個人的な感覚なのですが、メモを取る時、人は無意識に情報を取捨選択し、また、アウトプットし直しているのではないのでしょうか。自分に必要だと思うことを自分なりに理解することで、情報を絞ること、アウトプットをすることを同時に行っていると思います。

「あとで〇〇する」ということを意識しながら聴く

これをすることでインプットの際の集中力が大きく改善されるそうです。また、自分の目的に沿った情報に絞るという意味でも非常に重要だと思いました。

感想

イラストが多く用いられており、また、一つのテーマがコンパクトにまとまっているので非常に読みやすく思いました。 インプットには必ずアウトプットも必要であるということが分かったので、「アウトプット大全」の方も読んでみようと思います。

LINEのデータを分析しようとして困った話

どういうこと?

みなさまきっとご利用になっているであろうLINEですが、トークルームの履歴を書き出せることをご存知でしょうか? Plain textで保存してくれて、とっても嬉しい!これで自然言語処理系の課題をやってやろう!!

と思ったのですが、この中のデータがとっても使いにくい形で困ったので、その困ったことについて書いていきたいと思います。

中身を見てみる

スマホから保存したときの中身のデータの最初はこんな感じです。個人的な会話や名前ががっつり載っているので、伏せ字ばっかりです。

[LINE] (私の友人のユーザネーム)とのトーク履歴
保存日時:2021/08/03 14:06

2020/08/20(木)
11:52   (私のユーザネーム)  ⓘ このメッセージは、利用していた端末から移行されなかったため表示できません。
16:31   (私の友人のユーザネーム) message
16:58   (私のユーザネーム)  message
19:01   (私の友人のユーザネーム) message
19:03   (私のユーザネーム)  message
19:04   (私の友人のユーザネーム) message
19:05   (私のユーザネーム)  message
19:05   (私のユーザネーム)  message

2020/08/21(金)
00:02   (私の友人のユーザネーム) [写真]
00:02   (私の友人のユーザネーム) message

また、いくつか特徴的なデータを挙げておきます。

23:33 (ユーザネーム)    "message(一行目)
message(二行目)
message(三行目)
message(四行目)
"

これは複数行にわたってメッセージが送られてきたときの様子です。先程の例では一つの吹き出しに、全て一行のメッセージでした。それに対しこちらは一つの吹き出しに四行のメッセージと一つの空白行がありました。

01:12    (ユーザネーム)がメッセージの送信を取り消しました

これはメッセージを取り消したときの履歴です。

メッセージの形式を考える

さて、この様子から、このLINEのトーク履歴にはいくつかの行があることがわかります。

空白行
 
日付の行
YYYY/MM/DD(曜日)
メッセージの行
時間 \t ユーザーネーム \t メッセージ
改行を含む場合の二行目以降のメッセージの行
メッセージ
システムメッセージ
時間 \t メッセージ

ただしメッセージが複数行にまたがるときは、一つの吹き出しに入っているメッセージ全体の最初と最後に"が付きます。

前処理をする

この形式では分析するのに全く向いていないので、前処理を行いたいと思います。 できれば[日付、時間、ユーザ、メッセージ(ふきだし全体)]という形にしたいです。 そのためには今見ている行が何の行か判断する必要があります。 そのためにいくつかやり方を考えて見ました。

方法1:正規表現で考える

各行に特徴があるのでこれを正規表現で判別できないか考えてみました。 例えばタブ(\t)の数、数字やスラッシュの数、そのようなものを拾い上げてみようと思います。

でもこれはうまくいきません。 改行を含む場合の2行目以降のメッセージの行が、他の行の特徴と一致しているときに間違った判断をされてしまうことに気づきました。

ということでこれは没です。

方法2:状態遷移図を書いてみる

各行には規則性があると考えて、状態遷移図を書くことができないか考えてみました。

  • 日付の行の前には空白行が入る
  • 日付の行の後にはメッセージの行(システムメッセージの行)がくる
  • メッセージの行の後に来るのはいくつか候補がある

この3つ目がとても大変です。 というのも、メッセージの行の後に来るのは以下のケースになります。

  • 空白行
  • メッセージの行
  • 改行を含む場合の二行目以降のメッセージの行

これらを見分ける必要があるのですがこれが難しい。

例えば、1行目にメッセージ、2行目が空白で3行目にメッセージが来た時を考えます。 この時2行目がメッセージの途中なのかそれとも日付の行の前に入る空白なのか、見分けることができません。改行を含むメッセージが"で始まることを利用できないか考えたとしても、普通の一行だけのメッセージが"で始まっている可能性があります。

じゃあどうするの?

諦めました。 いや、無理ですよこれ。色々考えて今回は"で始まるメッセージは存在しない("で始まっている場合は必ず改行の含まれるメッセージである)かつメッセージの中で"は使われないという前提で考えました。(実際そのようなデータはありませんでしたし...)

そう考えれば方法2を以下のように変えればいけそうです。

  • 日付の行の前には空白行が入る
  • 日付の行の後にはメッセージの行(もしくはシステムメッセージの行)がくる
  • メッセージの行(もしくはシステムメッセージの行)の中に"が含まれていれば、後には改行を含む場合の二行目以降のメッセージの行が来る
  • 改行を含む場合の二行目以降のメッセージの行の後には、"が含まれるまで改行を含む場合の二行目以降のメッセージの行が続く
  • メッセージの行(もしくはシステムメッセージの行)の中に"が含まれていなけば、後には空白行メッセージの行(もしくはシステムメッセージの行)が来る

メッセージでコードを送ったときのことなんて考えてはいけません。良いですね?