查看: 4185|回复: 9
打印 上一主题 下一主题

[教程] 图片词典索引制作之凌波微步

[复制链接]

该用户从未签到

2

主题

9

回帖

153

积分

童生

Rank: 2

积分
153
跳转到指定楼层
1
发表于 2015-5-17 23:58:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ZTO 于 2015-5-18 10:14 编辑

以中文词典为例,支持拼音、汉字、页码、原书目录索引。
如图:





索引简单录入:

Python代码,针对读秀图片命名方式制作,索引生成为MAC OSX 词典格式,mdx格式见5楼:
pyprint7.py.zip (1.64 KB, 下载次数: 12)
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #准备好r.txt文件,将要索引的单词输入到r.txt文本文件中,每行一个单词,每行为一页.
  4. #每页含有两个以上的词,每行的单词间用'|'分开:ab|ac|ad
  5. #python pyprint.py,结果写入index.txt文件
  6. #for mac osx

  7. f = open('index.xml','w')
  8. r = open('r.txt')
  9. count = 1
  10. text = '<html><body><link Ahref="DefaultStyle.css" rel="stylesheet" type="text/css"/><div><a class="play" href="" onclick="document.getElementById(\'index\').style.display = \'block\'; return false;">&#63743;</a><div class="index" id="index"><a class="hide" href="" onclick="document.getElementById(\'index\').style.display = \'none\'; return false;">&#63743;</a><a class="left" href="x-dictionary:r:%s">&#9756;</a><a class="A" href="A">A</a><a class="B" href="B">B</a><a class="C" href="C">C</a><a class="D" href="D">D</a><a class="E" href="E">E</a><a class="F" href="F">F</a><a class="G" href="G">G</a><a class="H" href="H">H</a><a class="I" href="I">I</a><a class="J" href="J">J</a><a class="K" href="K">K</a><a class="L" href="L">L</a><a class="M" href="M">M</a><a class="N" href="N">N</a><a class="O" href="O">O</a><a class="P" href="P">P</a><a class="Q" href="Q">Q</a><a class="R" href="R">R</a><a class="S" href="S">S</a><a class="T" href="T">T</a><a class="U" href="U">U</a><a class="V" href="V">V</a><a class="W" href="W">W</a><a class="X" href="X">X</a><a class="Y" href="Y">Y</a><a class="Z" href="Z">Z</a><a class="right" href="x-dictionary:r:%s">&#9758;</a></div></div><img class="img" src="images/%s.jpg"/>\n</body></html>\n</d:entry>\n'
  11. line = len(open('r.txt').readlines())
  12. f.write('<?xml version="1.0" encoding="UTF-8"?>\n'
  13.             '<d:dictionary xmlns="http://www.w3.org/1999/xhtml" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">\n')

  14. while (count <= line):
  15.         n = str(count)
  16.         s = n.zfill(6) #自动补0
  17.         n1 = str(count-1)
  18.         s1 = n1.zfill(6)
  19.         n2 = str(count+1)
  20.         s2 = n2.zfill(6)
  21.         f.write('<d:entry id="%s" d:title="%s">\n' % (s,s))
  22.         rd = r.readline()
  23.         rw = rd.strip('\n')
  24.         for i in rw.split('|'):
  25.                 f.write('    <d:index d:value="%s"/>\n' % i.strip('\n'))
  26.         f.write('    <d:index d:value="%s"/>\n' % count)
  27.         f.write(text % (s1,s2,s))
  28.         count = count + 1
  29. #目录索引
  30. ml = 1
  31. #参数自行修改
  32. while (ml <= 75):
  33.         n = str(ml)
  34.         s = n.zfill(5) #自动补0
  35.         n1 = str(ml-1)
  36.         s1 = n1.zfill(5)
  37.         n2 = str(ml+1)
  38.         s2 = n2.zfill(5)
  39.         p = '!' + s
  40.         p1 = '!' + s1
  41.         p2 = '!' + s2       
  42.         f.write('<d:entry id="%s" d:title="%s">\n' % (p,p))
  43.         f.write('    <d:index d:value="%s"/>\n' % p)
  44.         f.write(text % (p1,p2,p))
  45.         ml = ml + 1
  46. f.write('</d:dictionary>\n')
  47. f.close()

  48. #css
  49. c = open('dic.css','w')
  50. c.write('.hide,.A,.B,.C,.D,.E,.F,.G,.H,.I,.J,.K,.L,.M,.N,.O,.P,.Q,.R,.S,.T,.U,.V,.W,.X,.Y,.Z,.left,.right{display: block;text-align: center;text-decoration:none;color:#5484C8;background: #DCDCDC; color: #fff;border-radius:8px;margin:1px;}\na:hover {color: #FF9900;}\n .play,.index{float:right;position:fixed;right:15px;height:100%;line-height:20px;overflow:scroll;margin-top:20%;}\n.left,.right{display: block;font-size:24px;text-decoration:none;line-height:20px;}\n.img{width:100%;}\n .play{text-decoration:none;}')
  51. c.close()
