温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh
作者:杜思昱 (中山大学)
邮箱:dusy@mail2.sysu.edu.cn
目录
本文主要介绍了 Stata 中用于关键词搜索的命令:textfind
。该命令能够识别、分析并将文本数据转换为分类数据,以便在定量分析中进一步使用。其不仅可以实现由字符串实现的标准关键词搜索,也允许用户使用多个关键词和排除标准来识别数据集中的观察结果。同时,在结果中,textfind
命令会报告以下统计量:
n-grams 是一种基于统计语言模型的算法,其主要思想是将文本分成若干个字节大小为 n 的序列。具体来看,有 n 个词组成的序列 (或者句子),其概率为:
根据链式规则,可得:
但上述计算方式存在两个问题:
为解决该问题,引入马尔科夫假设 (Markov assumption) 进行改进,其主要思想是当前词仅跟前面有限个词相关,即不必追溯最开始的词,这样便可以大幅缩减上式的长度。通过马尔科夫假设改进,上式变为:
由于条件概率的直接算法是计数法,上式又可写为:
tf-idf 是文本挖掘和自然语言处理方面相当重要的算法。
其中,tf 指词频,即某个词在文章中出现的频率。对 tf 最直观的理解是,当一个词在文章中出现的频率越高时,文章的主题和这个词的相关可能性越大。但上述直观理解存在以下误区:
idf 即逆文档频率。上例中 “中国” 的词频最高,却不能反应文章主题,主要是因为 “中国” 这个词太常见了,其不仅在这篇文章里出现次数多,在其他文章里出现的次数也很多。这说明 “中国” 这个词不足以描述文章特征。于是,评价某个词的独特性算法 idf 就被设计出来——语料库文章总数/包含某个词的文章数。
上式说明,如果一个词在越多的文章中出现过,其独特性就越低,反之出现的文章数越少,idf 值越大,其独特性也就越高。
综上,tf-idf 计算公式如下:
由上式也可以看出,选取 tf-idf 值靠前的词作为文章主题,则准确性会大幅提高。
命令安装:
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,… 。
copy "http://www.gov.cn/guowuyuan/2020zfgzbg.htm" govr.txt //复制网页内容到本地
shellout "govr.txt" // 打开查看本地的 txt 文档
从政府官网获取 2020 年政府工作报告,复制到本地后打开,得到如下结果:
可以看到,文档中有很多无关字符,但基本都是英文和符号,并不影响后续中文处理,因此可以不做处理。若要进行处理,可用 filefilter
或 subinfile
替换 govr.txt 文档中的无用字符。报告正文部分如下图所示:
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):
"疫情"
根据统计结果,我们有以下发现:
本文主要从算法基础和 Stata 实操两方面介绍了 Stata 的命令 textfind
,它能够识别并统计文本数据,并将其转换为分类数据。同时,textfind
的语法规则简单,应用也很方便,但其背后蕴藏着大量的文本分析的逻辑。此外,关键词 key()
选项中的内容多样化决定了其广泛的适用性,因此该命令有很高的实用价值。
Note:产生如下推文列表的命令为:
lianxh 字符串 正则 文本, m
安装最新版lianxh
命令:
ssc install lianxh, replace
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟,课程主页 Stata 33 讲 - 连玉君, 每讲 15 分钟. Stata 小白的取经之路 - 龙志能,时长:2 小时,课程主页 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh