☰
i2 Analyst‘s Notebook 8 实战:Word .doc 情报导入导出全流程解析
2026/10/29 8:20:19 网站建设 项目流程

简介:i2 Analyst's Notebook 8 是一份由 IBM 出品的专业数据可视化与关联分析工具中文培训教材,主要面向安全、金融调查领域的数据分析师、侦查人员或相关专业学生。教程从软件基本概念讲起,系统介绍节点、边、时间线分析、聚类算法以及数据库、Excel、文本等多类数据接口配置,帮助读者理解如何将海量通话记录、银行流水等数据转化为可视化网络,揭示隐藏模式和潜在犯罪团伙。整个压缩包约 25.9MB,内含一份 doc 文档,内容覆盖界面绘图、基础操作、高级搜索等知识点,并配有大量实战演练:话单关系分析、银行账户交易分析、案件串并分析、人员物品动态关系、通讯录分析、活动轨迹跟踪等十余个场景,完整演示从数据导入、图表构建到关联研判的流程。目前已有 1581 人学习下载,适合希望快速上手该工具的分析人员按章查阅,也可作为机构内部培训的参考教材。

1. i2 Analyst's Notebook 8 遇上 .doc:先把 Word 里的情报搬进分析图

做反欺诈、内部调查或合规审计的人,每天都会收到一堆 .doc 格式的访谈记录、案情通报、尽调底稿。这些文档里塞满了人名、电话、地址、转账时间和金额,可如果你直接翻开 Word 看,看到的是几十页流水账,完全看不出谁跟谁有关。i2 Analyst's Notebook 8 的价值,就是把这些散落在 Word 段落和表格里的线索,变成一张实体与链接组成的分析图。但 i2 不会读 Word,它只认结构化数据。所以「i2 Analyst's Notebook 8 .doc」这个关键词背后,其实是两个绕不开的动作:把 .doc 里的信息提出来导进 i2,以及把分析完的图导出成 .doc 报告。这篇文章就把这两条路的细节、参数和坑一次性讲清楚,适合正在用 i2 或准备上 i2 的从业者照着做。

2. 从 .doc 到 i2 的链路设计:为什么必须先把文档结构化

2.1 i2 只认实体与链接,Word 只认段落与表格

很多人第一次用 i2 Analyst's Notebook 8 时会误以为它能直接解析 Word 全文,像搜索引擎一样把语义抽出来。实际上 i2 的数据模型非常死板:它只认两类东西——实体(Entity)和链接(Link)。实体是图上的点,比如一个人、一个公司、一部手机或一个地址;链接是点之间的线,比如一次通话、一笔转账、一条雇佣关系。除此之外,i2 还需要给每个实体挂属性,例如姓名、证件号、金额、时间戳;这些属性在图上以备注或标签形式显示。

而 .doc 文档呢?语法上只有段落、表格、页眉页脚。即使是一份写得很有条理的访谈记录,里面的「李四转给王五 300 万」也只是藏在某个段落里,i2 不可能自动认出谁是发起方、谁是接收方、金额是多少。所以第一步永远是结构化的过程:把 Word 里的自然语言,转成一张能表达实体和链接关系的中间表。这个步骤不用怕麻烦,因为它直接决定了后面 i2 图上是否有价值。我见过不少人省掉这一步,强行把整个 Word 塞进属性字段,结果图上全是文字块,一点分析价值都没有,纯属给自己挖坑。

2.2 设计一个可复用的中间表:实体表与关系表

既然要结构化,就得先定中间表长什么样。常见做法是我会把 Word 里的信息拆成两个 CSV:实体表和关系表。实体表的每一行代表一个实体,至少要有实体类型、实体名称、属性和值四列;关系表的每一行代表一条链接,至少要有链接类型、起点实体、终点实体、方向、日期和备注。这样拆的好处是 i2 的导入器天然支持这种模型,后面映射字段时不需要绕路。

