词云

作者: ks_c | 来源:发表于2022-04-02 22:38 被阅读0次

    文章链接

    加载拓展包

    • Rwordseg:分词包,不要试图分太大的文件。本次使用了大概五分钟来给一个1MB左右大概几十万字的小说分词。

    • wordcloud2:词云绘制包

    • RColorBrewer:颜色

    library(Rwordseg)
    library(wordcloud2)
    library(RColorBrewer)
    

    设置颜色

    wordcolor <- rep(brewer.pal(n=10,name='Set3'),10) 
    #选择Set3颜色包中的10个颜色,每个颜色重复10次
    

    分词

    wordcloud2函数的参数

    parameter explanation
    data 数据
    size 字体大小
    minSize 副标题
    gridSize 网格大小
    fontFamily 字体
    fontWeight 字体粗细
    color 颜色
    backgroundColor 背景颜色
    minRotation 字体最小旋转角度
    maxRotation 字体最大旋转角度(如果两个参数数值相同则旋转角度都相同)
    shuffle
    rotateRatio 旋转的概率大小
    shape 形状
    ellipticity 扁平度
    widgetsize 小部件的大小
    figPath 图画大小

    形状的备选项:

    • 'circle' (default), '

    • cardioid' (apple or heart shape curve, the most known polar equation),

    • 'diamond' (alias of square),

    • 'triangle-forward',

    • 'triangle',

    • 'pentagon',

    • 'star'

    x <- readLines('data.txt',encoding = 'UTF-8') #读取文件
    
    xx <- segmentCN(x,anaylzer='hmm',return='vector') #用segmentCN函数进行中文分词
    
    xx <- unlist(xx) #如果只有一段话不需要这一句。多段话分词返回结果为列表。
    
    xx <- xx[nchar(xx)>1] #长度大于1的字符串(要用nchar函数而不是length函数)
    
    xx <- xx[xx!='说道'] 
    #把‘说道’删去了,30多万字中一共出现了快3000个说道。一百个字就会‘说道’一次吗。
    
    top <- sort(table(xx),decreasing = T)[1:100] # 频率出现前100个,decreasing=T降序排列
    
    wordcloud2(top,color=wordcolor,shape='star')
    

    segmentCN()函数的返回值里面不存在空格。但是以防万一最好运行xx <- xx[nchar(xx)>1],排除空格和单个字的词语

    如果需要过滤数字可以使用xx<-xx[!grepl('[1-9]',xx)]

    grep(), grepl()函数

    • grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE, invert = FALSE)

    • 抓取函数

    • 可以抓取字符串

    • 返回结果为规定的字符串的位置

    y <- c('a','b','z','g','c','c','d')
    grep("[a-d]", y)
    [1] 1 2 5 6 7
    
    • grepl(pattern, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)

    • 作用与grep()函数类似,返回结果为逻辑值。

    grepl("[a-d]", y)
    [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
    
    m <- as.character(c(1:9))
    grepl('[1-5]',m)
    [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
    

    因此grepl('[1-9]',xx)的返回值为xx中字符串是否为1-9中的任意一个。

    !grepl('[1-9]',xx)则是使结果相反,xx[!grepl('[1-9]',xx)]为选择xx中不是1-9的字符串

    结果

    效果

    相关文章

      网友评论

          本文标题:词云

          本文链接:https://www.haomeiwen.com/subject/xayxsrtx.html