网上随便找段文字,就以Power BI官网上这段文字为例好了:
想要统计其中的词频,实现如下图的效果:
解法1:使用输入法词库
其中的难点无疑在分词了,中文不像英文可以按空格拆开分词,仅仅单靠Power Query中的功能遇到这种问题好像没法搞,因为它不知道你要按什么规则来拆,不知道哪几个字连起来算一个词。
那我们就得想办法告诉它规则,于是想到了输入法。输入法之所以如此贴心,就是因为有着丰富的词库,我们可以去输入法的设置里找出词库导出来。
我已经把我的输入法词库导出来并上传到网站服务器上,所以如果你找不到词库在哪就直接用我的吧。
let
源 = Excel.CurrentWorkbook(){[Name="源数据"]}[Content],
词库 = Table.FromColumns({List.Buffer(List.Select(Csv.Document(Web.Contents("https://pqfans.com/pq/pinyin/py.txt"),[Delimiter=" "])[Column2],each Text.Length(_)<>1))},{"词"}),
词频 = Table.AddColumn(词库, "词频", each List.Count(Text.PositionOf(源[文本]{0},[词],2))),
排序 = Table.Buffer(Table.Sort(词频,{{"词频", 1}})),
筛选 = Table.SelectRows(排序, each ([词频] <> 0))
in
筛选
解法2:使用R语言
以上是笨方法,但是如果在Power BI Desktop中,我们可以使用R.Execute运行R脚本,用jieba包进行分词。
那么首先你得安装R Open,并安装jieba。安装非常简单,首先去官网下载并装好R Open,然后打开并输入如下命令:install.packages("jiebaR")
等待自动安装完成即可。
先看下在R中如何来分词:
library("jiebaR")
wk
words
data.frame(words)
那么在Power BI中也类似,只不过我们想引用PBI内部的文本进行分词,先上代码吧:
let
源="Power BI 是一套商业分析工具,用于在组织中提供见解。可连接数百个数据源、简化数据准备并提供即席分析。生成美观的报表并进行发布,供组织在 Web 和移动设备上使用。每个人都可创建个性化仪表板,获取针对其业务的全方位独特见解。在企业内实现扩展,内置管理和安全性。",
加引号 = """"&Text.Remove(源,"""")&"""",
R脚本 = R.Execute("
library(""jiebaR"")
wk
words
df
"),
分词 = R脚本[Value]{0}
in
分词
为简化过程我直接把文本放在源中,实际上这个文本可以是从本地文件导入,也可以是从网上抓取的等等。
R脚本是以文本形式放在R.Execute函数中,所以我们可以对文本进行拼接,把源中的文本放到R脚本中。
尽管源中的文本已经是text,但是引用的时候还是要在文本的开头和结尾加上一对引号,所以我单独用了一个加引号的步骤便于大家理解。此处前后各4个引号,首尾两个代表引用文本,中间两个是引号的转义,代表一个引号。另外为了避免文本中本身包含引号而引发的错误,再做一个把引号移除的操作,反正我们又不要统计引号。
将数据框赋值给df变量,返回一个两列的table,分别为变量名及数据框内的数据,最后一步深化出[Value]中数据框的数据即可。
这是分词,最关键的一步做完了,剩下的词频统计直接分组就好了。
解法3:调用api
使用了一个名为SCWS的分词api,封装为自定义函数,调用即可。
let
fenci=(word)=>
let
url="http://www.xunsearch.com/scws/api.php",
headers=[#"Content-Type"="application/x-www-form-urlencoded"],
content="respond=json&ignore=yes&data="&word,
request=Table.FromRecords(Json.Document(Web.Contents(url,[Headers=headers,Content=Text.ToBinary(content)]))[words])
in
request,
result=fenci("Power BI 是一套商业分析工具,用于在组织中提供见解。可连接数百个数据源、简化数据准备并提供即席分析。生成美观的报表并进行发布,供组织在 Web 和移动设备上使用。每个人都可创建个性化仪表板,获取针对其业务的全方位独特见解。在企业内实现扩展,内置管理和安全性。")
in
result
附件
词频统计 (135 kB)