举例来说,一份访谈记录里有这样的话:「2024-03-15,张三通过招商银行账户 622XXXX 向李四转账 30 万元。」那么实体表里应该有三行:一个人叫张三,类型是 Person;一个人叫李四,类型是 Person;一个账户号,类型是 Bank Account。关系表里则有一行:类型是 Financial Transfer,Source 是张三,Target 是李四,日期是 2024-03-15,金额 30 万放进日期列后面作为备注或属性。注意不要把「转账」这个词写进链接类型里,i2 的链接类型是预设概念,要在导入后统一,否则同一种关系会被拆成「转账」「汇款」「打款」好几个类型,图看着很乱。

我建议的中间表列设计如表 1 所示。设计时把日期统一成 yyyy-MM-dd 这种纯文本格式,i2 在导入时才不会把日期当成数字或乱码。关系表里的方向字段我用 1 表示正向,-1 表示反向,0 表示无方向,这符合 i2 导入器对 Direction 列的接受水平。

表:实体表与关系表的推荐列设计

表列名示例说明
实体表entity_typePersoni2 的实体类型,建议用英文避免乱码
实体表entity_name张三图上显示的名字
实体表attr_namephone属性名,如 phone / address / amount
实体表attr_value13800138000属性值,统一为字符串
关系表link_typeCalli2 的链接类型,用英文
关系表source张三起点实体名
关系表target李四终点实体名
关系表direction11 正向 / -1 反向 / 0 无方向
关系表datetime2024-03-15链接发生时间,纯文本格式

2.3 用 Python 把 .doc 表格提成 CSV:win32com 与 pandas 的组合

.i2 Analyst's Notebook 8 的导入器能直接读 Excel 和 CSV,所以我们的工作就是把 .doc 里的表格导成 CSV。这里有一个现实问题:python-docx 这种库只支持 .docx,对老 .doc 无能为力。我在 Windows 上最稳的方案是 win32com 调起本机 Word 来读取,这样无论 .doc 里有什么奇奇怪怪的批注修订,都能还原原始内容。以下这段脚本可以把 .doc 中所有表格按顺序读出来并转成 pandas DataFrame。

import os import pandas as pd from win32com.client import Dispatch def doc_tables_to_dataframe(path): """ 用 Word COM 读取 .doc 文件中的所有表格, 返回一个合并后的 DataFrame。 """ word = Dispatch("Word.Application") word.Visible = False # 后台运行,不弹界面 doc = word.Documents.Open(os.path.abspath(path), ReadOnly=True) all_rows = [] for table in doc.Tables: # 遍历表格的每一行,跳过最后的单元格结束符 for row in range(1, table.Rows.Count + 1): row_data = [] for col in range(1, table.Columns.Count + 1): try: cell_text = table.Cell(row, col).Range.Text # 去掉 Word 自动加的换行符和单元格结束符 cell_text = cell_text.rstrip('\r\x07') except Exception: # 合并单元格时读取会抛错,这里补一个空字符串 cell_text = '' row_data.append(cell_text) all_rows.append(row_data) doc.Close(False) word.Quit() return pd.DataFrame(all_rows) if __name__ == "__main__": df = doc_tables_to_dataframe("访谈记录.doc") # 导出时用 utf-8-sig 带 BOM,避免 i2 导入时乱码 df.to_csv("interviews.csv", index=False, encoding="utf-8-sig") print(f"提取完成,共 {len(df)} 行")

这段代码有两个关键参数值得解释一下。第一,Word.Visible = False把 Word 实例放到后台,避免脚本运行时弹出一堆文档窗口,这在批量处理几十份 .doc 时是保命设置,否则每打开一个文件就闪一次。第二,to_csv里用encoding="utf-8-sig"这种带 BOM 的编码,不是普通 utf-8。i2 Analyst's Notebook 8 在中文 Windows 上默认读取 CSV 时会按系统编码判断,不带 BOM 的 UTF-8 经常被识别成 ANSI,结果导入后中文全乱。这里加 BOM 是我踩过坑之后的习惯,能省掉很多后面排错的功夫。

