如何生成(预订)索引?

时间:2010-12-09 11:08:18

标签: indexing

我需要为图书创建索引。虽然第一次看起来很容易完成任务 - 按第一个字母组合单词,然后对它们进行排序, - 这个明显的解决方案仅适用于美国语言。然而,真正的词更复杂。见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关联过多。

还有其他建议吗?

2 个答案:

答案 0 :(得分:0)

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

但索引通常比那更集中。

答案 1 :(得分:0)

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