koruri
データベース概要 †
koruri は収集した文章や単語をデータベースにどかどか突っ込んでいきます。
そのデータベース上で、さらに分解したり解析したりといった作業を行い、ペルソナジェネレーターはその結果を引くことで自動文章を生成します。
作者はデータベースをほとんど使ったことが無いので設計的にはヘボいと思います。
データベース構成 †
システム構成 †
データベースは自宅サーバー上で動いている Mysql を使用しています。
最初は sqlite でテストしていましたが、自動収集と解析処理を同時に複数のスクリプトから行うあたりに不安があったので Mysql に移行しました。
データベーステーブルリスト †
koruri DB は以下のテーブルを持っています。
- tweet_log
- 収集したtweetを放り込むテーブル。
- sentence
- tweet1つが複数の文で構成されていた場合それを1短文に分割してそれぞれをレコードとして保持します。このときURL等文章情報にならないものは取り除いています。
- hatena_keyword
- はてなキーワードの語彙リストとして公開されているものを突っ込んであります。ここにある単語は無条件に有効な名詞であると見なすための辞書。最初はWEBから引いていましたが重たいのでキーワードリストとしてDBに持つことにしました。
- noun_bank
- tweetやはてなキーワードから抽出された「名詞」を蓄積、分析していくテーブルです。名詞の認識精度はmecab次第といったところです。
- template
- sentenceから名詞部分をwild cardで塗りつぶした文章テンプレートです。
- template_ruripeco
- るりぺこ。用、拡張テンプレート(templateとのリレーショナルで使用)
- noun_follow
- 文を名詞とそれ以外に分けたときの「それ以外」を集めるテーブル。
- noun_follow_link
- 文を名詞とそれ以外に分けたとき名詞の後に続く「それ以外」のリンク状況を記録しておくテーブル。
- trend_word
- Twitterでこの頃流行の単語、t_cloud とか Buzztter とかを参考にホットな所を拾っておく。
- property
- るりぺこ。用ステート保存テーブル。今のところ、発言タイミングまで指折り数える変数用。
- ruripeco_talk
- るりぺこ。が発言した文と時間をとっておくことにした。
- ruripeco_mention
- るりぺこ。宛のmentionを記録する。返信までの記憶用。
- noun_precede_link
- 名詞以外の文節から、続く名詞の統計情報。
- trend_word
- Twitter上で話題の単語リスト。ruripecoの発言を生成するためのタネとなる。
- hot_url
- はてなブックマーク新着から拾ったおすすめページのネタ。ruripecoがたまにおすすめしてくる情報をストックしておく。
データベース詳細 †
tweet_log †
twetter の log を登録しておくテーブル。
| id | incremental INT | テーブル一意なID |
| text | TEXT | tweet |
| time | INT | 発言時間1970/01/01からの秒数、UNIXスポットタイム |
| author | TEXT | 発言者名 |
| screen_name | TEXT | 発言者、スクリーンネーム |
| listname | TEXT | リストTLの記録だった場合、そのリスト名 |
| process | INT | パース済みフラグ、0=未処理,1=sentence抽出済み |
sentence †
tweet分解した文を登録しておくテーブル。
| id | incremental INT | テーブル一意なID |
| text | TEXT | 単語 |
| link_prev | TEXT | (未使用) |
| link_next | TEXT | (未使用) |
| tweet_id | INT | 分解前 tweet log の ID |
| template | INT | テンプレート化したもののtemplateテーブル内ID |
| process | INT | パース済みフラグ、0=未処理,1=noun抽出済み,2=テンプレート加工済み |
hatena_keyword †
| keyid | INT | はてなキーワードについているレコードID |
| word | TEXT | 単語 |
| yomi | TEXT | ヨミガナ |
noun_bank †
収集した名詞を登録しておくテーブル。
| id | incremental INT | テーブル一意なID |
| word | TEXT | 単語 |
| yomi | TEXT | ヨミガナ |
| score | INT | 採用スコア(0で未評価、マイナスでNGワード) |
| appear | INT | tweetでの登場回数カウント |
| used | INT | (未使用) |
| hatena | INT | はてなキーワードにも存在するなら1、しないなら0 |
| lastupdate | INT | 最近の更新時間、UNIXスポットタイム |
| name | INT | 人名かもしれないスコア、上限100点、マイナスで未評価 |
| super | TEXT | はてなキーワードの関連語から登録されたときその連想元単語 |
| similer | TEXT | はてなキーワード関連語、複数あるときはカンマ区切り |
noun_link †
1センテンスの中で出現した名詞同士は後に続けて出やすいということで、その出現頻度と後続単語を登録しておくテーブル。
| id | incremental INT | テーブル一意なID |
| nounid | INT | 名詞、noun_bank内のid |
| link | INT | 連続して出現しうる名詞、noun_bank内のid |
| hatena | INT | はてなキーワード関連用語由来なら1、そうでないなら0 |
| appear | INT | この組み合わせでこれまでに登場した回数 |
| lastupdate | INT | 最近の更新時間、UNIXスポットタイム |
template †
名詞を「(*)」で塗りつぶした文章テンプレートを登録するテーブル。
| id | incremental INT | テーブル一意なID |
| template | TEXT | テンプレート文字列 |
| score | INT | 評価値、元文章の名詞文字長が長いほど高スコア、マイナスでNG利用不可 |
| nounnum | INT | 文章中の名詞(ワイルドカード)個数、初回登場文時のもの |
| count | INT | tweetでの登場回数カウント |
| emotion | INT | (未使用) |
| link | TEXT | 後に続きやすいテンプレートのID(未使用) |
template_ruripeco †
名詞を「(*)」で塗りつぶした文章テンプレートを拡張。
人名が入りやすいところは「(+)」、人名が入りにくいところは「(-)」で示す。「(*)」の時は全ての名詞候補が対象となる。
| id | INT | 元の template ID |
| template_rank | TEXT | ランク付きテンプレート文字列 |
noun_follow †
名詞とそれ以外で分けたときの「それ以外」にあたる部位を記録しておく。
主に動詞や接続詞などが含まれる。
| id | incremental INT | テーブル一意なID |
| word | TEXT | 名詞に続く文節 |
| score | INT | 採用スコア(0で未評価、マイナスでNGワード) |
| appear | INT | tweetでの登場回数カウント |
| lastupdate | INT | 最近の更新時間、UNIXスポットタイム |
noun_follow_link †
名詞のあとに続く文節の統計情報。
| id | incremental INT | テーブル一意なID |
| noun | INT | 名詞のnoun_bankにおけるid |
| follow | INT | nounの後に続く文節のnoun_followにおけるid |
| appear | INT | tweetでの登場回数カウント |
| lastupdate | INT | 最近の更新時間、UNIXスポットタイム |
noun_precede_link †
名詞以外の文節から、続く名詞の統計情報。
| id | incremental INT | テーブル一意なID |
| noun | INT | precedeの後にくる名詞のnoun_bankにおけるid |
| precede | INT | nounの前に来る文節のnoun_followにおけるid |
| appear | INT | tweetでの登場回数カウント |
| lastupdate | INT | 最近の更新時間、UNIXスポットタイム |
property †
koruriやruripecoが動作する際の雑多な記憶領域。キーバリューストアード。
| keyname | TEXT | プロパティキー |
| value | INT | 数値value |
| str_value | TEXT | 文字列value |
ruripeco_mention †
ruripeco宛のコメント(@ruripeco)をもらったときに処理するまで置いておくテーブル。
| id | incremental INT | テーブル一意なID |
| user | TEXT | Tweetを送ってくれた人のスクリーンネーム @〜 にして返信する |
| text | TEXT | ruripecoへ寄せられたTweet |
| time | INT | mentionが投稿された時間 |
| process | INT | 処理済みフラグ 0で未処理、1で返信済み |
trend_word †
Twitter上で話題の単語リスト。ruripecoの発言を生成するためのタネとなる。
| id | incremental INT | テーブル一意なID |
| word | TEXT | 話題の単語 |
| lastupdate | INT | 最近の更新時間、UNIXスポットタイム |
hot_url †
はてなブックマーク新着から拾ったおすすめページのネタ。ruripecoがたまにおすすめしてくる情報をストックしておく。
| id | incremental INT | テーブル一意なID |
| url | TEXT | おすすめしたいページのURL |
| title | TEXT | ページタイトル |
| genre | TEXT | はてなブックマークでのカテゴリー名 |
| checktime | INT | RSSから拾い上げた時間 |
| process | INT | 処理済みフラグ 0で未処理、1で既につかったURL |