高亮输出之唐诗作者
本文作者:钱梦璇
文字编辑:张馨月
在我们阅读海量文章时,如果所有文章的字体、大小、颜色都一样,我们很难一下子从文章中汲取重要信息或者提取到我们需要的关键信息。这也就是为什么现在的文章在排版时会高亮显示某些内容,或者在做一篇报告时我们会将重要信息高亮显示的原因。 当然,这些工作完全可以由程序来帮你实现。小编将以一些唐诗内容为例,利用stata软件实现作者名的高亮显示输出。
调用python实现分词
clear all
python
import jieba
tangshi=[]
with open(r"E:\高亮输出之唐诗作者\唐诗.txt",encoding="utf8") as f:
for i in f.readlines():
str=i
tangshi.append(str)
jieba.load_userdict(r"E:\高亮输出之唐诗作者/tsdict.txt") #添加自定义词典
with open("唐诗分词.txt","w",encoding="utf8") as f2:
for unit in tangshi:
seg_list = jieba.cut(unit)
for word in seg_list:
f2.write(word+"\n")
end
在stata中直接输入python就打开了python端口,结束调用python时输入end即可。jieba是中国人研发的一个精品插件,它可以对一段中文进行分词,有三种分词模式。以上程序jieba.cut()说明用到的分词模式为精确模式,如果采用全模式只需在cut中添加参数cut_all=True,如果采用搜索引擎模式则需采用jieba.cut_for_search()。同时,可以用jieba.load_userdict()表示添加指定路径下的自定义词典。
此外,以上程序用到了两次with open() as f,第一个open()函数表示打开唐诗.txt,将每行内容变为字符串格式并append到tangshi列表中,第二个open函数中添加了参数“w”,表示打开一个新的唐诗分词.txt文档并写入,将分词后的结果word写入到txt文档中。
分词后的新文档如下所示:
对分词文档进行处理
import delimited using 唐诗分词.txt, clear encoding("utf-8")
rename v1 word
local N=_N
preserve
import delimited using E:\高亮输出之唐诗作者/tsdict.txt,clear encoding("utf8")
levelsof v1,local(keyword) clean
disp "`keyword'"
restore
利用import delimited命令将刚才分词后的文本文件读入到stata中。preserve命令可以把之前的内容保存在一个临时内存空间中,这样保存的文件,无论之后我们对文件进行什么操作,都可以随时通过restore将preserve命令之前的文件恢复到内存中,继续使用。
levelsof命令可以对指定变量的取值进行排序,并把其取值集合放置在一个local中。所以以上主要为了将自定义词典的词放置在名为`keyword'的local中,用于以下程序的判断。
gen count=.
forval position=1/`N'{
local word1=word[`position']
if ustrregexm("`keyword'","\b`word1'\b"){
replace count=1 in `position'
}
}
replace count=0 if count==.
save E:\高亮输出之唐诗作者/唐诗分词,replace
利用forvalue循环和if条件语句将新变量count取值为1或0,ustrregexm为正则表达式字符串函数中起到匹配作用的函数,若正则表达式"\b`word1'\b"能与字符串"`keyword'"中的某个子字符串匹配,则返回值为1,否则为0,其中\b表示匹配单词的边界位置。
如果分词后的词和自定义词典中的某个词一样即如果是作者名,则count值为1,否则为0.我们想要高亮输出的就是当count值为1时的作者名。
保存的唐诗分词.dta如下所示:
使用putdocx高亮输出
putdocx命令可以使用户通过命令行生成word文档,之前的推文中已详细介绍多次。
clear
cap mkdir E:\高亮输出之唐诗作者
cd E:\高亮输出之唐诗作者
!taskkill /F /IM WINWORD.EXE /T
putdocx begin //创造一个新docx文件
putdocx paragraph,halign(center) //开始新的一段;段落居中
use E:\高亮输出之唐诗作者/唐诗分词,clear
local N=_N
forval i=1/`N'{
local a=word[`i']
local b=count[`i']
if "`b'" == "1" {
putdocx text ("`a'"),font("黑体",12,black) shading(yellow)
}
else {
putdocx text ("`a'"),font("华文楷体",11,black)
}
}
putdocx save 唐诗高亮.docx ,replace
shellout 唐诗高亮.docx
putdocx begin创造一个新docx文件,putdocx paragraph,halign(center) 表示在文件中开启新的一段,段落居中。
同样的,利用forvalue循环和if条件语句将词输入到word文档中,输入命令为putdocxtext,如果count值为1,字体为黑体、字号为12、颜色为黑色,并加入黄色阴影,如果count值为0,则字体为华文楷体,字号为11、颜色为黑色。
最后通过putdocx save将word文档命名为“唐诗高亮.docx”并保存。通过shellout命令可以看到最终得到的高亮输出如下所示:
通过高亮输出,可以直观的展示出我们想要关注的信息。动手试试吧~
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。