ebook_tools 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +3 -0
- data/README +6 -76
- data/ebook_tools.gemspec +1 -1
- data/lib/extract_book_struct.rb +7 -6
- metadata +1 -1
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -1,76 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# 3. 文档的段落应该完整(有些PDF转换过来的文档会破坏句子,需要进行预处理)
|
8
|
-
# 4. 文档必须符合正常的文档流(错位的章节段落等情况将影响正常的结构提取)
|
9
|
-
# 5. 文档需要包含结构信息(例如: 卷、篇、部分、章(回)节或者有连续的序号)
|
10
|
-
# 6. 每个结构信息都应该独立成行。
|
11
|
-
#
|
12
|
-
# 文档结构信息分析
|
13
|
-
# 一本书在编排的时候会有自己的结构信息,这些结构信息通常通过卷、篇、部分、章(回)节等表述,也会使用序号的方式表述。总体上可以分为以下几种:
|
14
|
-
# 1. 文本描述(text): 按卷、部分(篇)、章(回)、节等文字表述
|
15
|
-
# 2. 数字描述(digital): 所有结构信息都是按照数字序号表示,比如 1 xxxxx; 1.1 xxxxx
|
16
|
-
# 3. 混合描述(hybrid):章按照文字表述,节按照序号表示,比如 1.1 xxxxxx
|
17
|
-
# 根据不同的类型,对结构信息的提取采用不同的处理手段。
|
18
|
-
#
|
19
|
-
# 有效的标题信息应该符合以下规则:
|
20
|
-
# 1. 标题应该不包含完整的句子(应该不包含句子分隔符,例如“。","!"等)
|
21
|
-
# 2. 应该包含结构信息表述,具体如下:
|
22
|
-
# 文本描述:
|
23
|
-
# 卷: 以"第xxx卷"开始
|
24
|
-
# 以"卷"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
25
|
-
# 以"volume"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
26
|
-
# 部分(篇): 以"第xxx部"或"第xxx篇"开始
|
27
|
-
# 以"part"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
28
|
-
# 章(回): 以"第xxx章"或"第xxx回"开始
|
29
|
-
# 以"chapter"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
30
|
-
# 节: 以"第xxx节"开始
|
31
|
-
# 前言: 以"前"开始,以"言"结束,中间加入空白字符。例如"前言","前 言"等。
|
32
|
-
# 以"序"开始,以"言"结束,中间加入空白字符。例如"序言","序 言"等。
|
33
|
-
# 单个"序"
|
34
|
-
# 以"序"或"序言"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
35
|
-
# "preface"
|
36
|
-
# "foreword"
|
37
|
-
# 以"preface"或"foreword"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
38
|
-
# 索引: 以"索"开始,以"引"结束,中间加入空白字符。例如"索引","索 引"等。
|
39
|
-
# 以"索引"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
40
|
-
# "index"
|
41
|
-
# 以"index"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
42
|
-
# 附录: 以"附"开始,以"录"结束,中间加入空白字符。例如"附录","附 录"等。
|
43
|
-
# 以"附录"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
44
|
-
# "appendix"
|
45
|
-
# 以"appendix"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
46
|
-
# 术语: 以"术"开始,以"语"结束,中间加入空白字符。例如"术语","术 语"等。
|
47
|
-
# 以"术语"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
48
|
-
# "glossary"
|
49
|
-
# 以"glossary"开始,后面跟序号表述方式,例如 “I”,“Ⅱ”,“1”等
|
50
|
-
#
|
51
|
-
# 数字描述:
|
52
|
-
# 以数字序号层级表达,数字序号和标题内容之间有空白字符分隔。例如"1 管理的概念", "1.1 定义", "1.1.1 管理"等。
|
53
|
-
#
|
54
|
-
# ==API接口
|
55
|
-
#
|
56
|
-
# === ExtractBookStruct.from_txt
|
57
|
-
# 从文本文件中提取目录结构,使用示例:
|
58
|
-
# ExtractBookStruct.from_txt('1.txt',{:title=>'title',:author=>'author'})
|
59
|
-
#
|
60
|
-
# === ExtractBookStruct.from_epub
|
61
|
-
# 从EPUB文件中提取目录结构,使用示例:
|
62
|
-
# ExtractBookStruct.from_epub('1.epub',{:title=>'title',:author=>'author'})
|
63
|
-
#
|
64
|
-
# === ExtractBookStruct.from_html
|
65
|
-
# 从HTML中提取目录结构,使用示例:
|
66
|
-
# ExtractBookStruct.from_html('1.html',{:title=>'title',:author=>'author'})
|
67
|
-
#
|
68
|
-
# == 命令行工具
|
69
|
-
# extract_book_struct,使用示例:
|
70
|
-
# extract_book_struct '1.txt', '1.xml'
|
71
|
-
#
|
72
|
-
# == 依赖
|
73
|
-
# ExtractBookStruct依赖以下工具和包:
|
74
|
-
# ebook-convert: calibre cli tools.
|
75
|
-
# uuid: ruby gem.
|
76
|
-
# iconv: ruby gem.
|
1
|
+
= ebook_tools
|
2
|
+
ebook tools
|
3
|
+
|
4
|
+
== Installation
|
5
|
+
|
6
|
+
gem install ebook_tools
|
data/ebook_tools.gemspec
CHANGED
data/lib/extract_book_struct.rb
CHANGED
@@ -30,16 +30,19 @@ module ExtractBookStruct
|
|
30
30
|
extend HeaderDetect
|
31
31
|
|
32
32
|
def from_txt(filename,options={})
|
33
|
+
options[:title] ||= File.basename(filename,File.extname(filename))
|
33
34
|
content = File.open(filename).read
|
34
35
|
extract_book_struct(content,options)
|
35
36
|
end
|
36
37
|
|
37
38
|
def from_html(filename,options={})
|
39
|
+
options[:title] ||= File.basename(filename,File.extname(filename))
|
38
40
|
content = extract_text_from_file(filename,'.html')
|
39
41
|
extract_book_struct(content,options)
|
40
42
|
end
|
41
43
|
|
42
44
|
def from_epub(filename,options={})
|
45
|
+
options[:title] ||= File.basename(filename,File.extname(filename))
|
43
46
|
content = extract_text_from_file(filename,'.epub')
|
44
47
|
extract_book_struct(content,options)
|
45
48
|
end
|
@@ -50,7 +53,6 @@ module ExtractBookStruct
|
|
50
53
|
end
|
51
54
|
content = sanitize_for_epub_text(content)
|
52
55
|
paras = extract_paras(content)
|
53
|
-
|
54
56
|
# 检查书类型(text,digital,hybrid)
|
55
57
|
format = options[:format] || detect_struct_type(paras)
|
56
58
|
case format
|
@@ -112,13 +114,10 @@ module ExtractBookStruct
|
|
112
114
|
def extract_text_book_struct(content,options={})
|
113
115
|
# 标注结构信息
|
114
116
|
marked_content = mark_struct_info(content)
|
115
|
-
|
116
117
|
# 构建书结构
|
117
118
|
struct = build_struct(marked_content)
|
118
|
-
|
119
119
|
# 修正结构
|
120
120
|
revised_struct = revise_struct(struct)
|
121
|
-
|
122
121
|
# 生成docbook
|
123
122
|
build_doc_book(revised_struct,options)
|
124
123
|
end
|
@@ -227,9 +226,11 @@ module ExtractBookStruct
|
|
227
226
|
<book xmlns="http://docbook.org/ns/docbook" version="5.0">
|
228
227
|
<info>
|
229
228
|
<title>#{options[:title]}</title>
|
230
|
-
<
|
229
|
+
<authorgroup>
|
230
|
+
<author><personname>#{options[:author]}</personname></author>
|
231
|
+
</authorgroup>
|
231
232
|
<pubdate>#{options[:pubdate]}</pubdate>
|
232
|
-
<publisher>#{options[:publisher]}</publisher>
|
233
|
+
<publisher><publishername>#{options[:publisher]}</publishername></publisher>
|
233
234
|
</info>
|
234
235
|
#{doc_toc}
|
235
236
|
#{doc_content}
|