アブストラクトに頭字語が表示されている 2 つのテーブルを結合しようとしているように思えます。つまり (疑似 SQL):
SELECT acronym.id, document.id
FROM acronym, document
WHERE acronym.value IN explode(documents.abstract)
目的のセマンティクスがあれば、最も単純なアプローチを使用できます。
acronyms = ['ABC', ...]
documents = [(0, "Document zeros discusses the value of ABC in the context of..."), ...]
joins = []
for id, abstract in documents:
for word in abstract.split():
try:
index = acronyms.index(word)
joins.append((id, index))
except ValueError:
pass # word not an acronym
これは単純な実装です。ただし、acronyms.index は線形検索を実行するため (最大の配列も同様)、実行時間は n 乗になります。最初に頭字語のハッシュ インデックスを作成することで、アルゴリズムを改善できます。
acronyms = ['ABC', ...]
documents = [(0, "Document zeros discusses the value of ABC in the context of..."), ...]
index = dict((acronym, idx) for idx, acronym in enumberate(acronyms))
joins = []
for id, abstract in documents:
for word in abstract.split():
try
joins.append((id, index[word]))
except KeyError:
pass # word not an acronym
もちろん、実際のデータベースの使用を検討することもできます。そうすれば、結合を手動で実装する必要がなくなります。