Skip to content

ハッシュタグ辞書

Tatsuya Koishi edited this page Nov 14, 2021 · 28 revisions

公開されている辞書

辞書サンプル

multi_field型

”表”のイメージに近いもの。世にある一覧系APIの多くは、この形式のものとして利用できる。

[
  {
    "id": 1,
    "cure_name": "キュアブラック",
    "human_name": "美墨 なぎさ",
    "cv": "本名 陽子",
    "birthday": "2019-10-09T15:00:00.000Z",
    "future_dream": ""
  },
  {
    "id": 2,
    "cure_name": "キュアホワイト",
    "human_name": "雪城 ほのか",
    "cv": "ゆかな",
    "birthday": "2019-04-03T15:00:00.000Z",
    "future_dream": ""
  }
]
  • JSON形式
  • 全体がひとつの配列
  • 配列の各要素はオブジェクト

relative型

派生するハッシュタグを記述できる、モロヘイヤ独自の形式。

{
  "キュアブラック": [
    "美墨 なぎさ",
    "本名 陽子"
  ],
  "美墨 なぎさ": [
    "キュアブラック",
    "本名 陽子"
  ],
  "本名 陽子": [
    "キュアブラック",
    "美墨 なぎさ"
  ]
}
  • JSON形式
  • 全体がひとつのオブジェクト
  • オブジェクトの各要素は配列

mecab型

makoto向けの、MeCab辞書形式。

[
  [
    "愛崎",
    1289,
    1289,
    3000,
    "名詞",
    "固有名詞",
    "人名",
    "",
    "*",
    "*",
    "あいさき",
    "アイサキ",
    "アイサキ"
  ],
  [
    "愛崎えみる",
    1289,
    1289,
    3000,
    "名詞",
    "固有名詞",
    "人名",
    "*",
    "*",
    "*",
    "あいさきめぐみ",
    "アイサキメグミ",
    "アイサキメグミ"
  ]
]

設定サンプル

上記の辞書を dic.example.com サーバに置いたときの設定ファイルに追記すべき設定値は以下のもの。

tagging:
  dictionaries:
    - url: https://dic.example.com/api/multi_word
      name: プリキュア淑女録
      edit:
        url: https://docs.google.com/spreadsheets/d/xxxxx/edit#gid=0
      fields:
        - cure_name
        - human_name
        - cv
    - url: https://dic.example.com/api/relative
      name: 辞書2
      type: relative
    - url: https://dic.example.com/other.json
      name: 辞書3
      type: relative
      fields:
        - field1
        - field2
  • 複数指定可能
  • relative型やmecab型の場合はtypeを指定。
  • 動的なAPIである必要は必ずしもない。手書きのJSONでも可。
  • 辞書のソースがGoogleスプレッドシートである場合は、スプレッドシートのURLを指定。

更新

タスク rake mulukhiya:tagging:dictionary:update を実行し、手動での更新が可能。

辞書APIをつくる

以下、拙作サービス名辞書を、Google Apps Scriptでrelative形式の辞書APIにする例。(Chrome V8エンジンを有効に)

'use strict'

function doGet() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
  const rows = sheet.getDataRange().getValues()
  const keys = rows.splice(0, 1)[0]
  const output = {}
  rows.map(row => {
    const item = {}
    row.map((val, i) => {item[keys[i]] = val})
    output[item.domain] = []
    if (item.words != '') {
      output[item.domain] = item.words.split(',')
      item.words.split(',').map(word => {output[word] = []})
    }
  })
  return ContentService.createTextOutput(JSON.stringify(output))
    .setMimeType(ContentService.MimeType.JSON)
}
Clone this wiki locally