Indexing 如何生成(图书)索引?

Indexing 如何生成(图书)索引?,indexing,Indexing,我需要为一本书创建索引。虽然这项任务一看就很简单——按第一个字母将单词分组,然后进行排序——但这种显而易见的解决方案只适用于美国语言。然而,真正的意义更为复杂。见: 在使用扩展拉丁字母的语言中,计算机风格的数字排序和真正的字母排序之间的差异变得很明显。例如,西班牙语中29个字母的字母表将ñ视为n后面的基本字母,而以前将ch和ll分别视为c和l后面的基本字母。Ch和ll仍然被认为是字母,但现在按字母顺序排列为两个字母组合。(新的字母顺序规则是由西班牙皇家学院于1994年发布的。)另一方面,有向图r

我需要为一本书创建索引。虽然这项任务一看就很简单——按第一个字母将单词分组,然后进行排序——但这种显而易见的解决方案只适用于美国语言。然而,真正的意义更为复杂。见:

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

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

DocBook样式表没有解决这个问题

我找到的最佳匹配项是xindy(),但该工具与LaTeX的连接太多


还有其他建议吗?

天真地说,您可以检查文本中的每个单词并创建一个哈希,使用这些单词作为键,并建立一个位置数组(页码?)作为值


但是索引通常比这更为集中。

好吧,在回答了评论之后,我意识到我不需要工具来生成索引,而是需要一个可以根据文化进行排序的库。第一个实验表明,我将使用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")

你能澄清一下你所说的索引是什么意思吗?你想要每一个字,只是重要的字,等等吗?你想拥有页面/文档位置吗?我建议雇佣一个称职的索引器(请参阅)来建立你的索引。当然,这会更贵,但当我在书中查找信息时,通常很清楚人类何时完成了这项工作,而计算机程序何时完成了这项工作。(库尔特·冯内古特(Kurt Vonnegut())甚至说作者不应该为自己的书编制索引。)我指的是索引:书的一部分,就像目录或词汇表一样。例如,第251页。这本书里面已经有了索引标记,现在我应该处理这些标记来创建索引部分。我不知道如何按字母顺序排列单词。我编辑了这个问题,以便更准确地描述这个问题。数据结构对我来说不是问题,语言细节是。