如果你的 Word 文档里不是表格而是大段文本,那上面的脚本就不够用了。常见处理办法是用同一个 COM 对象读doc.Content.Text,把全文抽出来后再用正则或关键词规则拆分。比如匹配「([\u4e00-\u9fa5]{2,4}) 通过 (.{0,20}?账户) 向 ([\u4e00-\u9fa5]{2,4}) 转账」这类固定句式。不过这需要你对语料模式有把握,我一般只在访谈模板比较统一时才用,否则拆出来的字段错位严重,反而是另一种坑。更通用的做法是让用户把关键信息填进 Word 表格,再用上面的脚本提取,这样准确率高得多。

3. i2 Analyst's Notebook 8 导入 CSV:字段映射、日期解析与自动布局

3.1 新建图本并启动文本导入器:关键选项

CSV 准备好之后,打开 i2 Analyst's Notebook 8,先进 New Chart 创建一个空图本。然后在菜单栏找到 Import / Export 区域,选择 Text Import 或者导入精灵,不同版本按钮位置略有差异,但功能一致。启动导入器后第一步是选择数据源文件,注意文件类型下拉要选 Text CSV 而不是 Excel,因为 CSV 是我们刚从 Python 生成的,避免让导入器去猜测 Excel 的表结构。

接下来有两个选项会直接影响成败。一个是字符编码,i2 在某些版本里默认可能猜成 UTF-8 或 GBK,出现乱码时要回到这一步手动指定。另一个是日期格式,旧版导入器默认按 yyyyMMdd 解析,如果你在 CSV 里写的是 2024-03-15,i2 会解析成 2024 年 03 月 15 日吗?不一定,有些版本会把这个字符串当成没有分隔符的文本。所以我在进入下一步前,通常会先把源文件里的日期打印出来确认一下。这里最稳妥的做法是统一把中间表里的日期列设为 yyyy-MM-dd,同时在导入器的日期格式设置里手动指定为 ISO 8601 格式,两者匹配才能让时间轴正常显示。

3.2 映射实体与链接:把 CSV 列塞进 i2 的数据模型

导入器的核心界面是字段映射窗口,它会把 CSV 的每一个列名列出来,让你选择这一列代表什么。对于实体表,我一般把 entity_type 列映射到 Type,把 entity_name 列映射到 Name,其余 attr_name 和 attr_value 两列可以按下拉菜单里的 Attribute 选项建立「属性名→属性值」对。这里有个技巧:i2 的映射支持一对多,也就是说你可以把 attr_name 和 attr_value 两个字段组合成一个属性映射,导入后每个实体就会带上对应的属性条目。如果你的 CSV 把多个属性放在同一行,比如一个人同时有电话和住址,需要拆成多行才能正确映射,否则 i2 只取一行里的一个属性名和一个属性值。

对于关系表,映射更直接:link_type 映射到 Link Type,source 映射到 Source,target 映射到 Target,direction 映射到 Direction。要注意的是 Source 和 Target 的实体名称必须和实体表里的名称完全一致,包括空格和大小写。有些人在 Word 里写了「张 三」带空格,实体表里也带空格,i2 会认为这是两个不同的实体。我习惯在生成 CSV 时做一次strip()和全角转半角清洗,把这类隐形差异干掉,否则导入后图上会出现一对一模一样的双胞胎节点,看着像实体,实则全是脏数据。

3.3 参数表:日期、方向、字符编码

为了让导入过程可控,我把真正需要每次确认的参数列成表,核对完再点 Finish。这张表不是摆设,而是我多次翻车后总结出来的检查清单。方向字段尤其容易出错:i2 里 Direction 列支持 0、1、-1 是不假,但如果你的关系是无方向的,比如「认识」这种双向关系,某些导入器版本要求你留空而不是填 0,填了 0 可能导致链接变成一条带箭头的线,语义就不对了。我现在的做法是无方向关系在 CSV 里直接留空,不填 0。

