Stata:计算文本语调-onetext

发布时间:2023-02-18 阅读 757

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:左祥太 (武汉纺织大学)
邮箱Shutter_Z@outlook.com


目录


1. 什么是文本分析

文本分析是指对文本特征项的选取过程,是 Natural Language Processing (NLP) 的一个重要环节。在现实生活当中,有很多重要的数据都是以文本形式存在,为广义上的非结构化的数据。例如,年报中管理层讨论与分析部分的文字、工作报告中的文字等。

从已有发表来看,主流的期刊杂志中仍缺少对文本信息的觉察与测量,且测量方法在过去的十年内所呈现出的形式都较为单一化。而现有的文本分析工具一般以 Python 的 jiebasnownlpsklearn 等为主,本推文将介绍一种以 Stata 作为主力工具的文本分析方法。

2. 文本分析的工作流程

文本分析的主要流程大致可以分为以下几步:

  • 获取原始文本;
  • 去除文本中的停用词 (指一些实用意义不大的词语,如语气词);
  • 根据一些词典形成某些指标 (例如根据积极消极情绪词典判度管理层语调等)。

3. Stata 中处理文本的主要函数

Stata 中与文本直接相关的函数主要有以下几种:

  • strlen():计算并返回 ASCII 编码下的字符数。例如 dis strlen("连享会"),返回结果为 9。
  • ustrlen():计算并返回 Unicode 编码下的字符数。例如 dis ustrlen("连享会"),返回结果为 3。
  • ustrregexm(s, re):根据正则表达式 re 匹配字符串 s 中的项目,若存在则返回 1,不存在则返回 0。例如,dis ustrregexm("连享会", "连"),返回结果为 1;dis ustrregexm("连享会", "左"),返回结果为 0。
  • ustrregexrf(s1, re, s2):根据在正则表达式 re 匹配字符串 s1 中的项目,若存在则替换为字符串 s2,反之不进行处理。注意,该函数仅替换出现的第一个字符。rf 的含义是 replace first。例如,dis ustrregexrf("连享会", "连", "Lian"),返回结果为 Lian享会
  • ustrregexra(s1, re, s2):根据在正则表达式 re 匹配字符串 s1 中的项目,若存在则替换为字符串 s2,反之不进行处理。注意,该函数将批量替换所有匹配成功的字符。ra 的含义是replace all。例如,dis ustrregexra("连享连会连", "连", "Lian") 返回结果为 Lian享Lian会Lian

更多字符串处理函数参考 help string functions

4. 计算文本情绪

4.1 数据准备

本部分数据截取自 CNRDS 的 CMDA 管理层讨论与分析部分,使用样本数据进行演示说明。数据格式如下:

. lxhuse md_a.dta, clear

. des
 Observations:            38                  
    Variables:             3                  5 Jun 2021 16:34
---------------------------------------------------------------------
Variable      Storage   Display    Value
    name         type    format    label      Variable label
---------------------------------------------------------------------
stkcd           float   %06.0f                
date            float   %tdCY-N-D             
mda             strL    %9s                   经营讨论与分析内容
---------------------------------------------------------------------
Sorted by: 

4.2 去停用词

去停用词操作主要用到上面提及的替换函数 ustrregexra(),具体操作如下:

. *- 设定中文停用词
. global stopwords "的 了 一些 一切 一方面"

. *- 生成停用词变量
. foreach v in $stopwords {
  2.     gen `v' = "`v'"
  3. }

. *- 从原始文本中剔除停用词
. foreach v in $stopwords {
  2.     replace mda = ustrregexra(mda, "`v'", "")
  3.     drop `v'
  4. }

4.3 计算文本情绪

. *- 设置情绪词典
. global positivewords "稳中求进 丰富 加快 增加"
. global negativewords "严格 挑战 下降"

. *- 下载我写的文本分析包 onetext
. ssc install onetext, replace

. *- 统计积极词语出现个数
. foreach v in $positivewords {
  2.         onetext mda, k("`v'") m(count) g(`v')
  3. }

. *- 统计消极词语出现个数
. foreach v in $negativewords {
  2.         onetext mda, k("`v'") m(count) g(`v')
  3. }

. *- 计算文本总长
. gen total = ustrlen(mda)

. *- 计算积极情绪得分与消极情绪得分,并删除多余变量
. egen pos = rowtotal($positivewords)
. egen neg = rowtotal($negativewords)
. drop $positivewords $negativewords

. *- 结果
. list pos neg total in 1/5

     +-------------------+
     | pos   neg   total |
     |-------------------|
  1. |  14     3    1945 |
  2. |  10     2    1862 |
  3. |   7     3    1430 |
  4. |   7     1     760 |
  5. |   8     2     977 |
     +-------------------+

4.4 进一步操作

接下来可以通过一些其他的方法来计算管理层披露的文本情绪与文本语调了。以下公式中,Pos 表示文本中的积极/正面词汇数量,Neg 表示文本中的消极/负面词汇数量,Tot 表示该文本的词语总数。

  • Sen=PosNegPos+Neg
  • Sen=Pos(Neg)Tot
  • Sen=NegPosNeg+Pos
  • Sen=NegPosTot
  • Sen=PosNegTot

上述指标可以参考以下文献:

  • [1] Henry E. Are investors influenced by how earnings press releases are written?[J]. The Journal of Business Communication (1973), 2008, 45(4): 363-407. -PDF-
  • [2] Price S M K, Doran J S, Peterson D R, et al. Earnings conference calls and stock returns: The incremental informativeness of textual tone[J]. Journal of Banking & Finance, 2012, 36(4): 992-1011. -PDF-
  • [3] 谢德仁, 林乐. 管理层语调能预示公司未来业绩吗?——基于我国上市公司年度业绩说明会的文本分析[J]. 会计研究, 2015(02):20-27+93. -Link-
  • [4] 曾庆生, 周波, 张程, 陈信元. 年报语调与内部人交易:“表里如一”还是“口是心非”?[J]. 管理世界, 2018,3 4(09):143-160. -Link-
  • [5] 付文博, 曾皓. 非处罚性监管能约束管理层语调操纵吗——基于年报文本的经验证据[J]. 当代财经, 2022(03):89-101. -Link-
  • [6] 张小慧, 孙晓玲, 张璇, 李万峰. 管理层语调会影响股价暴跌风险吗?——基于业绩说明会的文本分析[J]. 产经评论, 2022, 13(04):113-129. -Link-
  • [7] 王帆, 邹梦琪. 关键审计事项披露与企业投资效率——基于文本分析的经验证据[J]. 审计研究, 2022(03):69-79. -Link-
  • [8] 张勇. 客户管理层语调与企业研发投入——来自“管理层讨论与分析”文本的证据[J]. 会计与经济研究: 1-20[2023-01-04]. -Link-
  • [9] 于莹, 姚梅芳. 客户管理层负面语调与供应商未来绩效关系研究——基于MD&A的文本分析[J]. 税务与经济, 2022(02):79-87. -Link-
  • [10] 沈菊琴, 李淑琴, 孙付华. 年报语调与企业财务绩效:心口如一还是心口不一?[J]. 审计与经济研究, 2022, 37(01):69-80. -Link-
  • [11] 梁日新, 李英. 年报文本语调与审计费用——来自我国A股上市公司的经验数据[J]. 审计研究, 2021(05):109-119. -Link-

5. 结语

需要注意的是,本部分代码并不只局限于计算文本情绪,同时也可以根据相应的词典延伸至对企业数字化转型、信息批量质量等的计算。同时,onetext 命令也可以按照一定的程序按照词袋模型或者词集模型生成文本向量,从而计算余弦相似度与杰卡德相似度。更多实用功能等待读者的发现与挖掘!

6. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 正则, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh