Closed3

転置インデックスを実際に試してみる

kun432kun432

ChatGPT調べ

転置インデックスとは?

転置インデックスは、検索エンジン(例: Google)が情報を速く検索できるようにするための技術の一つです。言葉の意味は、文字通り「逆さまにしたインデックス」ということです。この「逆さまにした」という部分がどういうことかを、日常生活での例を使って説明します。

想像してみてください。あなたが図書館の司書さんで、たくさんの本がある大きな図書館を管理しています。ある日、来客が「りんご」という言葉が出てくる本を探していると言ってきました。どうやって探しますか?

  1. 普通の方法: すべての本を一つ一つ開いて、「りんご」という言葉を探す。これは時間がかかります。
  2. 転置インデックスを使った方法: あらかじめ「りんご」という言葉が出てくる本のリストを作っておき、それを見るだけ。これならすぐに答えられますね。

この「あらかじめ作っておいたリスト」が転置インデックスです。言葉ごとにどの本に出てくるのかのリストを作っておくことで、検索が速くなります。

ChatGPTに書かせてみる

kun432kun432

Colaboratoryで。sudachiをインストール。

!pip install sudachipy sudachidict-core sudachidict-core sudachidict-small sudachidict-full

データを用意

docs = [
    "トウカイテイオー(欧字名:Tokai Teio、1988年4月20日 - 2013年8月30日)は、日本の競走馬、種牡馬。七冠馬シンボリルドルフの初年度産駒の一頭であり、日本調教馬として最初の国際G1競走優勝馬である[注 1]。1991年度JRA賞年度代表馬、最優秀4歳牡馬および最優秀父内国産馬、1993年度JRA賞特別賞受賞。 1995年、顕彰馬に選出。主な勝ち鞍は1991年皐月賞、東京優駿(日本ダービー)、1992年ジャパンカップ、1993年有馬記念など。「皇帝」と称された父から連想して付けられた馬名より「帝王」[6]、幾度もの骨折から復活の勝利を挙げた競走生活から「奇跡の名馬」とも呼ばれる。",
    "ナリタブライアン(欧字名:Narita Brian、1991年5月3日 - 1998年9月27日)は、日本の競走馬、種牡馬。中央競馬史上5頭目のクラシック三冠馬であり、そのトレードマークから「シャドーロールの怪物」という愛称で親しまれた。1993年8月にデビューし、同年11月から1995年3月にかけてクラシック三冠を含むGI5連勝、10連続連対を達成し、1993年JRA賞最優秀3歳牡馬、1994年JRA賞年度代表馬および最優秀4歳牡馬に選出された。1995年春に故障(股関節炎)を発症したあとは低迷し、6戦して重賞を1勝するにとどまったが(GIは5戦して未勝利)、第44回阪神大賞典におけるマヤノトップガンとのマッチレースや短距離戦である第26回高松宮杯への出走によってファンの話題を集めた。第26回高松宮杯出走後に発症した屈腱炎が原因となって1996年10月に競走馬を引退した。引退後は種牡馬となったが、1998年9月に胃破裂を発症し、安楽死の措置がとられた。半兄に1993年のJRA賞年度代表馬ビワハヤヒデがいる。1997年日本中央競馬会 (JRA) の顕彰馬に選出。",
    "エアグルーヴ(欧字名:Air Groove、1993年4月6日 - 2013年4月23日)は、日本の競走馬、繁殖牝馬。1996年に優駿牝馬(オークス、GI)を優勝し、1983年の同レースを制した母・ダイナカールとの母娘2代での制覇を成し遂げた。1997年には天皇賞(秋)(GI)を優勝し、同年、牝馬としては1971年のトウメイ以来26年ぶりとなる年度代表馬に選出された。牡馬と互角以上に渡り合った戦績から「女帝」と称される[4]。その他の勝ち鞍に、1996年のチューリップ賞(GIII)、1997年の札幌記念(GII)、マーメイドステークス(GIII)、1998年の札幌記念(GII)、産経大阪杯(GII)。現役引退後には繁殖牝馬となり、2003年・2004年のエリザベス女王杯勝ち馬アドマイヤグルーヴ(父サンデーサイレンス)、2012年のクイーンエリザベス2世カップ勝ち馬のルーラーシップ(父キングカメハメハ)と2頭のGI勝ち馬を輩出した。",
    "タイキシャトル(欧字名:Taiki Shuttle、1994年3月23日 - 2022年8月17日)は、日本の競走馬、種牡馬。主戦騎手は岡部幸雄(ただし2戦は横山典弘が騎乗)。フランスのジャック・ル・マロワ賞を含め国内外でGI競走5勝を挙げ、1998年に短距離路線で活躍した競走馬として、また外国産馬として中央競馬史上初めて年度代表馬に選出され、同年フランスの年度代表馬顕彰(エルメス賞)において最優秀古馬に選出された。引退後の1999年1月28日には、史上25頭目の顕彰馬に選出された。"
]

