在我看来,您正在尝试将首字母缩略词出现在摘要中的两个表连接起来。即(伪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
这是一个简单的实现;然而,它有 n 立方运行时间,因为 acronyms.index 执行线性搜索(我们最大的数组,不少于)。我们可以通过首先构建首字母缩写词的哈希索引来改进算法:
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
当然,您可能要考虑使用实际的数据库。这样您就不必手动实现连接。