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
分词
是有其局限性的,例如不能显示词性,不能添加用户词典等。我们将在之后的推文中一一解决这些问题。