転置インデックスを作成するコード

from sudachipy import Dictionary, Tokenizer
from collections import defaultdict
from pprint import pprint

tokenizer = Dictionary(dict="full").create()
mode = Tokenizer.SplitMode.C

def tokenize(text):
    sentences = text.split("。")
    tokens = []
    for sentence in sentences:
        tokens.extend([t.normalized_form() for t in tokenizer.tokenize(sentence, mode)])

    return tokens

# 転置インデックスを作成
def create_inverted_index(docs):
    inverted_index = defaultdict(lambda: [0]*len(docs)) # 各ドキュメントの出現情報を保持するリストをデフォルトに

    for doc_id, doc in enumerate(docs):
        tokens = tokenize(doc)
        unique_tokens = set(tokens)  # 重複を除去

        for token in unique_tokens:
            inverted_index[token][doc_id] = 1

    return inverted_index

inverted_index = create_inverted_index(docs)
pprint(inverted_index)

実行結果

defaultdict(<function create_inverted_index.<locals>.<lambda> at 0x7eb7656656c0>,
            {' ': [1, 1, 1, 1],
             '(': [1, 1, 1, 1],
             ')': [1, 1, 1, 1],
             '-': [1, 1, 1, 1],
             '1': [1, 1, 0, 1],
             '10': [0, 1, 0, 0],
             '11': [0, 1, 0, 0],
             '17': [0, 0, 0, 1],
             '1971': [0, 0, 1, 0],
             '1983': [0, 0, 1, 0],
             '1988': [1, 0, 0, 0],
             '1991': [1, 1, 0, 0],
             '1992': [1, 0, 0, 0],
             '1993': [1, 1, 1, 0],
             '1994': [0, 1, 0, 1],
             '1995': [1, 1, 0, 0],
             '1996': [0, 1, 1, 0],
             '1997': [0, 1, 1, 0],
             '1998': [0, 1, 1, 1],
             '1999': [0, 0, 0, 1],
             '2': [0, 0, 1, 1],
             '20': [1, 0, 0, 0],
             '2003': [0, 0, 1, 0],
             '2004': [0, 0, 1, 0],
             '2012': [0, 0, 1, 0],
             '2013': [1, 0, 1, 0],
             '2022': [0, 0, 0, 1],
             '23': [0, 0, 1, 1],
             '25': [0, 0, 0, 1],
             '26': [0, 1, 1, 0],
             '27': [0, 1, 0, 0],
             '28': [0, 0, 0, 1],
             '3': [0, 1, 0, 1],
             '30': [1, 0, 0, 0],
             '4': [1, 1, 1, 0],
             '44': [0, 1, 0, 0],
             '5': [0, 1, 0, 1],
             '6': [1, 1, 1, 0],
             '7': [1, 0, 0, 0],
             '8': [1, 1, 0, 1],
             '9': [0, 1, 0, 0],
             ':': [1, 1, 1, 1],
             'GI': [0, 1, 1, 1],
             'GII': [0, 0, 1, 0],
             'GIII': [0, 0, 1, 0],
             'JRA': [0, 1, 0, 0],
             'JRA賞': [1, 1, 0, 0],
             'JRA賞特別賞': [1, 0, 0, 0],
             'Sunday Silence': [0, 0, 1, 0],
             'TAIKI': [0, 0, 0, 1],
             'TOKAI': [1, 0, 0, 0],
             '[': [1, 0, 1, 0],
             ']': [1, 0, 1, 0],
             'brian': [0, 1, 0, 0],
             'g': [1, 0, 0, 0],
             'narita': [0, 1, 0, 0],
             'teio': [1, 0, 0, 0],
             '、': [1, 1, 1, 1],
             '「': [1, 1, 1, 0],
             '」': [1, 1, 1, 0],
             'おく': [0, 1, 0, 1],
             'かける': [0, 1, 0, 0],
             'から': [1, 1, 1, 0],
             'が': [0, 1, 0, 1],
             'た': [1, 1, 1, 1],
             'だ': [1, 1, 0, 0],
             'て': [1, 1, 1, 1],
             'で': [0, 1, 1, 1],
             'と': [1, 1, 1, 1],
             'など': [1, 0, 0, 0],
             'に': [1, 1, 1, 1],
             'の': [1, 1, 1, 1],
             'は': [1, 1, 1, 1],
             'へ': [0, 1, 0, 0],
             'も': [1, 0, 0, 0],
             'や': [0, 1, 0, 0],
             'より': [1, 0, 0, 0],
             'よる': [0, 1, 0, 0],
             'られる': [1, 0, 0, 0],
             'り': [0, 1, 0, 0],
             'れる': [1, 1, 1, 1],
             'を': [1, 1, 1, 1],
             'アドマイヤグルーブ': [0, 0, 1, 0],
             'エアグルーヴ': [0, 0, 1, 0],
             'エアー': [0, 0, 1, 0],
             'エリザベス女王': [0, 0, 1, 0],
             'エルメス': [0, 0, 0, 1],
             'オークス': [0, 0, 1, 0],
             'カップ': [0, 0, 1, 0],
             'カール': [0, 0, 1, 0],
             'キングカメハメハ': [0, 0, 1, 0],
             'クイーン・エリザベス': [0, 0, 1, 0],
             'クラシック': [0, 1, 0, 0],
             'グルーブ': [0, 0, 1, 0],
             'シャトル': [0, 0, 0, 1],
             'シャドーロール': [0, 1, 0, 0],
             'シンボリルドルフ': [1, 0, 0, 0],
             'ジャック': [0, 0, 0, 1],
             'ジャパンカップ': [1, 0, 0, 0],
             'タイキシャトル': [0, 0, 0, 1],
             'ダイナ': [0, 0, 1, 0],
             'チューリップ賞': [0, 0, 1, 0],
             'デビュー': [0, 1, 0, 0],
             'トウカイテイオー': [1, 0, 0, 0],
             'トウメイ': [0, 0, 1, 0],
             'トレードマーク': [0, 1, 0, 0],
             'ナリタブライアン': [0, 1, 0, 0],
             'ビワハヤヒデ': [0, 1, 0, 0],
             'ファン': [0, 1, 0, 0],
             'フランス': [0, 0, 0, 1],
             'マッチ': [0, 1, 0, 0],
             'マヤノトップガン': [0, 1, 0, 0],
             'マロワ': [0, 0, 0, 1],
             'マーメイドステークス': [0, 0, 1, 0],
             'ル': [0, 0, 0, 1],
             'ルーラーシップ': [0, 0, 1, 0],
             'レース': [0, 1, 1, 0],
             '・': [0, 0, 1, 1],
             '三冠馬': [0, 1, 0, 0],
             '上': [0, 1, 0, 1],
             '上げる': [1, 0, 0, 1],
             '世': [0, 0, 1, 0],
             '中央競馬': [0, 1, 0, 1],
             '主な': [1, 0, 0, 0],
             '主戦騎手': [0, 0, 0, 1],
             '互角': [0, 0, 1, 0],
             '他': [0, 0, 1, 0],
             '付ける': [1, 0, 0, 0],
             '代': [0, 0, 1, 0],
             '以上': [0, 0, 1, 0],
             '以来': [0, 0, 1, 0],
             '但し': [0, 0, 0, 1],
             '低迷': [0, 1, 0, 0],
             '優勝': [1, 0, 1, 0],
             '優駿牝馬': [0, 0, 1, 0],
             '兄': [0, 1, 0, 0],
             '其の': [0, 1, 1, 0],
             '典': [0, 1, 0, 0],
             '冠': [1, 1, 0, 0],
             '出走': [0, 1, 0, 0],
             '初': [1, 0, 0, 0],
             '初めて': [0, 0, 0, 1],
             '制する': [0, 0, 1, 0],
             '制覇': [0, 0, 1, 0],
             '勝': [0, 1, 0, 1],
             '勝ち鞍': [1, 0, 1, 0],
             '勝ち馬': [0, 0, 1, 0],
             '勝利': [1, 1, 0, 0],
             '半': [0, 1, 0, 0],
             '原因': [0, 1, 0, 0],
             '又': [0, 0, 0, 1],
             '及び': [1, 1, 0, 0],
             '取る': [0, 1, 0, 0],
             '受賞': [1, 0, 0, 0],
             '古馬': [0, 0, 0, 1],
             '史': [0, 1, 0, 1],
             '史上': [0, 0, 0, 1],
             '同': [0, 0, 1, 0],
             '同年': [0, 1, 1, 1],
             '名': [1, 1, 1, 1],
             '名馬': [1, 0, 0, 0],
             '含む': [0, 1, 0, 0],
             '含める': [0, 0, 0, 1],
             '呼ぶ': [1, 0, 0, 0],
             '回': [0, 1, 0, 0],
             '国内外': [0, 0, 0, 1],
             '国際': [1, 0, 0, 0],
             '外国産馬': [0, 0, 0, 1],
             '大賞': [0, 1, 0, 0],
             '大阪杯': [0, 0, 1, 0],
             '天皇賞': [0, 0, 1, 0],
             '奇跡': [1, 0, 0, 0],
             '女帝': [0, 0, 1, 0],
             '安楽死': [0, 1, 0, 0],
             '居る': [0, 1, 0, 0],
             '屈腱炎': [0, 1, 0, 0],
             '岡部幸雄': [0, 0, 0, 1],
             '帝王': [1, 0, 0, 0],
             '年': [1, 1, 1, 1],
             '年度': [1, 0, 0, 0],
             '年度代表馬': [1, 1, 1, 1],
             '幾度': [1, 0, 0, 0],
             '引退': [0, 1, 0, 0],
             '引退後': [0, 1, 0, 1],
             '後': [0, 1, 0, 0],
             '復活': [1, 0, 0, 0],
             '怪物': [0, 1, 0, 0],
             '愛称': [0, 1, 0, 0],
             '成し遂げる': [0, 0, 1, 0],
             '成る': [0, 1, 1, 0],
             '戦': [0, 1, 0, 1],
             '戦績': [0, 0, 1, 0],
             '振り': [0, 0, 1, 0],
             '措置': [0, 1, 0, 0],
             '故障': [0, 1, 0, 0],
             '日': [1, 1, 1, 1],
             '日本': [1, 1, 1, 1],
             '日本ダービー': [1, 0, 0, 0],
             '日本中央競馬会': [0, 1, 0, 0],
             '春': [0, 1, 0, 0],
             '最優秀': [1, 1, 0, 1],
             '最優秀父内国産馬': [1, 0, 0, 0],
             '最初': [1, 0, 0, 0],
             '月': [1, 1, 1, 1],
             '有る': [1, 1, 0, 0],
             '有馬記念': [1, 0, 0, 0],
             '未': [0, 1, 0, 0],
             '札幌記念': [0, 0, 1, 0],
             '杯': [0, 1, 1, 0],
             '東京優駿': [1, 0, 0, 0],
             '横山典弘': [0, 0, 0, 1],
             '欧字': [1, 1, 1, 1],
             '歳': [1, 1, 0, 0],
             '母': [0, 0, 1, 0],
             '母娘': [0, 0, 1, 0],
             '注': [1, 0, 0, 0],
             '活躍': [0, 0, 0, 1],
             '渡り合う': [0, 0, 1, 0],
             '為る': [1, 1, 1, 1],
             '父': [1, 0, 1, 0],
             '牝馬': [0, 0, 1, 0],
             '牡馬': [1, 1, 1, 0],
             '現役引退後': [0, 0, 1, 0],
             '生活': [1, 0, 0, 0],
             '産経': [0, 0, 1, 0],
             '産駒': [1, 0, 0, 0],
             '留まる': [0, 1, 0, 0],
             '発症': [0, 1, 0, 0],
             '皇帝': [1, 0, 0, 0],
             '皐月賞': [1, 0, 0, 0],
             '目': [0, 1, 0, 1],
             '短距離': [0, 1, 0, 1],
             '破裂': [0, 1, 0, 0],
             '秋': [0, 0, 1, 0],
             '称する': [1, 0, 1, 0],
             '種牡馬': [1, 1, 0, 1],
             '競走': [1, 0, 0, 1],
             '競走馬': [1, 1, 1, 1],
             '第': [0, 1, 0, 0],
             '繁殖牝馬': [0, 0, 1, 0],
             '股': [0, 1, 0, 0],
             '胃': [0, 1, 0, 0],
             '親しむ': [0, 1, 0, 0],
             '言う': [0, 1, 0, 0],
             '話題': [0, 1, 0, 0],
             '調教': [1, 0, 0, 0],
             '賞': [0, 0, 0, 1],
             '路線': [0, 0, 0, 1],
             '輩出': [0, 0, 1, 0],
             '連勝': [0, 1, 0, 0],
             '連対': [0, 1, 0, 0],
             '連想': [1, 0, 0, 0],
             '連続': [0, 1, 0, 0],
             '達成': [0, 1, 0, 0],
             '選出': [1, 1, 1, 1],
             '重賞': [0, 1, 0, 0],
             '関節炎': [0, 1, 0, 0],
             '阪神': [0, 1, 0, 0],
             '集める': [0, 1, 0, 0],
             '頭': [1, 1, 1, 1],
             '顕彰': [0, 0, 0, 1],
             '顕彰馬': [1, 1, 0, 1],
             '馬': [1, 0, 0, 0],
             '馬名': [1, 0, 0, 0],
             '騎乗': [0, 0, 0, 1],
             '骨折': [1, 0, 0, 0],
             '高松宮': [0, 1, 0, 0]})

これを検索してみる。

print(inverted_index["牡馬"])
print(inverted_index["顕彰馬"])

# AND検索
print([a & b for a, b in zip(inverted_index["牡馬"], inverted_index["顕彰馬"])])

# OR検索
print([a | b for a, b in zip(inverted_index["牡馬"], inverted_index["顕彰馬"])])
[1, 1, 1, 0]
[1, 1, 0, 1]
[1, 1, 0, 0]
[1, 1, 1, 1]
kun432kun432

ドキュメントの量が多くなると、0が多くなって無駄が多くなる。

上記にターム辞書・ポスティングリストの概念を追加してみる。出現位置も付与する。

from sudachipy import Dictionary, Tokenizer
from collections import defaultdict
from pprint import pprint

tokenizer = Dictionary(dict="full").create()
mode = Tokenizer.SplitMode.C

def tokenize(text):
    sentences = text.split("。")
    tokens = []
    for sentence in sentences:
        tokens.extend([t.normalized_form() for t in tokenizer.tokenize(sentence, mode)])

    return tokens

def create_inverted_index_with_positions(docs):
    inverted_index = defaultdict(dict)

    for doc_id, doc in enumerate(docs):
        tokens = tokenize(doc)
        for position, token in enumerate(tokens):
            if token not in inverted_index:
                inverted_index[token] = {}
            if doc_id not in inverted_index[token]:
                inverted_index[token][doc_id] = []
            inverted_index[token][doc_id].append(position)

    return inverted_index

