我使用该软件包pdfpages
将扫描和 OCR 的 PDF 包含到我的 LaTeX 文档中,我需要对它们进行索引(超过 200 页)。我有一个纯文本 .txt 文件,其中包含我想在 OCR 的 PDF 中找到的所有关键字,然后应该对 OCR 的 PDF 中存在的那些关键字进行索引。
实现这个的最佳方法是什么?
答案1
正如其他人所说,这不能产生好的索引,因为并非每个术语的用法都很重要,这无法找到概念,不会有交叉引用,无法处理同义词,同音词等。
但如果你真的想要,lua 中有一个简单的脚本autoindex.lua
:
#!/usr/bin/env texlua
local indexterms = arg[1]
local file = io.open(indexterms,"r")
if not file then
print("Cannot load index terms: ".. inputfile)
os.exit()
end
local terms = {}
for line in file:lines() do
terms[#terms + 1] = line
end
file:close()
local text = io.read("*all")
local page = 1
local words = {}
-- Process pages
for t in text:gmatch("[^\f]*") do
--tokenize words
--add more characters which can't be part of words
for x in t:gmatch("([^%s%.,!%?%(%)%-i@%$]+)") do
local x = string.lower(x) -- normalize strings. note that this doesn't handle unicode
local w = words[x] or {}
w[page] = true
words[x] = w
end
page = page + 1
end
for _, term in pairs(terms) do
local match = words[term] or {}
for page,_ in pairs(match) do
print('\indexentry{'..term..'}{'..page..'}')
end
end
您必须首先pdf
使用实用程序将文件转换为文本pdftotext
:
pdftotext filename.pdf outputfile.txt
这将保留分页符。然后像这样调用此脚本:
texlua autoindex.lua filewithterms < outputfile.txt > indexfile.idx
makeindex
这会将标准格式的条目写入indexfile.idx
:
indexentry{hello}{13}
indexentry{hello}{9}
indexentry{hello}{7}
indexentry{world}{7}
indexentry{world}{3}
indexentry{world}{13}
indexentry{world}{9}
indexentry{world}{5}
您可以使用makeindex
或xindy
然后创建索引。