查看原文
其他

高亮输出之唐诗作者

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:钱梦璇

文字编辑:张馨月

技术总编:张计宝


在我们阅读海量文章时,如果所有文章的字体、大小、颜色都一样,我们很难一下子从文章中汲取重要信息或者提取到我们需要的关键信息。这也就是为什么现在的文章在排版时会高亮显示某些内容,或者在做一篇报告时我们会将重要信息高亮显示的原因。
当然,这些工作完全可以由程序来帮你实现。小编将以一些唐诗内容为例,利用stata软件实现作者名的高亮显示输出。



调用python实现分词

首先在stata中调用python,利用Stata与python交互的中文分词系统—jieba分词接口,将如下所示的唐诗.txt中的诗词进行分词。


程序如下:
clear allpythonimport jiebatangshi=[]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 wordlocal N=_Npreserveimport delimited using E:\高亮输出之唐诗作者/tsdict.txt,clear encoding("utf8") levelsof v1,local(keyword) cleandisp "`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文档,之前的推文中已详细介绍多次。

clearcap mkdir E:\高亮输出之唐诗作者cd E:\高亮输出之唐诗作者!taskkill /F /IM WINWORD.EXE /Tputdocx begin //创造一个新docx文件putdocx paragraph,halign(center) //开始新的一段;段落居中use E:\高亮输出之唐诗作者/唐诗分词,clearlocal N=_Nforval 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 ,replaceshellout 唐诗高亮.docx

putdocx begin创造一个新docx文件,putdocx paragraph,halign(center) 表示在文件中开启新的一段,段落居中。

同样的,利用forvalue循环和if条件语句将词输入到word文档中,输入命令为putdocxtext,如果count值为1,字体为黑体、字号为12、颜色为黑色,并加入黄色阴影,如果count值为0,则字体为华文楷体,字号为11、颜色为黑色。

最后通过putdocx save将word文档命名为“唐诗高亮.docx”并保存。通过shellout命令可以看到最终得到的高亮输出如下所示:



通过高亮输出,可以直观的展示出我们想要关注的信息。动手试试吧~






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

湖北省各市疫情数据爬取

古代诗人总去的这些地方你一定要知道!

DataFrame数组常用方法(二)

ftools命令——畅游大数据时代的加速器

卫健委的“糊涂账”

Pandas中数据的排序与切片

DataFrame数组常用方法

巧用局部宏扩展函数dir

过了14天潜伏期真的没事了?

Pandas基本数据类型介绍

NumPy数组基本介绍

“个性化”sortobs命令,教你实现排序自由

携手战疫,我们在行动

恭贺新春,平安顺遂|各省疫情关注度地图

过年观影指南(二)

过年观影指南(一)

egenmore隐藏功能——进制转换

相遇insobs,如暗室逢灯

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存