表:i2 导入前必查的参数清单

参数推荐设置踩坑提示
字符编码UTF-8 with BOM不带 BOM 中文必乱码
日期格式yyyy-MM-dd不要用 yyyy/MM/dd 或 Excel 序列号
Direction 列1 / -1 / 留空无方向链接留空,别填 0
实体名称前后无空格、全角转半角同名空格差异会产生重复实体
链接类型统一英文枚举别让「转账」「汇款」同时出现

3.4 导入完必做:检查数量与运行自动布局

导入完成后,i2 会弹一个统计报告,显示成功导入多少个实体、多少条链接、多少条属性。我每次都会把这个数字记下来,和源 CSV 的行数做对比,如果实体表有 200 行而 i2 只导入 180 个,那说明有 20 行因为 Type 字段不合法或 Name 为空被静默丢弃了。很多人在这一步直接点确定,等到图上缺东西再去查,就晚了。i2 的导入统计是验证准确率的第一个抓手,建议截图留档。

接下来就是让图从一团乱码变成能看的形态。刚导入完的实体都堆在图本左上角,权重压在同一个位置,不仔细看还以为只导入了一个点。原因是 i2 不会自动布局,需要你手动触发。正确做法是先用 Ctrl+A 全选所有实体,然后进入 Layout 菜单运行 Auto Layout,一般选 Circular 或 Force-Directed 布局。圆形布局适合把团伙关系画成一个环,力导向布局适合显示亲疏程度。布局跑完后如果还有重叠,微调几个关键实体的位置,把它拖到图中心,再重新跑一次 Auto Layout,效果会稳定很多。

4. 把分析图导出成 .doc 报告:图例、时间轴与打印排版

4.1 导出路径:复制成图、打印到 Word 与 Chartbook

分析做完,最终要给领导或团队交付一个能放在 Word 里的成果。i2 Analyst's Notebook 8 没有一键生成 .doc 的按钮,常见做法是三种路径。第一种最直接:选中图本里要展示的部分,右键选择 Copy Chart,然后打开 Word 粘贴。这种方式生成的是一张位图,操作快,但分辨率受限于显示器,放大必糊。第二种是把图先导出成 PNG 或 JPG,再插入 Word,图片尺寸和分辨率可以自己控制。第三种是使用 i2 的 Chartbook 功能,把多张分析图组织成一个图表书,再整体发送到 Word。

我实际工作中用得最多的是第二种。因为 .doc 报告通常要打印成纸质件,分辨率低会被直接打回重做。导出图片时我会在 i2 的文件菜单中选择 Export Chart as Image,把缩放比例调到 200% 或 300%,输出 PNG 格式,因为 PNG 是无损压缩,比 JPG 更清晰。有人嫌 PNG 文件大,但对报告来说,单张 10 MB 以内的 PNG 完全可接受,别用 JPG 去换那一点点体积,字会糊。

4.2 让 Word 里的人能看懂:图例与说明文字

i2 导出的图片如果没有图例,读者根本不知道红色方块是什么、蓝色箭头代表什么。所以在导出前,务必打开图例设置,把它放到图的角落。i2 的图例窗口默认显示实体类型和链接类型,你需要检查一下是否覆盖了所有关键类型,比如 Person、Bank Account、Call、Financial Transfer。如果一个类型在图里出现但图例没有,说明它的样式和某个已有类型重合了,要去编辑样式给它单独配色,然后再进图例刷新。

时间轴是另一块容易翻车的地方。如果你的关系表里有日期,i2 的时间轴(Temporal)会被激活。在导出前,我的习惯是把 Temporal 工具栏打开,选中所有实体,运行一次时间轴分析,确认链接发生时间分布是否合理。如果某条链接的日期是 1970-01-01,那八成是 CSV 里填了 0 或者空值被 i2 硬解析了,这种脏数据进图上会让时间轴看起来像有个远古事件。在导出图片时,时间轴如果作为独立视图,Win 上 i2 的默认打印模板不一定包含它,需要你手动把时间轴窗口也导出成图片,一并在 Word 里摆放。