复制代码

本帖被以下淘专辑推荐:

该用户从未签到

123

主题

1719

回帖

3万

积分

翰林院编修

Rank: 11Rank: 11Rank: 11Rank: 11

积分
30382

灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

2
发表于 2015-5-18 01:06:55 | 只看该作者
赞一个!
我也希望有朋友能帮忙写一个自动程序,完成全索引图片版词典的最终文件输出。。。
  • TA的每日心情
    无聊
    昨天 07:14
  • 签到天数: 1152 天

    [LV.10]以坛为家III

    160

    主题

    1918

    回帖

    8万

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    89459

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

    3
    发表于 2015-5-18 01:35:24 | 只看该作者
    非常感谢,优秀
    如果已经有图片mdx词典,怎么加你的方法?

    该用户从未签到

    123

    主题

    1719

    回帖

    3万

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    30382

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

    4
    发表于 2015-5-18 06:12:55 | 只看该作者
    本帖最后由 chigre3 于 2015-5-18 06:30 编辑

    请求帮助:
    比如我录入的索引文件格式是:使用"/"分隔左右列,然后使用"|"分隔词头。

    行号100:词头①|词头②/词头③|词头④

    需要经过处理直接变成为(简略形式):

    词头①
            →1←词头①|→2←词头②/→1←词头③|→2←词头④
            上一页099 下一页101
            页面图片100
            上一页099 下一页101
    词头②
            →1←词头①|→2←词头②/→1←词头③|→2←词头④
            上一页099 下一页101
            页面图片100
            上一页099 下一页101
    词头③
            →1←词头①|→2←词头②/→1←词头③|→2←词头④
            上一页099 下一页101
            页面图片100
            上一页099 下一页101
    词头④
            →1←词头①|→2←词头②/→1←词头③|→2←词头④
            上一页099 下一页101
            页面图片100
            上一页099 下一页101

    我不会写代码。

    该用户从未签到

    2

    主题

    9

    回帖

    153

    积分

    童生

    Rank: 2

    积分
    153
    5
     楼主| 发表于 2015-5-18 10:10:39 | 只看该作者
    shawky.nasr 发表于 2015-5-18 01:35
    非常感谢,优秀
    如果已经有图片mdx词典,怎么加你的方法?

    mdx格式,生成的索引大概是这样的

    1. </>
    2. a
    3. @@@LINK=1
    4. </>

    5. @@@LINK=1
    6. </>

    7. @@@LINK=1
    8. </>
    9. 阿姨
    10. @@@LINK=1
    11. </>
    12. 1
    13. <link href="DefaultStyle.css" rel="stylesheet" type="text/css"/><div><a class="play" href="" onclick="document.getElementById('index').style.display = 'block'; return false;">&#63743;</a><div class="index" id="index"><a class="hide" href="" onclick="document.getElementById('index').style.display = 'none'; return false;">&#63743;</a><a class="left" href="entry://000000">&#9756;</a><a class="A" href="entry://!00001">A</a><a class="B" href="entry://!00001">B</a><a class="C" href="entry://!00003">C</a><a class="D" href="entry://!00005">D</a><a class="E" href="entry://!00007">E</a><a class="F" href="entry://!00008">F</a><a class="G" href="entry://!00009">G</a><a class="H" href="entry://!00011">H</a><a class="I" href="I">I</a><a class="J" href="entry://!00012">J</a><a class="K" href="entry://!00016">K</a><a class="L" href="entry://!00017">L</a><a class="M" href="entry://!00018">M</a><a class="N" href="entry://!00020">N</a><a class="O" href="entry://!00020">O</a><a class="P" href="entry://!00020">P</a><a class="Q" href="entry://!00021">Q</a><a class="R" href="entry://!00023">R</a><a class="S" href="entry://!00024">S</a><a class="T" href="entry://!00027">T</a><a class="U" href="U">U</a><a class="V" href="V">V</a><a class="W" href="entry://!00029">W</a><a class="X" href="entry://!00030">X</a><a class="Y" href="entry://!00032">Y</a><a class="Z" href="entry://!00035">Z</a><a class="right" href="entry://000002">&#9758;</a></div></div><img class="img" src="images/000001.jpg"/>
    14. </>
    复制代码

    代码
    pyprint_mdx.py.zip (1.59 KB, 下载次数: 18)

    该用户从未签到

    2

    主题

    9

    回帖

    153

    积分

    童生

    Rank: 2

    积分
    153
    6
     楼主| 发表于 2015-5-18 13:50:08 | 只看该作者
    本帖最后由 ZTO 于 2015-5-18 13:54 编辑
    chigre3 发表于 2015-5-18 06:12
    请求帮助:
    比如我录入的索引文件格式是:使用"/"分隔左右列,然后使用"|"分隔词头。


    录入索引格式
    1. a|b/c|d
    2. aa|bb/cc|dd
    3. ee|ff|gg/hh|ii|kk
    复制代码

    Python代码
    pyprint_mdx2.zip (1.06 KB, 下载次数: 18)
    1. #!/usr/bin/env python
    2. # -*- coding: utf-8 -*-
    3. #准备好r.txt文件,将要索引的单词输入到r.txt文本文件中,每行一个单词,每行为一页.
    4. #每页含有两个以上的词,每行的单词间用'|'分开,左右两列单词用'/'分开:ab|ac|ad/ba|bc|bd
    5. #python pyprint.py,结果写入index.txt文件
    6. #for mdx

    7. f = open('index.txt','w')
    8. r = open('r.txt')
    9. count = 1
    10. text = '<link href="DefaultStyle.css" rel="stylesheet" type="text/css"/>\n<span class="left">&#9756;</span><span class="word1">%s</span><span class="right">&#9758;</span><span class="word2">%s</span><a class="pre" href="entry://%s">上一页</a><a class="nex" href="entry://%s">下一页</a><img class="img" src="images/%s.jpg"/>\n'

    11. #第一行空
    12. f.write('\n</>\n')

    13. #汉字/拼音/字母索引
    14. line = len(open('r.txt').readlines())
    15. while (count <= line):
    16.         n = str(count)
    17.         s = n.zfill(6) #自动补0
    18.         n1 = str(count-1)
    19.         s1 = n1.zfill(6)
    20.         n2 = str(count+1)
    21.         s2 = n2.zfill(6)
    22.        
    23.         rd = r.readline()
    24.         rw = rd.strip('\n')
    25.         for i in rw.split('/'):
    26.                 rw2 = i.strip('\n')
    27.                
    28.                 for i in rw2.split('|'):
    29.                         f.write('%s\n' % i.strip('\n'))
    30.                         f.write('@@@LINK=%s\n' % count)
    31.                         f.write('</>\n')

    32.                 rw3 = rw.split('/')
    33.                                                
    34.         f.write('%s\n' % count)       
    35.         f.write(text % (rw3[0],rw3[1],count-1,count+1,count))
    36.         f.write('</>\n')
    37.         count = count + 1
    38. f.close()
    39.        
    复制代码


    输出的结果

    1. </>
    2. a
    3. @@@LINK=1
    4. </>
    5. b
    6. @@@LINK=1
    7. </>
    8. c
    9. @@@LINK=1
    10. </>
    11. d
    12. @@@LINK=1
    13. </>
    14. 1
    15. <link href="DefaultStyle.css" rel="stylesheet" type="text/css"/>
    16. <span class="left">&#9756;</span><span class="word1">a|b</span><span class="right">&#9758;</span><span class="word2">c|d</span><a class="pre" href="entry://0">上一页</a><a class="nex" href="entry://2">下一页</a><img class="img" src="images/1.jpg"/>
    17. </>
    18. aa
    19. @@@LINK=2
    20. </>
    21. bb
    22. @@@LINK=2
    23. </>
    24. cc
    25. @@@LINK=2
    26. </>
    27. dd
    28. @@@LINK=2
    29. </>
    30. 2
    31. <link href="DefaultStyle.css" rel="stylesheet" type="text/css"/>
    32. <span class="left">&#9756;</span><span class="word1">aa|bb</span><span class="right">&#9758;</span><span class="word2">cc|dd</span><a class="pre" href="entry://1">上一页</a><a class="nex" href="entry://3">下一页</a><img class="img" src="images/2.jpg"/>
    33. </>
    34. ee
    35. @@@LINK=3
    36. </>
    37. ff
    38. @@@LINK=3
    39. </>
    40. gg
    41. @@@LINK=3
    42. </>
    43. hh
    44. @@@LINK=3
    45. </>
    46. ii
    47. @@@LINK=3
    48. </>
    49. kk
    50. @@@LINK=3
    51. </>
    52. 3
    53. <link href="DefaultStyle.css" rel="stylesheet" type="text/css"/>
    54. <span class="left">&#9756;</span><span class="word1">ee|ff|gg</span><span class="right">&#9758;</span><span class="word2">hh|ii|kk</span><a class="pre" href="entry://2">上一页</a><a class="nex" href="entry://4">下一页</a><img class="img" src="images/3.jpg"/>
    55. </>
    复制代码

    该用户从未签到

    123

    主题

    1719

    回帖

    3万

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    30382

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

    7
    发表于 2015-5-18 17:54:59 | 只看该作者
    ZTO 发表于 2015-5-18 13:50
    录入索引格式

    Python代码

    谢谢你写的代码,我在你的基础上进行修改,希望能成功得到我需要的样子。
    ;)

    该用户从未签到

    20

    主题

    251

    回帖

    898

    积分

    禁止发言

    积分
    898
    8
    发表于 2015-5-18 22:17:36 | 只看该作者
    只要能检索,图片词典也是很好的

    该用户从未签到

    123

    主题

    1719

    回帖

    3万

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    30382

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

    9
    发表于 2015-5-19 07:03:12 | 只看该作者
    本帖最后由 chigre3 于 2015-5-19 07:05 编辑


    在ZTO提供的py基础上,根据我自己的需要进行了大幅增改, 不过谁让我不会编程呢,马马虎虎弄起来以后还是最后需要在EmEditor里稍微修改一下下。
    还有重复词头的问题还没有直接在py里设计起来解决掉。。。
    过几天再说。。。

    QQ截图20150519010003.png (49.65 KB, 下载次数: 1)

    QQ截图20150519010003.png
  • TA的每日心情
    擦汗
    2020-7-3 13:51
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    90

    主题

    277

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10032
    10
    发表于 2021-2-14 09:53:36 | 只看该作者
    用竖线 | 隔开同页码词头设计不合理,因为竖线在键盘上要用shfit键组合才能输入,不如无需组合键输入的单个约定分割字符来得方便。