👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:最新专题 | 计量专题 | 关于连享会
🍓 课程推荐:连享会:2025 寒假班
嘉宾:连玉君(初级|高级);杨海生(前沿)
时间:2025 年 1 月 13-24 日
咨询:王老师 18903405450(微信)
作者:杜思昱 (中山大学)
邮箱:dusy@mail2.sysu.edu.cn
目录
1. 引言
2 算法介绍
2.1 n-grams 算法
2.2 tf-idf 算法
3. textfind 命令
4. Stata 实操:分析政府报告
4.1 获取文本
4.2 关键词查找
4.3 结果分析
5. 结语
6. 参考文献
7. 相关推文
1. 引言
本文主要介绍了 Stata 中用于关键词搜索的命令:textfind
。该命令能够识别、分析并将文本数据转换为分类数据,以便在定量分析中进一步使用。其不仅可以实现由字符串实现的标准关键词搜索,也允许用户使用多个关键词和排除标准来识别数据集中的观察结果。同时,在结果中,textfind
命令会报告以下统计量:
Total Finds:根据特定条件匹配到的观测结果的数量; Average Finds:观测结果中特定条件的单词数; Average Length:特定词的文本长度; Average Position:特定词所在位置; Average tf-idf:词频-逆文档频率; Means test:不同搜索标准下的样本 t 检验的 p 值。
2 算法介绍
2.1 n-grams 算法
n-grams 是一种基于统计语言模型的算法,其主要思想是将文本分成若干个字节大小为 n 的序列。具体来看,有 n 个词组成的序列 (或者句子),其概率为:
根据链式规则,可得:
但上述计算方式存在两个问题:
模型参数空间巨大; 计算的概率数据矩阵严重稀疏 (如果任一项概率为 0,则联合概率为 0)。
为解决该问题,引入马尔科夫假设 (Markov assumption) 进行改进,其主要思想是当前词仅跟前面有限个词相关,即不必追溯最开始的词,这样便可以大幅缩减上式的长度。通过马尔科夫假设改进,上式变为:
由于条件概率的直接算法是计数法,上式又可写为:
2.2 tf-idf 算法
tf-idf 是文本挖掘和自然语言处理方面相当重要的算法。
其中,tf 指词频,即某个词在文章中出现的频率。对 tf 最直观的理解是,当一个词在文章中出现的频率越高时,文章的主题和这个词的相关可能性越大。但上述直观理解存在以下误区:
文章中出现最多的字词很可能是 “你”、“我”、“他”、“的”、“是”、“这” 等停用词,仅通过这些词来分析一篇文章的主题是不可行的。因此,在正式进行文本分析之前,需对文本进行剔除停用词处理; 在剔除停用词后,文章中高频词能否代表主题?例如,一篇描述国内专利的文章,其高频词汇很可能是 “中国”。这显然与文章的主题 “专利” 不符,但 “中国” 又不是一个停用词,此时候就需要另外一个算法:idf。
idf 即逆文档频率。上例中 “中国” 的词频最高,却不能反应文章主题,主要是因为 “中国” 这个词太常见了,其不仅在这篇文章里出现次数多,在其他文章里出现的次数也很多。这说明 “中国” 这个词不足以描述文章特征。于是,评价某个词的独特性算法 idf 就被设计出来——语料库文章总数/包含某个词的文章数。
|D| 表示语料库文章总数; 表示包含词 的文章数; 在分母上加 1,是为了避免分母为 0 带来的计算问题,取对数是为了降低 idf 差异。
上式说明,如果一个词在越多的文章中出现过,其独特性就越低,反之出现的文章数越少,idf 值越大,其独特性也就越高。
综上,tf-idf 计算公式如下:
由上式也可以看出,选取 tf-idf 值靠前的词作为文章主题,则准确性会大幅提高。
3. textfind 命令
命令安装:
ssc install textfind //安装 textfind 命令
基本语法:
textfind varlist [if] [in] [, keyword("string1" "string2" ...) but("string1" "string2"...) nocase exact or notable tag(newvar) nfinds length position tfidf]
keyword("string1" "string2" ...)
是主要的搜索选项,用于在变量集中查找选定的字符串。该字符串可以是文本、数字或任何其他ustrregexm()
正则表达式的搜索条件;but("string1" "string2" ...)
是主要的排除选项,用于在变量集中查找选定字符串并删除其匹配项;nocase
表示不区分大小写;exact
对变量集中的关键词执行精确搜索,只匹配完全等于 "string1","string2"… 的观测值;or
对关键词中的多个条目执行替代匹配,默认是 “string1” 和 “string2” 的附加搜索;notable
要求 Stata 不要展示统计量表;tag(newvar)
生成一个名为 newvar 的变量,用于标记找到的结果;nfinds
为关键词中的每个字符串生成一个变量,描述字符串在每次观察中的出现次数。默认的变量名是 myvar1_nfind,myvar2_nfind,… ;length
生成新的变量 myvar_length,描述在变量集中找到的每个变量的单词长度;position
为关键词中的每个字符串生成一个变量,描述每次观测中首次发现字符串的位置。默认变量名是 myvar1_pos,myvar2_pos,… ;tfidf
为关键词中每个字符串生成一个变量,描述文本在每次观察中的 tf-idf 逆向文档频率。默认变量名是 myvar1_tfidf,myvar2_tfidf,… 。
4. Stata 实操:分析政府报告
4.1 获取文本
copy "http://www.gov.cn/guowuyuan/2020zfgzbg.htm" govr.txt //复制网页内容到本地
shellout "govr.txt" // 打开查看本地的 txt 文档
从政府官网获取 2020 年政府工作报告,复制到本地后打开,得到如下结果:
可以看到,文档中有很多无关字符,但基本都是英文和符号,并不影响后续中文处理,因此可以不做处理。若要进行处理,可用 filefilter
或 subinfile
替换 govr.txt 文档中的无用字符。报告正文部分如下图所示:
4.2 关键词查找
insheet using govr.txt, delimiter(" ") //读入 txt
textfind v1, key("财政""经济""教育""医疗""健康""疫情")
The following table displays the keyword(s) and exclusion(s) criteria used in
the search and returns six statistics for each variable specified:
Total finds: the number of observations when criterion is met.
Average finds per obs: the average occurrence of word when criterion is met.
Average length: the average word length when criterion is met.
Average position: the average position of match when criterion is met.
Average tf-idf: the average term frequency-inverse document frequency
when the criterion is met.
Means test p-value: the p-value for a means comparison test across samples
identified by the different criteria.
Summary Table
-----------------------------------------------------------------------------
variable: v1
n: 562 Average Means
Total ----------------------------------------- test
keyword(s) Finds Finds Length Position TF-IDF p-value
-----------------------------------------------------------------------------
财政 4 1.75 150.75 58.5 .055839 .
经济 25 1.48 106.04 67.84 .052428 .083264
教育 2 6.5 105.5 82 .266509 .317742
医疗 2 3 117 66.5 .157223 .
健康 8 1.25 103.375 58.625 .057632 .
疫情 15 2.06667 160.667 . .047356 .
-----------------------------------------------------------------------------
Total 0 . . . . .000099
-----------------------------------------------------------------------------
exclusion(s):
textfind v1, key("经济") but("疫情") //排除疫情,对 “经济” 检索
Summary Table
----------------------------------------------------------------------------
variable: v1
n: 562 Average Means
Total ----------------------------------------- test
keyword(s) Finds Finds Length Position TF-IDF p-value
----------------------------------------------------------------------------
经济 25 1.48 106.04 67.84 .052428 .
----------------------------------------------------------------------------
Total 16 1.375 79.8125 51.3125 .072006 0
----------------------------------------------------------------------------
exclusion(s):
"疫情"
4.3 结果分析
根据统计结果,我们有以下发现:
“经济” 和 “疫情” 在 6 个检索词中出现次数最多; “教育” 和 “医疗” 拥有最高的 tf-idf 值,说明 2020 年政府工作报告主题更倾向教育和医疗行业,这或许与新冠疫情的爆发有关。
5. 结语
本文主要从算法基础和 Stata 实操两方面介绍了 Stata 的命令 textfind
,它能够识别并统计文本数据,并将其转换为分类数据。同时,textfind
的语法规则简单,应用也很方便,但其背后蕴藏着大量的文本分析的逻辑。此外,关键词 key()
选项中的内容多样化决定了其广泛的适用性,因此该命令有很高的实用价值。
6. 参考文献
Cox N J. Stata tip 98: Counting substrings within strings[J]. The Stata Journal, 2011, 11(2): 318-320. -PDF-
7. 相关推文
Note:产生如下推文列表的命令为:
lianxh 字符串 正则 文本, m
安装最新版lianxh
命令:
ssc install lianxh, replace
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。
专题:文本分析-爬虫 Stata文本分析之-tex2col-命令-文字变表格 Stata爬虫-正则表达式:爬取必胜客 Stata: 正则表达式和文本分析 在 Visual Studio (vsCode) 中使用正则表达式 正则表达式语言 - 快速参考 专题:Python-R-Matlab Python: 使用正则表达式从文本中定位并提取想要的内容
尊敬的老师 / 亲爱的同学们:
连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。 请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。 我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。