听不懂人话?stata分词帮你搞定(一)

2017-09-11 闫续文 爬虫俱乐部 爬虫俱乐部


大大大大大新闻————自公众号推送视频讲解环节以来,深受广大读者朋友的喜爱。近日向我们提问的粉丝也是大幅增加呐!为了便捷管理相关信息,提高工作效率,我们对提问方式做了略微调整哟~提问者需点击推文底部“阅读原文”下载爬虫俱乐部用户问

题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

从今天起,我们将用一系列推文为大家介绍如何使用stata进行分词、如何使用stata与python交互、以及如何通过stata调用curl使用Boson进行分词

说到分词,想必大家都听过用“果然”造句的段子。老师请小明用果然造句,小明说:“我先吃水果然后喝汽水。”老师说不对,小明又说:“我还没讲完呢,我先吃水果然后喝汽水,果然拉肚子了。”玩笑归玩笑,分词的正确与否对于我们理解一句话来说十分重要,有了分词我们才能更好地理解句子表达的意思。

词 是最小的能够独立运用的语言单位,国际上常用的NLP算法,以及深层次的语法语义分析通常都是以词作为基本单位。由于中文的文本是由连续的字序列构成,词 与词之间没有天然的分隔符,所以要理解一篇文章,我们首先要将一条长句切分为一个个词。今天我们先来介绍如何使用stata进行分词

01

使用stata进行分词需要用到两个字符串函数ustrwordcount()ustrword()

1. ustrwordcount()的基本语法为:ustrwordcount(s[,loc])

s 为字符串;locale 表示程序运行的不同语言环境,如“en”表示英文,“cn”表示中文,每一个locale对象都代表了一个特定的地理、政治和文化地区。如果未指定 locale,则使用默认语言环境,例如,这台电脑的操作系统是Microsoft Windows中文版,则系统默认语言环境设置为“cn”。

该函数返回的是字符串s中非空的unicode单词个数。这里需要指明的是,unicode单词与由word()函数返回的单词不同,word(s,n)函数返回的是字符串s中第n个以空白字符分隔的字符串,而ustrwordcount()是以unicode单词为基础,返回unicode字符串中非空的unicode单词的数量,unicode单词是遵循一些语言(如中文,日语和泰语)的单词边界规则或字典的语言单位。

比如,我们运行:

di word("将爬虫 进行到底",2)

该函数返回的是第2个以空白字符分隔的字符串,所以结果为“进行到底”。

运行:

di ustrwordcount("将爬虫 进行到底","cn")

该函数返回的是按照中文词典进行分词的unicode单词个数,即“将”、“爬虫”、“进行”、“到底”,所以结果为4。

如果发生错误,该函数可能返回负数。

02

2. ustrword()的基本语法为:ustrword(s,n[,loc])

该 函数返回的是字符串s中第n个位置的unicode单词。n为正数表示的是从s开头数第n个unicode单词,n为负数表示的是从s结尾数第n个 unicode单词。如n为1表示的是返回s的第一个unicode单词,n为-1表示的是返回s的最后一个unicode单词。如果n大于cnt或小于 -cnt,则该函数返回缺失值,其中cnt是s所包含的unicode单词数,可以从ustrwordcount()中获得。如果发生错误,该函数也返回缺失值“”。

比如,我们运行:

di ustrword("将爬虫进行到底", 3, "cn") 

输出结果为“将爬虫进行到底”中第3个unicode单词“进行”。

运行:

di ustrword("将爬虫进行到底", 5, "cn")

由于5大于unicode单词数4,输出结果为缺失值“”。

有了这两个字符串函数的基础,接下来我们就要用完整的例子介绍如何使用stata进行分词啦。我们用file命令将开头小明“果然”的段子输入到txt文件中,保存为“分词.txt”,放在路径“E:\分词与情感分析”下。

clear

cd E:\分词与情感分析

tempname handle

file open `handle' using 分词.txt, replace text write

file write `handle' "小明说:“"

file write `handle' "我先吃水果然后喝汽水,"

file write `handle' "果然拉肚子了。”"

file close `handle'

shellout 分词.txt

可以看到txt文件中只有一行内容,我们用fileread函数将"分词.txt"的内容读入到stata中,同时生成一个变量v1为空。

set obs 1

gen v = fileread("分词.txt")

gen v1 = ""

取i为1到整个字符串所含unicode单词个数,做一个循环,依次将v1替换为前i个unicode单词,每个unicode单词间以空格隔开。

forvalues i = 1/`=ustrwordcount("`=v[1]'","cn")' {

    replace v1 = v1 + ustrword("`=v[1]'", `i', "cn") + " "

}

br

可以看到,v1列出了这一行内容中每一个unicode单词并以空格分隔,这样用stata进行的简单分词就完成啦。但是stata分词是有其局限性的,例如不能显示词性,不能添加用户词典等。我们将在之后的推文中一一解决这些问题。

什么?!没看懂!!不要紧!!戳下面,听爬虫小将的详细讲解,也欢迎大家的批评指正哟!


      以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

     应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做 事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                        文字编辑:王    悦

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.Stata 15Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shelloutopen anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

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

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号