专利审查指南解析

〇、本项目的由来、意义

由来

Apache POI

意义

  1. 第一个真正意义上的自己的 Go 项目,检验、巩固了前几天的学习
  2. 第一次这么认真看源码,因为没有文档??!极大锻炼了自己看源码的能力,还挺有趣?
  3. 和室友拥有了一次愉快的半夜一起写代码的奇妙而又愉快的体验。他看我在弄,来了兴趣,现学 C# 和我并行尝试。中间不少思路我们都想到一块了,比如发现文档没有标题格式全是正文,思考大纲转标题,然后又都决定找框架的「大纲」接口
  4. 提前一星期完成了老师的任务,后面一星期可以专心学 Go 了。
  5. 利用这次项目,对 vim 比以前更习惯了一点,总算「存活」下来了。

一、本项目内容

项目大背景:把《专利审查指南…》做成网页版的电子书,加入高级搜索等功能。 本项目工作:提取《专利审查…》内容,抽取标题层级和段落内容,存入数据库中。 项目进度:

Golang Slice

二、抽取过程概述

2.1 按段落与大纲初步抽取

gooxml

https://bird-notes.oss-cn-hangzhou.aliyuncs.com/img/image-20210915223953307.png

40

2.2 合并近邻的同大纲内容

同一目录下可能有多个段落,但向前端返回的文本,应该是一整段,所以合并紧邻的同大纲内容。

2.3 将层级目录与文本内容存至数据库中

/build/build.go
idmaxLvllastLvl
maxLvlmaxLvlidmaxLvlidpopmaxLvl

三、开发问题与解决方案记录

1.文件相对绝对路径

/util/fileUtil.goGetRunPath()

2. gooxml document 不支持 doc

doc 转存成 docx

3. gooxml 和 unidoc/unioffice 弃用

gooxml 太旧了,文档也 404
unioffice 应该是基于 gooxml 写的,但是要授权,只能免费用 14 天
所以都弃用,但是真就没办法了吗?

4. 切换解析 word 方法

受某大佬启发,先将 word 转成 html 的形式,再读取 html,原因如下:
我要实现的目标是读取 word,所以可以转换成等效格式,再提取。如果是编辑 word,那可能要直接操作 word 了
之所以选择 html ,是因为我之前对爬虫比较熟,用 xpath 有信心。分析 html 源码后,确定能获取各元素属性

4. 如何解析标题

mso-outline-level1

5. 如何解析文本(段落)

divdivmso-char-indent-count:2.0

6. 编码与文件转换问题

先把 doc 转 docx,再另存为 html,再用 vscode 打开(编码 GBK),然后保存成 UTF-8

7. htmlQuery 获取 html node 的字符串

Data

8. 利用 gooxml/document 设置 word 样式

9. 如何利用 gooxml/document 获取段落属性

(p Paragraph) SetStyle(s string)
Paragraph.p.x.PPr.PStyle.ValAttrParagraphparagraph.go(p Paragraph) Style() string

Bingo!

10. 《审查指南…》中,没有「标题」样式,全是正文

Heading1/try/parseTry.goTestNewDocGooxmlstylex.PPr.PStyle.ValAttr124050

11. 尝试用属性获取

paragraph.goProperties
PragraphProperties.go
stylestyle

12. 能否通过将大纲转成标题来实现提取?

GolangstyleHeading

13. 找到了 gooxml 中的 「大纲属性」

ParagraphProperties.go
wml.CT_PPrCT_PPr.go
CT_DecimalNumber
int64x *wml.CT_PPrParagraphProperties.go

总结一下,获取 Word 大纲级别的方式如下,这里要防止空指针:

文档