【问题标题】:How to generate (book) indexes?如何生成(书)索引?
【发布时间】:2011-05-22 19:17:06
【问题描述】:

我需要为一本书创建索引。乍一看,这项任务很简单——按第一个字母对单词进行分组,然后对它们进行排序——这个明显的解决方案仅适用于美国语言。然而,真正的词更复杂。见http://en.wikipedia.org/wiki/Collation

计算机风格的数字排序和真正的字母排序之间的区别在使用扩展拉丁字母的语言中变得很明显。例如,西班牙语的 29 个字母将 ñ 视为 n 之后的基本字母,而以前将 ch 和 ll 分别视为 c 和 l 之后的基本字母。 Ch 和 ll 仍被视为字母,但现在按字母顺序排列为两个字母组合。 (新的字母顺序规则由西班牙皇家学院于 1994 年发布。)另一方面,无论有无 1994 年的字母顺序规则,二合字母 rr 都按照预期遵循 rqu。数字排序可能会排序 ñ 错误地跟随 z 并将 ch 视为 c + h,在使用 1994 年之前的字母顺序时也不正确。

我试图找到一个现有的解决方案。

DocBook 样式表不能解决这个问题。

我找到的最佳匹配是 xindy (http://xindy.sourceforge.net/),但是这个工具与 LaTeX 的联系太多了。

还有其他建议吗?

【问题讨论】:

  • 你能澄清一下你所说的索引是什么意思吗?你想要每一个词,只是重要的词,等等?您想要页面/文档位置吗?
  • 我建议聘请一位称职的索引员(请参阅en.wikipedia.org/wiki/Index_(publishing)#Indexer_roles)来构建您的索引。当然,它会更贵,但是当我在书中查找信息时,通常很清楚人类何时完成这项工作与计算机程序何时完成这项工作。 (Kurt Vonnegut (en.wikipedia.org/wiki/Kurt_Vonnegut) 甚至说作者永远不应该索引他或她自己的书。)
  • 我的意思是索引:书的一部分,就像目录或词汇表一样。例如,amazon.com/gp/reader/0596006624/ref=sib_dp_pt#reader-link 第 251 页。这本书里面已经有索引标记,现在我应该处理这些标记来创建一个索引部分。而且我不知道如何按字母顺序排列单词。

标签: indexing


【解决方案1】:

嗯,在回答了 cmets 之后,我意识到我不需要一个生成索引的工具,而是一个可以根据文化进行排序的库。第一个实验表明我将使用 ICU 及其 Python 绑定 PyICU。例如:

import icu
words = ["liche", "lichée", "lichen", "lichénoïde", "licher", "lichoter"]
collator = icu.Collator.createInstance(icu.Locale.getFrance())
for word in sorted(words, cmp=collator.compare):
  print word.decode("string-escape")

【讨论】:

    【解决方案2】:

    您可以天真地检查文本中的每个单词并创建一个散列,使用单词作为键,并构建一个位置数组(页码?)作为值。

    但索引通常比这更受关注。

    【讨论】:

    • 我编辑了问题以更准确地描述问题。数据结构对我来说不是问题,语言细节才是。
    猜你喜欢
    • 2011-07-12
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2015-09-30
    • 2011-03-11
    • 2017-04-06
    • 2020-12-03
    相关资源
    最近更新 更多