2. 文本预处理基础

公告新闻是一种高度格式化的文本类型,通常来自交易所披露、公司公告、监管文件或财经媒体。它的语言风格介于正式公文与新闻报道之间:既有固定套话,也有具体事实。要让机器从这类文本中抽取“谁、何时、发生了什么、涉及多少钱”,第一步不是建模,而是把原始字符串整理成可计算的语言单元。本节围绕中文分词、去停用词、词性标注和命名实体识别四个基础环节,说明它们在公告新闻事件抽取中的实际作用与常见陷阱。

一、核心原理:为什么中文预处理不能照搬英文

英文以空格自然切分词语,中文则连续书写,词与词之间没有显式边界。因此中文预处理的第一道关卡是分词。分词的本质是“把字符序列还原为词序列”,但“词”的界定本身依赖语境和领域。例如“上市公司”可以切成“上市/公司”,也可以整体保留;“回购股份”切成“回购/股份”更利于事件识别。公告新闻中大量出现公司名、证券代码、金额、日期、法规名称,这些单元如果被切碎,后续实体识别和关系抽取都会受损。

去停用词的目标是降低噪声。公告中“的、了、和、关于、现将、如下”等词出现频率极高,却几乎不携带事件信息。但停用词表不能一刀切:在“不排除”“未及时”“非公开发行”中,“不”“未”“非”是否定或限定信号,一旦删除,事件方向可能完全反转。词性标注为每个词赋予名词、动词、形容词等类别,帮助判断“收购”是动词事件触发词,“控股股东”是名词性实体。命名实体识别则进一步把词序列中的公司、人物、时间、金额、比例、证券代码等抽取为结构化槽位。

一句话理解四者关系:分词决定“切得对不对”,去停用词决定“留得准不准”,词性标注决定“用得稳不稳”,命名实体识别决定“抽得全不全”。四者不是孤立步骤,而是逐层为事件抽取提供候选证据。

二、方法流程:从原始公告到结构化候选

在实战中,建议把预处理组织为一条可复现的流水线,而不是在脚本里零散调用。典型流程如下:

  1. 文本清洗:去除 HTML 标签、多余空白、页眉页脚、PDF 转换产生的乱码和断行。
  2. 分句与分段:按句号、分号、换行切分,保留标题与正文的层级关系。
  3. 中文分词:使用通用分词器加载财经领域自定义词典,加入公司名、产品名、法规名。
  4. 去停用词:使用基础停用词表,但保留否定词、程度词、时间词和数量词。
  5. 词性标注:标记动词、名词、时间词等,为事件触发词识别提供特征。
  6. 命名实体识别:抽取公司、人物、时间、金额、比例、证券代码等实体。
  7. 输出候选:形成“实体 + 触发词 + 时间 + 金额”的候选事件记录,供后续分类或关系抽取使用。

下面是一个使用 Python 和 jieba 的简化示例,展示分词、词性标注与自定义词典的基本写法:

import jieba
import jieba.posseg as pseg

# 加载财经领域自定义词典,保证公司名和专有名词不被切碎
jieba.load_userdict("finance_dict.txt")

text = "2024年5月10日,甲公司发布公告,拟以自有资金回购股份不超过2亿元。"

# 精确模式分词
words = jieba.lcut(text)
print(words)

# 词性标注
for word, flag in pseg.cut(text):
    print(word, flag)

运行后可能得到类似输出:

['2024年', '5月', '10日', ',', '甲公司', '发布', '公告', ',', '拟', '以', '自有', '资金', '回购', '股份', '不超过', '2亿元', '。']
2024年 t
5月 t
10日 t
甲公司 nr
发布 v
公告 n
拟 v
以 p
自有 v
资金 n
回购 v
股份 n
不超过 v
2亿元 m
。 x

可以看到,“甲公司”被识别为名词性实体,“回购”被标注为动词,成为潜在事件触发词,“2亿元”被标注为数量词。这些标签就是后续事件抽取的输入特征。

三、公告新闻中的典型场景与实体类型

公告新闻的事件类型相对集中,常见包括回购、增持、减持、并购、重组、业绩预告、分红、诉讼、担保、停牌、复牌等。不同事件关注的实体槽位不同,但预处理阶段需要统一识别以下几类对象:

实体类型公告中的示例在事件抽取中的作用
公司/机构甲公司、某某证券、控股股东事件主体或交易对手
人物董事长张某、实际控制人李某责任主体或关联方
时间2024年5月10日、本公告日事件发生或生效时间
金额2亿元、不超过5000万元交易规模或上限
比例占总股本3%、不低于1%股权变动幅度
证券代码600XXX、300XXX唯一标识标的公司
事件触发词回购、增持、减持、收购决定事件类型

这张清单可以直接转化为标注规范。例如,一条“回购”事件至少需要“公司 + 回购 + 金额/比例 + 时间”四个槽位;如果缺少金额,仍可保留事件,但置信度应降低。预处理阶段不必追求一次性抽全,而应保证候选实体不漏、不碎、不歧义。

四、误区与复盘:预处理做错,后面全错

误区一:停用词表越大越好。把“不”“未”“非”“无”删除,会把“未及时披露”变成“及时披露”,事件性质完全相反。建议维护一份“不可删除词表”,至少保留否定词、时间词、数量词和程度词。

误区二:分词器默认词典足够用。通用词典对“某某转债”“某某科技股份有限公司”往往切分不理想。公告新闻中公司名和产品名是核心实体,必须通过自定义词典和规则补丁保证完整性。

误区三:命名实体识别一次就能完美。公告中大量出现简称、代称和嵌套实体,例如“公司”“本公司”“控股子公司”。需要结合上下文和公司别名表做归一化,否则同一主体会被拆成多个 ID。

复盘时建议检查三个指标:一是实体召回率,看公司、金额、时间是否漏抽;二是实体完整率,看公司名是否被切碎;三是事件方向准确率,看否定词和限定词是否被误删。只有预处理阶段稳定,后续的事件分类、关系抽取和事件研究才不会建立在流沙之上。

公告新闻预处理流水线:从原始文本到事件候选 原始公告 HTML/PDF/文本 文本清洗 去标签/断行/乱码 中文分词 自定义词典 去停用词 保留否定/时间/数量 词性标注 动词/名词/时间词 命名实体识别 公司/金额/时间/代码 事件候选 实体+触发词+时间 公告新闻中的关键实体与触发词示例 公司:甲公司 时间:2024年5月10日 金额:2亿元 触发词:回购 比例:不超过3% 代码:600XXX 否定:未及时 输出:候选事件