inverted_index = create_inverted_index_with_positions(docs)
pprint(inverted_index)
defaultdict(<class 'dict'>,
            {' ': {0: [6, 15, 17, 64, 83],
                   1: [6, 15, 17, 261, 265],
                   2: [6, 15, 17],
                   3: [6, 15, 17]},
             '(': {0: [1, 98],
                   1: [1, 121, 147, 262],
                   2: [1, 36, 73, 76, 134, 142, 147, 155, 161, 181, 196],
                   3: [1, 35, 97]},
             ')': {0: [24, 100],
                   1: [24, 124, 156, 264],
                   2: [24, 40, 75, 78, 136, 144, 149, 157, 163, 184, 199],
                   3: [24, 43, 100]},
             '-': {0: [16], 1: [16], 2: [16], 3: [16]},
             '1': {0: [41, 56, 65], 1: [140], 3: [115]},
             '10': {1: [87, 213]},
             '11': {1: [68]},
             '17': {3: [22]},
             '1971': {2: [90]},
             '1983': {2: [45]},
             '1988': {0: [9]},
             '1991': {0: [67, 93], 1: [9]},
             '1992': {0: [102]},
             '1993': {0: [79, 106], 1: [59, 94, 250], 2: [9]},
             '1994': {1: [102], 3: [9]},
             '1995': {0: [84], 1: [71, 116]},
             '1996': {1: [211], 2: [32, 130]},
             '1997': {1: [258], 2: [68, 138]},
             '1998': {1: [18, 229], 2: [151], 3: [63]},
             '1999': {3: [113]},
             '2': {2: [60, 190, 201], 3: [37]},
             '20': {0: [13]},
             '2003': {2: [171]},
             '2004': {2: [174]},
             '2012': {2: [186]},
             '2013': {0: [18], 2: [18]},
             '2022': {3: [18]},
             '23': {2: [22], 3: [13]},
             '25': {3: [123]},
             '26': {1: [178, 195], 2: [95]},
             '27': {1: [22]},
             '28': {3: [117]},
             '3': {1: [13, 73, 79, 98], 3: [11]},
             '30': {0: [22]},
             '4': {0: [11, 73], 1: [108], 2: [11, 20, 122]},
             '44': {1: [159]},
             '5': {1: [11, 35, 84, 150], 3: [58]},
             '6': {0: [131], 1: [134], 2: [13]},
             '7': {0: [32]},
             '8': {0: [20], 1: [61], 3: [20]},
             '9': {1: [20, 231]},
             ':': {0: [4], 1: [4], 2: [4], 3: [4]},
             'GI': {1: [83, 148], 2: [39, 77, 204], 3: [56]},
             'GII': {2: [143, 156, 162]},
             'GIII': {2: [135, 148]},
             'JRA': {1: [263]},
             'JRA賞': {0: [69], 1: [96, 104, 253]},
             'JRA賞特別賞': {0: [81]},
             'Sunday Silence': {2: [183]},
             'TAIKI': {3: [5]},
             'TOKAI': {0: [5]},
             '[': {0: [62, 130], 2: [121]},
             ']': {0: [66, 132], 2: [123]},
             'brian': {1: [7]},
             'g': {0: [55]},
             'narita': {1: [5]},
             'teio': {0: [7]},
             '、': {0: [8, 26, 30, 45, 71, 78, 86, 96, 101, 105, 133],
                   1: [8, 26, 30, 43, 66, 86, 93, 101, 133, 157, 228, 239],
                   2: [8,
                       26,
                       30,
                       38,
                       44,
                       82,
                       84,
                       129,
                       137,
                       145,
                       150,
                       158,
                       170,
                       185],
                   3: [8, 26, 30, 62, 76, 91, 121]},
             '「': {0: [110, 127, 148], 1: [47], 2: [115]},
             '」': {0: [112, 129, 152], 1: [51], 2: [117]},
             'おく': {1: [165], 3: [102]},
             'かける': {1: [76]},
             'から': {0: [118, 138, 147], 1: [46, 70], 2: [114]},
             'が': {1: [146, 206, 227, 243, 256], 3: [41]},
             'た': {0: [116, 124, 144],
                   1: [58, 115, 128, 145, 193, 204, 220, 226, 246],
                   2: [52, 67, 105, 112, 209],
                   3: [71, 110, 132]},
             'だ': {0: [43, 60], 1: [41, 175]},
             'て': {0: [51, 121],
                   1: [77, 137, 153, 187, 210],
                   2: [88],
                   3: [75, 81, 103]},
             'で': {1: [55], 2: [62], 3: [55, 68]},
             'と': {0: [49, 113, 153],
                   1: [52, 168, 208, 224],
                   2: [57, 86, 98, 107, 118, 168, 200],
                   3: [73, 79]},
             'など': {0: [109]},
             'に': {0: [88],
                   1: [63,
                       75,
                       111,
                       119,
                       143,
                       164,
                       185,
                       201,
                       215,
                       233,
                       249,
                       268],
                   2: [34, 70, 101, 110, 128, 165],
                   3: [65, 87, 101, 106, 119, 128]},
             'の': {0: [28, 36, 40, 53, 136, 140, 150],
                   1: [28, 38, 49, 169, 183, 189, 241, 252, 266],
                   2: [28,
                       47,
                       58,
                       63,
                       92,
                       126,
                       132,
                       140,
                       153,
                       176,
                       188,
                       194,
                       203],
                   3: [28, 45, 94, 112, 126]},
             'は': {0: [25, 92],
                   1: [25, 130, 149, 222],
                   2: [25, 71, 89, 166],
                   3: [25, 33, 39, 120]},
             'へ': {1: [182]},
             'も': {0: [135, 154]},
             'や': {1: [172]},
             'より': {0: [126]},
             'よる': {1: [186]},
             'られる': {0: [123]},
             'り': {1: [166]},
             'れる': {0: [115, 156],
                    1: [57, 114, 245],
                    2: [104, 120],
                    3: [90, 109, 131]},
             'を': {0: [142],
                   1: [81, 90, 125, 139, 191, 217, 236],
                   2: [41, 50, 65, 79, 206],
                   3: [52, 60]},
             'アドマイヤグルーブ': {2: [180]},
             'エアグルーヴ': {2: [0]},
             'エアー': {2: [5]},
             'エリザベス女王': {2: [177]},
             'エルメス': {3: [98]},
             'オークス': {2: [37]},
             'カップ': {2: [192]},
             'カール': {2: [56]},
             'キングカメハメハ': {2: [198]},
             'クイーン・エリザベス': {2: [189]},
             'クラシック': {1: [39, 78]},
             'グルーブ': {2: [7]},
             'シャトル': {3: [7]},
             'シャドーロール': {1: [48]},
             'シンボリルドルフ': {0: [35]},
             'ジャック': {3: [46]},
             'ジャパンカップ': {0: [104]},
             'タイキシャトル': {3: [0]},
             'ダイナ': {2: [55]},
             'チューリップ賞': {2: [133]},
             'デビュー': {1: [64]},
             'トウカイテイオー': {0: [0]},
             'トウメイ': {2: [93]},
             'トレードマーク': {1: [45]},
             'ナリタブライアン': {1: [0]},
             'ビワハヤヒデ': {1: [255]},
             'ファン': {1: [188]},
             'フランス': {3: [44, 93]},
             'マッチ': {1: [170]},
             'マヤノトップガン': {1: [167]},
             'マロワ': {3: [50]},
             'マーメイドステークス': {2: [146]},
             'ル': {3: [48]},
             'ルーラーシップ': {2: [195]},
             'レース': {1: [171], 2: [49]},
             '・': {2: [54, 173], 3: [47, 49]},
             '三冠馬': {1: [40]},
             '上': {1: [34], 3: [84]},
             '上げる': {0: [143], 3: [61]},
             '世': {2: [191]},
             '中央競馬': {1: [32], 3: [82]},
             '主な': {0: [90]},
             '主戦騎手': {3: [32]},
             '互角': {2: [108]},
             '他': {2: [125]},
             '付ける': {0: [122]},
             '代': {2: [61]},
             '以上': {2: [109]},
             '以来': {2: [94]},
             '但し': {3: [36]},
             '低迷': {1: [131]},
             '優勝': {0: [58], 2: [42, 80]},
             '優駿牝馬': {2: [35]},
             '兄': {1: [248]},
             '其の': {1: [44], 2: [124]},
             '典': {1: [163]},
             '冠': {0: [33], 1: [80]},
             '出走': {1: [184, 199]},
             '初': {0: [37]},
             '初めて': {3: [85]},
             '制する': {2: [51]},
             '制覇': {2: [64]},
             '勝': {1: [141], 3: [59]},
             '勝ち鞍': {0: [91], 2: [127]},
             '勝ち馬': {2: [179, 193, 205]},
             '勝利': {0: [141], 1: [155]},
             '半': {1: [247]},
             '原因': {1: [207]},
             '又': {3: [77]},
             '及び': {0: [76], 1: [106]},
             '取る': {1: [244]},
             '受賞': {0: [82]},
             '古馬': {3: [105]},
             '史': {1: [33], 3: [83]},
             '史上': {3: [122]},
             '同': {2: [48]},
             '同年': {1: [67], 2: [83], 3: [92]},
             '名': {0: [3], 1: [3], 2: [3], 3: [3]},
             '名馬': {0: [151]},
             '含む': {1: [82]},
             '含める': {3: [53]},
             '呼ぶ': {0: [155]},
             '回': {1: [160, 179, 196]},
             '国内外': {3: [54]},
             '国際': {0: [54]},
             '外国産馬': {3: [78]},
             '大賞': {1: [162]},
             '大阪杯': {2: [160]},
             '天皇賞': {2: [72]},
             '奇跡': {0: [149]},
             '女帝': {2: [116]},
             '安楽死': {1: [240]},
             '居る': {1: [257]},
             '屈腱炎': {1: [205]},
             '岡部幸雄': {3: [34]},
             '帝王': {0: [128]},
             '年': {0: [10, 19, 85, 94, 103, 107],
                   1: [10, 19, 60, 72, 95, 103, 117, 212, 230, 251, 259],
                   2: [10,
                       19,
                       33,
                       46,
                       69,
                       91,
                       96,
                       131,
                       139,
                       152,
                       172,
                       175,
                       187],
                   3: [10, 19, 64, 114]},
             '年度': {0: [38, 68, 80]},
             '年度代表馬': {0: [70], 1: [105, 254], 2: [100], 3: [86, 95]},
             '幾度': {0: [134]},
             '引退': {1: [218]},
             '引退後': {1: [221], 3: [111]},
             '後': {1: [129, 200]},
             '復活': {0: [139]},
             '怪物': {1: [50]},
             '愛称': {1: [54]},
             '成し遂げる': {2: [66]},
             '成る': {1: [209, 225], 2: [99, 169]},
             '戦': {1: [135, 151, 174], 3: [38]},
             '戦績': {2: [113]},
             '振り': {2: [97]},
             '措置': {1: [242]},
             '故障': {1: [120]},
             '日': {0: [14, 23], 1: [14, 23], 2: [14, 23], 3: [14, 23, 118]},
             '日本': {0: [27, 46], 1: [27], 2: [27], 3: [27]},
             '日本ダービー': {0: [99]},
             '日本中央競馬会': {1: [260]},
             '春': {1: [118]},
             '最優秀': {0: [72], 1: [97, 107], 3: [104]},
             '最優秀父内国産馬': {0: [77]},
             '最初': {0: [52]},
             '月': {0: [12, 21],
                   1: [12, 21, 62, 69, 74, 214, 232],
                   2: [12, 21],
                   3: [12, 21, 116]},
             '有る': {0: [44, 61], 1: [42, 176]},
             '有馬記念': {0: [108]},
             '未': {1: [154]},
             '札幌記念': {2: [141, 154]},
             '杯': {1: [181, 198], 2: [178]},
             '東京優駿': {0: [97]},
             '横山典弘': {3: [40]},
             '欧字': {0: [2], 1: [2], 2: [2], 3: [2]},
             '歳': {0: [74], 1: [99, 109]},
             '母': {2: [53]},
             '母娘': {2: [59]},
             '注': {0: [63]},
             '活躍': {3: [69]},
             '渡り合う': {2: [111]},
             '為る': {0: [50, 120],
                    1: [65, 92, 113, 127, 132, 136, 142, 152, 203, 219, 238],
                    2: [43, 81, 87, 103, 208],
                    3: [70, 74, 80, 89, 108, 130]},
             '父': {0: [117], 2: [182, 197]},
             '牝馬': {2: [85]},
             '牡馬': {0: [75], 1: [100, 110], 2: [106]},
             '現役引退後': {2: [164]},
             '生活': {0: [146]},
             '産経': {2: [159]},
             '産駒': {0: [39]},
             '留まる': {1: [144]},
             '発症': {1: [126, 202, 237]},
             '皇帝': {0: [111]},
             '皐月賞': {0: [95]},
             '目': {1: [37], 3: [125]},
             '短距離': {1: [173], 3: [66]},
             '破裂': {1: [235]},
             '秋': {2: [74]},
             '称する': {0: [114], 2: [119]},
             '種牡馬': {0: [31], 1: [31, 223], 3: [31]},
             '競走': {0: [57, 145], 3: [57]},
             '競走馬': {0: [29], 1: [29, 216], 2: [29], 3: [29, 72]},
             '第': {1: [158, 177, 194]},
             '繁殖牝馬': {2: [31, 167]},
             '股': {1: [122]},
             '胃': {1: [234]},
             '親しむ': {1: [56]},
             '言う': {1: [53]},
             '話題': {1: [190]},
             '調教': {0: [47]},
             '賞': {3: [51, 99]},
             '路線': {3: [67]},
             '輩出': {2: [207]},
             '連勝': {1: [85]},
             '連対': {1: [89]},
             '連想': {0: [119]},
             '連続': {1: [88]},
             '達成': {1: [91]},
             '選出': {0: [89], 1: [112, 269], 2: [102], 3: [88, 107, 129]},
             '重賞': {1: [138]},
             '関節炎': {1: [123]},
             '阪神': {1: [161]},
             '集める': {1: [192]},
             '頭': {0: [42], 1: [36], 2: [202], 3: [124]},
             '顕彰': {3: [96]},
             '顕彰馬': {0: [87], 1: [267], 3: [127]},
             '馬': {0: [34, 48, 59]},
             '馬名': {0: [125]},
             '騎乗': {3: [42]},
             '骨折': {0: [137]},
             '高松宮': {1: [180, 197]}})

実際にはターム辞書とポスティングリストは別々になるっぽい。

このスクラップは2023/10/16にクローズされました