Skip to content

true-runes/suikoden-election-2022-backend

This branch is 1 commit ahead of main.

Folders and files

NameName
Last commit message
Last commit date
Dec 10, 2022
Jul 17, 2022
Jun 5, 2022
Nov 15, 2022
Nov 27, 2022
Jul 11, 2022
Jul 17, 2022
Jun 5, 2022
Jun 24, 2022
Jun 5, 2022
Jun 5, 2022
Jul 3, 2022
Jun 19, 2022
Jun 9, 2022
Jun 9, 2022
Feb 15, 2025
Feb 15, 2025
Feb 15, 2025
Feb 15, 2025
Jun 5, 2022
Jun 22, 2022
Jun 5, 2022
Jun 5, 2022
Nov 27, 2022
Jul 17, 2022
Jun 19, 2022
Nov 27, 2022
Jul 15, 2022

Repository files navigation

On PostgreSQL Services 幻水総選挙2022 バックエンド

On Built-In PostgreSQL 幻水総選挙2022 バックエンド

幻水総選挙2022(バックエンド)

  • いつもの

取得するハッシュタグ

  • #幻水総選挙2022
  • #幻水総選挙2022協力攻撃
  • #幻水総選挙お題小説
  • #幻水総選挙推し台詞
  • #幻水総選挙運動

取得方法は次の通り。日時範囲は任意で。

tweets = BySearchWordTweet.where(search_word: "#幻水総選挙運動").where(tweeted_at: Time.zone.parse("2022-05-01").end_of_day..Time.zone.parse("2022-06-26").end_of_day).remove_duplicated.remove_retweet.remove_specific_user_with_id_number(1471724029).remove_specific_user_with_id_number(1388758231825018881).order(tweeted_at: :asc);

キャラクターデータベースの構築と破壊

  • 5分ぐらいかかる
  • products <-----> characters <-----> nicknames
    • いずれも 多対多 の関係

構築

$ bundle exec rails suikoden_database:import
$ bundle exec rails suikoden_database:destroy

破壊

$ bundle exec rails suikoden_database:destroy

AnalyzeSyntax まわりの流れ

  • ツイート or DM を指定して、Natural Language に投げる
    • 受け取った戻り値を JSON化 するなどして analyze_syntaxes に保存する
    • これを cron する
    • 一つの ツイート or DM につき 1つの analyze_syntax が得られる
      • API の戻り値のレコードをまるまる一つに収めたものである
      • 中身は JSON とかあるので掘っていくと個数は多い
        • sentencestokens が多い
        • なお tokens しか使わない
  • PickupCharacterNames.execute(tweet_or_dm_object) によって候補名が配列で得られる
    • 中身は結構複雑
  • 中身
    • AnalyzeSyntax#check_words によって、キャラ名データベースと比較するべき単語を配列で得る
      • この際、除外条件を継ぎ足し継ぎ足ししていっている
        • 作りは最低なのでリファクタすべき

AnalyzeSyntax 具体的な流れ

c = CloudLanguage.client
context = "テッドとルカに。"
response = NaturalLanguage::Analyzer.analyze_tweet_syntax_by_api(c, context)
attrs = {
  language: response.language,
  sentences: response.sentences.map(&:to_json),
  tokens: response.tokens.map(&:to_json),
  tweet_id: nil,
  direct_message_id: nil,
}
as = AnalyzeSyntax.new(attrs)
PickupCharacterNames.exec(as)

ドキュメント

Google Natural Language