4.3 用 Word 模板统一报告样式:粘贴后的处理技巧

把图片粘进 Word 只是第一步,报告要够专业,还得统一格式。我的做法是准备一个 Word 模板,里面预置了标题样式、正文样式和页边距,还有一段固定的说明文字模板。粘贴图片后,用 Word 的「插入题注」功能给每张图编号,比如「图 3:张三关联关系图」。如果你用的是 .docx 后期另存为 .doc,那可以直接用 Word 的样式排版;但老 .doc 对某些新版 Word 的图片压缩算法不友好,建议全部操作在 .docx 里完成,最后另存为 .doc 交出去。

还有一个细节:i2 导出到 Word 的文字内容,比如实体列表或链接清单,粘贴时会变成普通表格,样式经常走样。我一般会用 Word 宏或 python-docx 对粘贴后的表格做一次统一设置,把表格的边框、字体大小、列宽调成和模板一致。如果你不想碰宏,那就在粘贴前在 i2 里把要导出的列表排序好,粘贴后用 Word 的「表格样式」库选一个内置样式,一秒对齐所有表格边框,效率比自己调高得多。

5. i2 与 .doc 协作的 5 个避坑记录:乱码、日期、合并表格与黑匣子

5.1 现象:CSV 导入后中文全乱码

第一次跑通流程时,导入后的实体名称全部变成「.ㄤ.」之类的乱码,图上一个正常中文都没有。我当时第一反应是 i2 的文本引擎出了问题,后来才发现是编码选择错了。原因很简单:我用 pandas 默认的 utf-8 编码输出 CSV,没有带 BOM,而 i2 在中文 Windows 上读取 CSV 时默认按 ANSI 解码,UTF-8 字符串被逐字节拆开自然就乱了。解决方法是输出时改用encoding="utf-8-sig",也就是带 BOM 的 UTF-8,i2 识别到 BOM 后就会按 UTF-8 解码。如果你手里的 CSV 已经生成了,不想重新导出,也可以用记事本打开另存为 ANSI,但这只适合纯中文短文本,有生僻字时容易出问题,还是回到 Python 里重导出更稳。

5.2 现象:日期列变成一串五位数

有一次导入后,链接的时间在时间轴上显示成 44123 这样的数字,完全没法看。原因是 pandas 在读取或生成中间表时,那些日期列被当成了数值,实际上这是 Excel 序列号——Excel 会把日期存储为从 1900 年起的天数。我在清洗 .doc 表格时没注意表格单元格是日期格式还是文本格式,导致 Python 读出来就是 int,直接写进了 CSV。解决方法是导入前检查 CSV 里的日期列,用以下方式做一次显式转换:pd.to_datetime(df['date'], errors='coerce').dt.strftime('%Y-%m-%d'),转换失败的值保留原文,这样 i2 拿到的一律是 yyyy-MM-dd 文本。还有一点,如果 .doc 表格里的日期在 Word 显示为「2024年3月15日」,Python 读出来可能是「2024/3/15」,这类格式也要统一转成 yyyy-MM-dd,否则 i2 的日期解析器会直接跳过。

5.3 现象:Word 表格有合并单元格,提取后行数变少

处理一份 .doc 里的报名表时,导出的 DataFrame 比肉眼数的行数少了很多,而且很多单元格是空值。原因是原 Word 表格有大量纵向合并的单元格,比如一个公司名称横跨了三行子公司记录,用 win32com 的table.Cell(row, col)读取合并区域时会抛异常,我的脚本捕获异常后补了空字符串,结果这些行的关键字段都是空的。解决思路不在 i2,而在提取环节:先用 Word 的「取消合并单元格」功能把表格展开,保存后再用脚本提取。如果不想手动改,可以在脚本里对读取失败的单元格执行前向填充:识别到空值时沿列方向用上一行的非空值填充。这个方法对有规律的合并表足够用,但遇到嵌套合并时还是建议手工清理,别把希望全寄托在代码上,那也是个黑匣子。

5.4 现象:导入后所有实体挤在原点,图上只有一个点

这个坑几乎每个人都会遇到。导入成功后,图本的窗口里看不到任何实体,把鼠标滚轮缩小到底,才发现所有实体全部叠在坐标原点,看起来像 i2 只画了一个节点。原因不是导入失败,而是 i2 对纯 CSV 导入的数据默认不执行布局,每个实体的坐标都初始化为 (0, 0)。解决方法是全选实体后运行 Auto Layout,建议先 Run Circular 布局,让实体围成一个圈,再对关键实体手动拖拽微调。如果你希望导入时就带坐标,可以在实体表里加两列 x 和 y,映射到 i2 的 X Coordinate / Y Coordinate 字段,但手工算坐标没有意义,还是让布局算法代劳比较合理。

5.5 现象:导出到 Word 的图片模糊,放大后锯齿严重

完成分析后我直接把 i2 图表复制粘贴到 Word 报告里,结果打印出来字全是糊的。原因是 Copy Chart 复制的是屏幕分辨率的点阵图,我的显示器是 1080p,复制出来的图就只有 1920 像素宽,放到 A4 纸上相当于被拉伸了两三倍,不糊才怪。解决方法是走 Export Chart as Image 的菜单,把缩放比例调到 300%,导出 PNG 后再插入 Word。如果图片仍然模糊,检查一下 Word 的图片压缩设置,新版 Word 默认会压缩文档中的图片到 220ppi,在「文件-选项-高级-图像大小和质量」里改成不压缩,才能保留 i2 导出的清晰度。这个设置坑了我两次,后来我把它写进了自己的交付检查表,每次导出前先改再插。

6. 收尾技巧:用增量更新与统计验证,让 .doc 变成可持续的分析流

最后分享一个我常用的进阶技巧:把「.doc 转 i2」从一次性的手工劳动,变成可重复的分析流。i2 Analyst's Notebook 8 的导入器支持在已有图本上执行「更新导入」,也就是说当同一份访谈记录补了新内容,你只需要重新跑一遍 Python 脚本生成新的 CSV,然后在 i2 里选择更新已有图表,它就会自动把新增实体和链接追加进去,而不是让你从头再导一次。这个功能在 i2 的导入向导里有明确选项,英文叫 Update existing chart,勾选后匹配规则是按实体名称和类型判断是否已存在,匹配上的实体保留原位置和布局,不匹配的作为新实体加入。

不过增量更新对 CSV 的规范性要求很高,实体名称稍有变化就会被当成新节点。我现在的验证习惯是导入后立刻看统计报告,把实体数和链接数记录在一个文本文件里,每次都对比上次的数字。如果某次更新后实体数量暴涨而原文档内容只加了一页,那八成是名称匹配出了问题,回到 CSV 里查空格和全角字符。还有一个更稳妥的办法:在图本上用 i2 的 Find 功能输入一个已知实体名,确认图上只有一个对应节点,再随机抽三个实体双击打开属性面板,核对其属性是否和 .doc 原文一致。这套验证做完,我才敢把图交给下游环节。

最后说一句实在话:i2 不是 Word 的替代品,它是把 Word 里那些看似无关的碎片重新焊接起来的工作台。有人用了很久还是把它当画图工具,问题不在软件,而在没有把导入这条链路做成标准化流水线。我自己的习惯是维护一个固定的 Python 脚本模板和 CSV 列名白名单,任何新的 .doc 来了直接套用,三个月下来导入准确率基本稳定在 95% 以上。建议你也从一次小规模样例开始,先导 20 个实体跑通全流程,再逐步放大到真实数据。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询