精华内容
下载资源
问答
  • 求问大神如何用R语言和RstudioExcel中的文本数据进行文本预处理:文本过滤、文本去重、中文分词、词性标注、去停用词等。我是技术小白,请问最开始把Excel表数据导入代码应该怎么写?谢谢&#...
  • 1.演示使用的数据集为iris数据集 df<-iris ...4.输入的X矩阵数据进行归一化(神经网络 对于数据的输入值的区间有要求的,一般使用标准正太分布归一化) for(i in 1:4){ df[,i]<-scale(df

    1.演示使用的数据集为iris数据集

    df<-iris
    head(df)

    2.载入RSNNS包

    library(RSNNS)

    3.对数据进行预处理,将目标变量Specie转换为one_hot矩阵形式
    df<-cbind(df,decodeClassLabels(df$Species))
    head(df)

    4.对输入的X矩阵数据进行归一化(神经网络 对于数据的输入值的区间有要求的,一般使用标准正太分布归一化)
    for(i in 1:4){
    df[,i]<-scale(df[,i])}
    head(df)

    5.使用随机树种子123,对数据按7:3的比例化分为训练集和测试集。

    set.seed(123)
    sam<-sample(nrow(df),nrow(df)*0.7)
    dftrain<-df[sam,]
    dftest<-df[-sam,]

    6.使用mlp函数建立bp神经网络模型
    mobp<-mlp(as.matrix(dftrain[,1:4]),as.matrix(dftrain[,6:8]),size=4,
    learnFunc="SCG",learnFuncParams=c(0,0,0,0),hiddenActFunc="Act_TanH")

    7.对训练集进行预测
    pretrain<-predict(mobp,as.matrix(dftrain[,1:4]))
    head(pretrain)


    pretrainclass<-colnames(dftrain[,6:8])[apply(pretrain,1,which.max)]
    confumatrix<-table(dftrain$Species,pretrainclass)
    confumatrix


    sum(diag(confumatrix))/sum(confumatrix)
    分类正确率为100%

     

    8.对测试集进行预测
    pretest<-predict(mobp,as.matrix(dftest[,1:4]))
    head(pretest)


    pretestclass<-colnames(dftrain[,6:8])[apply(pretest,1,which.max)]
    confumatrix<-table(dftest$Species,pretestclass)
    confumatrix


    sum(diag(confumatrix))/sum(confumatrix)

    分类正确率为97.78%。

    可以看出,神经网线对于分类类型的任务可以做到很好预测性。

    Q:994804370
    闲:名曰夷希微
    抖:linxy_R_project

    感兴趣可以联系哦

     

     

     

     

     

     

    展开全文
  • R语言自然语言处理(NLP):情感分析新闻文本数据

    千次阅读 热门讨论 2020-04-30 22:45:56
    本文对R的文本内容进行情感分析。此实现利用了各种现有字典,此外,还可以创建自定义词典。自定义词典使用LASSO正则化作为一种​​统计方法来选择相关词语。最后,评估比较所有方法。

    原文链接:http://tecdat.cn/?p=19095

    原文出处:拓端数据部落公众号

     

     

    本文对R中的文本内容进行情感分析。此实现利用了各种现有的字典,此外,还可以创建自定义词典。自定义词典使用LASSO正则化作为一种​​统计方法来选择相关词语。最后,评估比较所有方法。

    介绍

    情感分析是自然语言处理(NLP),计算语言学和文本挖掘的核心研究分支。它是指从文本文档中提取主观信息的方法。换句话说,它提取表达意见的积极负面极性。人们也可能将情感分析称为 观点挖掘 (Pang and Lee 2008)。

    研究中的应用

    最近,情感分析受到了广泛的关注(K. Ravi和Ravi 2015; Pang和Lee 2008),我们将在下面进行探讨。当前在金融和社会科学领域的研究利用情感分析来理解人类根据文本材料做出的决策。这立即揭示了对从业者以及金融研究和社会科学领域的从业者的多种含义:研究人员可以使用R提取与读者相关的文本成分,并在此基础上检验其假设。同样,从业人员可以衡量哪种措辞对他们的读者而言实际上很重要,并相应地提高他们的写作水平(Pröllochs,Feuerriegel和Neumann 2015)。在下面的两个案例研究中,我们从金融和社会科学中论证了增加的收益。

    应用

    几个应用程序演示了情感分析在组织和企业中的用途:

    • 金融: 金融市场的投资者在行使股票所有权之前,会以金融新闻披露的形式参考文本信息。有趣的是,它们不仅依赖数据,而且还依赖信息,例如语气和情感(Henry 2008; Loughran和McDonald 2011; Tetlock 2007),从而极大地影响了股价。通过利用情感分析,自动化交易者可以分析财务披露中传达的情感,以便进行投资决策。

    • 市场营销: 市场营销部门通常对跟踪品牌形象感兴趣。为此,他们从社交媒体上收集了大量用户意见,并评估个人对品牌,产品和服务的感受。

    • 评级和评论平台: 评级和评论平台通过收集用户对某些产品和服务的评级或偏好来实现有价值的功能。在这里,人们可以自动处理大量用户生成的内容(UGC)并利用由此获得的知识。例如,人们可以确定哪些提示传达了积极或者负面的意见,甚至可以自动验证其可信度。

    情感分析方法

    随着情感分析被应用于广泛的领域和文本来源,研究已经设计出各种测量情感的方法。最近的文献综述(Pang and Lee 2008)提供了一个全面的,与领域无关的调查。

    一方面,当机器学习方法追求高预测性能时,它是首选。但是,机器学习通常充当黑匣子,从而使解释变得困难。另一方面,基于字典的方法会生成肯定和否定单词的列表。然后,将这些单词的相应出现组合为单个情感评分。因此,基本的决定变得可追溯,研究人员可以理解导致特定情感的因素。

    另外, SentimentAnalysis 允许生成定制的字典。它们针对特定领域进行了定制,与纯字典相比,提高了预测性能,并具有完全的可解释性。可以在(Pröllochs,Feuerriegel和Neumann 2018)中找到此方法的详细信息。

    在执行情感分析的过程中,必须将正在运行的文本转换为一种机器可读的格式。这是通过执行一系列预处理操作来实现的。首先,将文本标记为单个单词,然后执行常见的预处理步骤:停用词的删除,词干,标点符号的删除以及小写的转换。这些操作也默认在中进行 SentimentAnalysis,但可以根据个人需要进行调整。

     

    简短示范

    # 分析单个字符极性(正/负)
    
    anaSen("是的,这对德国队来说是一场很棒的足球比赛!")
    
    ## [1] positive
    ## Levels: negative positive
    # 创建字符串向量
    
    
    documents <- c("哇,我真的很喜欢新的轻型军刀!",
    
    "那本书很棒。",
    
    "R是一种很棒的语言。",
    
    "这家餐厅的服务很糟糕。"
    
    "这既不是正面也不是负面。",
    
    "服务员忘了我的甜点-多么糟糕的服务!")
    
    # 分析情感
    
    
    anaSen(documents)
    
    # 根据QDAP词典提取基于词典的情感
    
    
    sentiment$SentimentQDAP
    ## [1]  0.3333333  0.5000000  0.5000000 -0.3333333  0.0000000 -0.4000000
    #查看情感方向(即正面,中性和负面)
    
    
    ToDirection(sentiment$SentimentQDAP)
    ## [1] positive positive positive negative neutral  negative
    ## Levels: negative neutral positive
    response <- c(+1, +1, +1, -1, 0, -1)
    
    comToRne(sentiment, response)
    ##                              WordCount  SentimentGI  NegativityGI
    ## cor                        -0.18569534  0.990011498 -9.974890e-01
    ## cor.t.statistic            -0.37796447 14.044046450 -2.816913e+01
    ## cor.p.value                 0.72465864  0.000149157  9.449687e-06
    ## lm.t.value                 -0.37796447 14.044046450 -2.816913e+01
    ## r.squared                   0.03448276  0.980122766  9.949843e-01
    ## RMSE                        3.82970843  0.450102869  1.186654e+00
    ## MAE                         3.33333333  0.400000000  1.100000e+00
    ## Accuracy                    0.66666667  1.000000000  6.666667e-01
    ## Precision                          NaN  1.000000000           NaN
    ## Sensitivity                 0.00000000  1.000000000  0.000000e+00
    ## Specificity                 1.00000000  1.000000000  1.000000e+00
    ## F1                          0.00000000  0.500000000  0.000000e+00
    ## BalancedAccuracy            0.50000000  1.000000000  5.000000e-01
    ## avg.sentiment.pos.response  3.25000000  0.333333333  8.333333e-02
    ## avg.sentiment.neg.response  4.00000000 -0.633333333  6.333333e-01
    ##                            PositivityGI SentimentHE NegativityHE
    ## cor                         0.942954167   0.4152274 -0.083045480
    ## cor.t.statistic             5.664705543   0.9128709 -0.166666667
    ## cor.p.value                 0.004788521   0.4129544  0.875718144
    ## lm.t.value                  5.664705543   0.9128709 -0.166666667
    ## r.squared                   0.889162562   0.1724138  0.006896552
    ## RMSE                        0.713624032   0.8416254  0.922958207
    ## MAE                         0.666666667   0.7500000  0.888888889
    ## Accuracy                    0.666666667   0.6666667  0.666666667
    ## Precision                           NaN         NaN          NaN
    ## Sensitivity                 0.000000000   0.0000000  0.000000000
    ## Specificity                 1.000000000   1.0000000  1.000000000
    ## F1                          0.000000000   0.0000000  0.000000000
    ## BalancedAccuracy            0.500000000   0.5000000  0.500000000
    ## avg.sentiment.pos.response  0.416666667   0.1250000  0.083333333
    ## avg.sentiment.neg.response  0.000000000   0.0000000  0.000000000
    ##                            PositivityHE SentimentLM NegativityLM
    ## cor                           0.3315938   0.7370455  -0.40804713
    ## cor.t.statistic               0.7029595   2.1811142  -0.89389841
    ## cor.p.value                   0.5208394   0.0946266   0.42189973
    ## lm.t.value                    0.7029595   2.1811142  -0.89389841
    ## r.squared                     0.1099545   0.5432361   0.16650246
    ## RMSE                          0.8525561   0.7234178   0.96186547
    ## MAE                           0.8055556   0.6333333   0.92222222
    ## Accuracy                      0.6666667   0.8333333   0.66666667
    ## Precision                           NaN   1.0000000          NaN
    ## Sensitivity                   0.0000000   0.5000000   0.00000000
    ## Specificity                   1.0000000   1.0000000   1.00000000
    ## F1                            0.0000000   0.3333333   0.00000000
    ## BalancedAccuracy              0.5000000   0.7500000   0.50000000
    ## avg.sentiment.pos.response    0.2083333   0.2500000   0.08333333
    ## avg.sentiment.neg.response    0.0000000  -0.1000000   0.10000000
    ##                            PositivityLM RatioUncertaintyLM SentimentQDAP
    ## cor                           0.6305283                 NA  0.9865356369
    ## cor.t.statistic               1.6247248                 NA 12.0642877257
    ## cor.p.value                   0.1795458                 NA  0.0002707131
    ## lm.t.value                    1.6247248                 NA 12.0642877257
    ## r.squared                     0.3975659                 NA  0.9732525629
    ## RMSE                          0.7757911          0.9128709  0.5398902495
    ## MAE                           0.7222222          0.8333333  0.4888888889
    ## Accuracy                      0.6666667          0.6666667  1.0000000000
    ## Precision                           NaN                NaN  1.0000000000
    ## Sensitivity                   0.0000000          0.0000000  1.0000000000
    ## Specificity                   1.0000000          1.0000000  1.0000000000
    ## F1                            0.0000000          0.0000000  0.5000000000
    ## BalancedAccuracy              0.5000000          0.5000000  1.0000000000
    ## avg.sentiment.pos.response    0.3333333          0.0000000  0.3333333333
    ## avg.sentiment.neg.response    0.0000000          0.0000000 -0.3666666667
    ##                            NegativityQDAP PositivityQDAP
    ## cor                          -0.944339551    0.942954167
    ## cor.t.statistic              -5.741148345    5.664705543
    ## cor.p.value                   0.004560908    0.004788521
    ## lm.t.value                   -5.741148345    5.664705543
    ## r.squared                     0.891777188    0.889162562
    ## RMSE                          1.068401367    0.713624032
    ## MAE                           1.011111111    0.666666667
    ## Accuracy                      0.666666667    0.666666667
    ## Precision                             NaN            NaN
    ## Sensitivity                   0.000000000    0.000000000
    ## Specificity                   1.000000000    1.000000000
    ## F1                            0.000000000    0.000000000
    ## BalancedAccuracy              0.500000000    0.500000000
    ## avg.sentiment.pos.response    0.083333333    0.416666667
    ## avg.sentiment.neg.response    0.366666667    0.000000000
    ##                            WordCount SentimentGI NegativityGI PositivityGI
    ## Accuracy                   0.6666667   1.0000000   0.66666667    0.6666667
    ## Precision                        NaN   1.0000000          NaN          NaN
    ## Sensitivity                0.0000000   1.0000000   0.00000000    0.0000000
    ## Specificity                1.0000000   1.0000000   1.00000000    1.0000000
    ## F1                         0.0000000   0.5000000   0.00000000    0.0000000
    ## BalancedAccuracy           0.5000000   1.0000000   0.50000000    0.5000000
    ## avg.sentiment.pos.response 3.2500000   0.3333333   0.08333333    0.4166667
    ## avg.sentiment.neg.response 4.0000000  -0.6333333   0.63333333    0.0000000
    ##                            SentimentHE NegativityHE PositivityHE
    ## Accuracy                     0.6666667   0.66666667    0.6666667
    ## Precision                          NaN          NaN          NaN
    ## Sensitivity                  0.0000000   0.00000000    0.0000000
    ## Specificity                  1.0000000   1.00000000    1.0000000
    ## F1                           0.0000000   0.00000000    0.0000000
    ## BalancedAccuracy             0.5000000   0.50000000    0.5000000
    ## avg.sentiment.pos.response   0.1250000   0.08333333    0.2083333
    ## avg.sentiment.neg.response   0.0000000   0.00000000    0.0000000
    ##                            SentimentLM NegativityLM PositivityLM
    ## Accuracy                     0.8333333   0.66666667    0.6666667
    ## Precision                    1.0000000          NaN          NaN
    ## Sensitivity                  0.5000000   0.00000000    0.0000000
    ## Specificity                  1.0000000   1.00000000    1.0000000
    ## F1                           0.3333333   0.00000000    0.0000000
    ## BalancedAccuracy             0.7500000   0.50000000    0.5000000
    ## avg.sentiment.pos.response   0.2500000   0.08333333    0.3333333
    ## avg.sentiment.neg.response  -0.1000000   0.10000000    0.0000000
    ##                            RatioUncertaintyLM SentimentQDAP NegativityQDAP
    ## Accuracy                            0.6666667     1.0000000     0.66666667
    ## Precision                                 NaN     1.0000000            NaN
    ## Sensitivity                         0.0000000     1.0000000     0.00000000
    ## Specificity                         1.0000000     1.0000000     1.00000000
    ## F1                                  0.0000000     0.5000000     0.00000000
    ## BalancedAccuracy                    0.5000000     1.0000000     0.50000000
    ## avg.sentiment.pos.response          0.0000000     0.3333333     0.08333333
    ## avg.sentiment.neg.response          0.0000000    -0.3666667     0.36666667
    ##                            PositivityQDAP
    ## Accuracy                        0.6666667
    ## Precision                             NaN
    ## Sensitivity                     0.0000000
    ## Specificity                     1.0000000
    ## F1                              0.0000000
    ## BalancedAccuracy                0.5000000
    ## avg.sentiment.pos.response      0.4166667
    ## avg.sentiment.neg.response      0.0000000

    从文本挖掘中执行了一组预处理操作。将标记每个文档,最后将输入转换为文档项矩阵。

     

    输入

    提供了具有其他几种输入格式的接口,其中包括

    • 字符串向量。

    • tm 软件包中实现的DocumentTermMatrix和 TermDocumentMatrix(Feinerer,Hornik和Meyer 2008)。

    • tm 软件包实现的语料库对象 (Feinerer,Hornik和Meyer 2008)。

    我们在下面提供示例。

    向量的字符串

    documents <- c("这很好",
    
    "这不好",
    
    "这介于两者之间")
    convertToDirection(analyzeSentiment(documents)$SentimentQDAP)
    ## [1] positive negative neutral 
    ## Levels: negative neutral positive

    文档词语矩阵

    corpus <- VCorpus(VectorSource(documents))
    convertToDirection(analyzeSentiment(corpus)$SentimentQDAP)
    ## [1] positive negative neutral 
    ## Levels: negative neutral positive

    语料库对象

    ## [1] positive negative neutral 
    ## Levels: negative neutral positive

    可以直接与文档术语矩阵一起使用,因此一开始就可以使用自定义的预处理操作。之后,可以计算情感分数。例如,可以使用其他列表中的停用词替换停用词。

    字典

    可区分三种不同类型的词典。它们所存储的数据各不相同,这些数据最终还控制着可以应用哪种情感分析方法。字典如下:

    • SentimentDictionaryWordlist 包含属于一个类别的单词列表。

    • SentimentDictionaryBinary 存储两个单词列表,一个用于肯定条目,一个用于否定条目。

    • SentimentDictionaryWeighted 允许单词的情感评分。

    情感词典词表

    # 替代
    
    d <- Dictionary(c(“不确定”,“可能”,“有可能”))
    summary(d)
    ## Dictionary type:  word list (single set)
    ## Total entries:    3

    情感词典

    d <- DictionaryBin(c(“增加”,“上升”,“更多”),
                                   c(“下降”))
    summary(d)
    ## Dictionary type:  binary (positive / negative)
    ## Total entries:    5
    ## Positive entries: 3 (60%)
    ## Negative entries: 2 (40%)

    情感词典加权

    d <- SentimentDictionaryWeighted(c(“增加”,“减少”,“退出”),
                                     c(+1, -1, -10),
                                     rep(NA, 3))
    summary(d)
    ## Dictionary type:  weighted (words with individual scores)
    ## Total entries:    3
    ## Positive entries: 1 (33.33%)
    ## Negative entries: 2 (66.67%)
    ## Neutral entries:  0 (0%)
    ## 
    ## Details
    ## Average score:      -3.333333
    ## Median:             -1
    ## Min:                -10
    ## Max:                1
    ## Standard deviation: 5.859465
    ## Skewness:           -0.6155602
    d <- SentimentDictionary(c(“增加”,“减少”,“退出”),
                             c(+1, -1, -10),
                             rep(NA, 3))
    summary(d)                         
    ## Dictionary type:  weighted (words with individual scores)
    ## Total entries:    3
    ## Positive entries: 1 (33.33%)
    ## Negative entries: 2 (66.67%)
    ## Neutral entries:  0 (0%)
    ## 
    ## Details
    ## Average score:      -3.333333
    ## Median:             -1
    ## Min:                -10
    ## Max:                1
    ## Standard deviation: 5.859465
    ## Skewness:           -0.6155602

    字典生成

    用向量的形式表示因变量。此外,变量给出了单词在文档中出现的次数。然后,该方法估计具有截距和系数的线性模型。估计基于LASSO正则化,它执行变量选择。这样,它将某些系数设置为正好为零。然后可以根据剩余单词的系数按极性对它们进行排序。

    # 创建字符串向量
    
    
    documents <- c(“这是一件好事!”,
    
    “这是一件非常好的事!”,
    
    “没关系。”
    
    “这是一件坏事。”,
    
    “这是一件非常不好的事情。”
    
    )
    response <- c(1, 0.5, 0, -0.5, -1)
    
    # 使用LASSO正则化生成字典
    
    
    dict
    ## Type: weighted (words with individual scores)
    ## Intercept: 5.55333e-05
    ## -0.51 bad
    ##  0.51 good
    summary(dict)
    ## Dictionary type:  weighted (words with individual scores)
    ## Total entries:    2
    ## Positive entries: 1 (50%)
    ## Negative entries: 1 (50%)
    ## Neutral entries:  0 (0%)
    ## 
    ## Details
    ## Average score:      -5.251165e-05
    ## Median:             -5.251165e-05
    ## Min:                -0.5119851
    ## Max:                0.5118801
    ## Standard deviation: 0.7239821
    ## Skewness:           0

    有几种微调选项。只需更改参数,就可以用弹性网络模型替换LASSO  。

    最后,可以使用read() 和 保存和重新加载字典 write()

    评估

    最终,例程允许人们进一步挖掘生成的字典。一方面,可以通过summary() 例程显示简单的概述 。另一方面,核密度估计也可以可视化正词和负词的分布。

    ## Comparing: wordlist vs weighted
    ## 
    ## Total unique words: 4213
    ## Matching entries: 2 (0.0004747211%)
    ## Entries with same classification: 0 (0%)
    ## Entries with different classification: 2 (0.0004747211%)
    ## Correlation between scores of matching entries: 1
    ## $totalUniqueWords
    ## [1] 4213
    ## 
    ## $totalSameWords
    ## [1] 2
    ## 
    ## $ratioSameWords
    ## [1] 0.0004747211
    ## 
    ## $numWordsEqualClass
    ## [1] 0
    ## 
    ## $numWordsDifferentClass
    ## [1] 2
    ## 
    ## $ratioWordsEqualClass
    ## [1] 0
    ## 
    ## $ratioWordsDifferentClass
    ## [1] 0.0004747211
    ## 
    ## $correlation
    ## [1] 1
    ##                             Dictionary
    ## cor                         0.94868330
    ## cor.t.statistic             5.19615237
    ## cor.p.value                 0.01384683
    ## lm.t.value                  5.19615237
    ## r.squared                   0.90000000
    ## RMSE                        0.23301039
    ## MAE                         0.20001111
    ## Accuracy                    1.00000000
    ## Precision                   1.00000000
    ## Sensitivity                 1.00000000
    ## Specificity                 1.00000000
    ## F1                          0.57142857
    ## BalancedAccuracy            1.00000000
    ## avg.sentiment.pos.response  0.45116801
    ## avg.sentiment.neg.response -0.67675202

    下面的示例演示如何将计算出的字典用于预测样本外数据的情感。然后通过将其与内置词典进行比较来评估预测性能。

    test_documents <- c(“这既不是好事也不是坏事”,
    
    “真是好主意!”,
    
    “不错”
    )
    
    pred <- predict(dict, test_documents)
    
    
    ##                              Dictionary
    ## cor                        5.922189e-05
    ## cor.t.statistic            5.922189e-05
    ## cor.p.value                9.999623e-01
    ## lm.t.value                 5.922189e-05
    ## r.squared                  3.507232e-09
    ## RMSE                       8.523018e-01
    ## MAE                        6.666521e-01
    ## Accuracy                   3.333333e-01
    ## Precision                  0.000000e+00
    ## Sensitivity                         NaN
    ## Specificity                3.333333e-01
    ## F1                         0.000000e+00
    ## BalancedAccuracy                    NaN
    ## avg.sentiment.pos.response 1.457684e-05
    ## avg.sentiment.neg.response          NaN

    ##                             WordCount SentimentGI NegativityGI
    ## cor                        -0.8660254 -0.18898224   0.18898224
    ## cor.t.statistic            -1.7320508 -0.19245009   0.19245009
    ## cor.p.value                 0.3333333  0.87896228   0.87896228
    ## lm.t.value                 -1.7320508 -0.19245009   0.19245009
    ## r.squared                   0.7500000  0.03571429   0.03571429
    ## RMSE                        1.8257419  1.19023807   0.60858062
    ## MAE                         1.3333333  0.83333333   0.44444444
    ## Accuracy                    1.0000000  0.66666667   1.00000000
    ## Precision                         NaN  0.00000000          NaN
    ## Sensitivity                       NaN         NaN          NaN
    ## Specificity                 1.0000000  0.66666667   1.00000000
    ## F1                          0.0000000  0.00000000   0.00000000
    ## BalancedAccuracy                  NaN         NaN          NaN
    ## avg.sentiment.pos.response  2.0000000 -0.16666667   0.44444444
    ## avg.sentiment.neg.response        NaN         NaN          NaN
    ##                            PositivityGI SentimentHE NegativityHE
    ## cor                         -0.18898224 -0.18898224           NA
    ## cor.t.statistic             -0.19245009 -0.19245009           NA
    ## cor.p.value                  0.87896228  0.87896228           NA
    ## lm.t.value                  -0.19245009 -0.19245009           NA
    ## r.squared                    0.03571429  0.03571429           NA
    ## RMSE                         0.67357531  0.67357531    0.8164966
    ## MAE                          0.61111111  0.61111111    0.6666667
    ## Accuracy                     1.00000000  1.00000000    1.0000000
    ## Precision                           NaN         NaN          NaN
    ## Sensitivity                         NaN         NaN          NaN
    ## Specificity                  1.00000000  1.00000000    1.0000000
    ## F1                           0.00000000  0.00000000    0.0000000
    ## BalancedAccuracy                    NaN         NaN          NaN
    ## avg.sentiment.pos.response   0.27777778  0.27777778    0.0000000
    ## avg.sentiment.neg.response          NaN         NaN          NaN
    ##                            PositivityHE SentimentLM NegativityLM
    ## cor                         -0.18898224 -0.18898224   0.18898224
    ## cor.t.statistic             -0.19245009 -0.19245009   0.19245009
    ## cor.p.value                  0.87896228  0.87896228   0.87896228
    ## lm.t.value                  -0.19245009 -0.19245009   0.19245009
    ## r.squared                    0.03571429  0.03571429   0.03571429
    ## RMSE                         0.67357531  1.19023807   0.60858062
    ## MAE                          0.61111111  0.83333333   0.44444444
    ## Accuracy                     1.00000000  0.66666667   1.00000000
    ## Precision                           NaN  0.00000000          NaN
    ## Sensitivity                         NaN         NaN          NaN
    ## Specificity                  1.00000000  0.66666667   1.00000000
    ## F1                           0.00000000  0.00000000   0.00000000
    ## BalancedAccuracy                    NaN         NaN          NaN
    ## avg.sentiment.pos.response   0.27777778 -0.16666667   0.44444444
    ## avg.sentiment.neg.response          NaN         NaN          NaN
    ##                            PositivityLM RatioUncertaintyLM SentimentQDAP
    ## cor                         -0.18898224                 NA   -0.18898224
    ## cor.t.statistic             -0.19245009                 NA   -0.19245009
    ## cor.p.value                  0.87896228                 NA    0.87896228
    ## lm.t.value                  -0.19245009                 NA   -0.19245009
    ## r.squared                    0.03571429                 NA    0.03571429
    ## RMSE                         0.67357531          0.8164966    1.19023807
    ## MAE                          0.61111111          0.6666667    0.83333333
    ## Accuracy                     1.00000000          1.0000000    0.66666667
    ## Precision                           NaN                NaN    0.00000000
    ## Sensitivity                         NaN                NaN           NaN
    ## Specificity                  1.00000000          1.0000000    0.66666667
    ## F1                           0.00000000          0.0000000    0.00000000
    ## BalancedAccuracy                    NaN                NaN           NaN
    ## avg.sentiment.pos.response   0.27777778          0.0000000   -0.16666667
    ## avg.sentiment.neg.response          NaN                NaN           NaN
    ##                            NegativityQDAP PositivityQDAP
    ## cor                            0.18898224    -0.18898224
    ## cor.t.statistic                0.19245009    -0.19245009
    ## cor.p.value                    0.87896228     0.87896228
    ## lm.t.value                     0.19245009    -0.19245009
    ## r.squared                      0.03571429     0.03571429
    ## RMSE                           0.60858062     0.67357531
    ## MAE                            0.44444444     0.61111111
    ## Accuracy                       1.00000000     1.00000000
    ## Precision                             NaN            NaN
    ## Sensitivity                           NaN            NaN
    ## Specificity                    1.00000000     1.00000000
    ## F1                             0.00000000     0.00000000
    ## BalancedAccuracy                      NaN            NaN
    ## avg.sentiment.pos.response     0.44444444     0.27777778
    ## avg.sentiment.neg.response            NaN            NaN

    预处理

    如果需要,可以实施适合特定需求的预处理阶段。如函数 ngram_tokenize() ,用于从语料库中提取n-gram。

    tdm <- TermDocumentMatrix(corpus, 
                              control=list(wordLengths=c(1,Inf), 
                                           tokenize=function(x) ngram_tokenize(x, char=FALSE, 
                                                                               ngmin=1, ngmax=2)))
    
    ## Dictionary type:  weighted (words with individual scores)
    ## Total entries:    7
    ## Positive entries: 4 (57.14%)
    ## Negative entries: 3 (42.86%)
    ## Neutral entries:  0 (0%)
    ## 
    ## Details
    ## Average score:      5.814314e-06
    ## Median:             1.602469e-16
    ## Min:                -0.4372794
    ## Max:                0.4381048
    ## Standard deviation: 0.301723
    ## Skewness:           0.00276835
    dict
    ## Type: weighted (words with individual scores)
    ## Intercept: -5.102483e-05
    ## -0.44 不好
    ## -0.29 非常糟糕
    ## 0.29  好
    
    
    

    性能优化

     

    ##   SentimentLM
    ## 1         0.5
    ## 2         0.5
    ## 3         0.0
    ## 4        -0.5
    ## 5        -0.5

    语言支持和可扩展性

     可以适应其他语言使用。为此,需要在两点上进行更改:

    • 预处理:使用参数 language="" 来执行所有预处理操作。

    • 字典: 可以使用附带的字典生成方法 。然后,这可以自动生成可应用于给定语言的正负词词典。

    下面的示例使用德语示例。最后,我们进行情感分析。

    documents <- c("Das ist ein gutes Resultat",
                   "Das Ergebnis war schlecht")
    
    sentiment <- ana(documents,
                                  language="german",
    sentiment
    ##   GermanSentiment
    ## 1             0.0
    ## 2            -0.5
    ## [1] positive negative
    ## Levels: negative positive

    同样,可以使用自定义情感分数来实现字典。

    woorden <- c("goed","slecht")
    scores <- c(0.8,-0.5)
    
    ##   DutchSentiment
    ## 1           -0.5

     

    实例

    我们利用了tm 包中的路透社石油新闻 。

    
    # 分析情感
    
    
    sentiment <- ana(crude)
    
    # 计算正面和负面新闻发布数量
    
    
    table(coToB(sentiment$SentimentLM))
    ## 
    ## negative positive 
    ##       16        4
    # 情感最高和最低的新闻
    
    
    ## [1] "HOUSTON OIL <HO> RESERVES STUDY COMPLETED"
    crude[[which.min(sentiment$SentimentLM)]]$meta$heading
    ## [1] "DIAMOND SHAMROCK (DIA) CUTS CRUDE PRICES"
    # 查看情感变量的摘要统计
    
    
    summary(sentiment$SentimentLM)
    ##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
    ## -0.08772 -0.04366 -0.02341 -0.02953 -0.01375  0.00000
    # 可视化标准化情感变量的分布
    
    
    hist(scale(sentiment$SentimentLM))

    # 计算相关
    
    ##               SentimentLM SentimentHE SentimentQDAP
    ## SentimentLM     1.0000000   0.2769878     0.4769730
    ## SentimentHE     0.2769878   1.0000000     0.6141075
    ## SentimentQDAP   0.4769730   0.6141075     1.0000000
    #  1987-02-26  1987-03-02之间的原油新闻
    
    
    plot(senti$Sentime)

    plot(SenLM, x=date, cumsum=TRUE)

    单词计算

    对单词进行计数 。

    #词(无停用词)
    
    ##   WordCount
    ## 1         3
    # 计算所有单词(包括停用词)
    
    ##   WordCount
    ## 1         4

     

    参考文献

    Feinerer,Ingo,Kurt Hornik和David Meyer。2008年。“ R中的文本挖掘基础结构”。 统计软件杂志 25(5):1–54。

    Tetlock,Paul C.,2007年。“将内容传递给投资者的情感:媒体在股票市场中的作用。” 金融杂志 62(3):1139–68。


    最受欢迎的见解

    1.探析大数据期刊文章研究热点

    2.618网购数据盘点-剁手族在关注什么

    3.r语言文本挖掘tf-idf主题建模,情感分析n-gram建模研究

    4.python主题建模可视化lda和t-sne交互式可视化

    5.疫情下的新闻数据观察

    6.python主题lda建模和t-sne可视化

    7.r语言中对文本数据进行主题模型topic-modeling分析

    8.主题模型:数据聆听人民网留言板的那些“网事”

    9.python爬虫进行web抓取lda主题语义数据分析

     

    展开全文
  • 最近一直在忙于数据清理、整理,分析、可视化都不多,想来把数据处理一些方法分享给大家! 本篇是你接到一个烫手山芋时,如何将它们一并拿下! stringr包函数处理数据可谓是屡试不爽,例如:网络爬取...

    最近一直在忙于数据清理、整理,分析、可视化都不多,想来把数据处理中的一些方法分享给大家!

    本篇是对你接到一个烫手山芋时,如何将它们一并拿下!

     

    stringr包函数处理脏数据可谓是屡试不爽,例如:网络爬取的数据、平台反馈数据、用户数据、医疗数据

    由于时间比较赶,下面写到的都是常用的数据处理函数

    1、最基础的就是字符串拼接函数:str_c、str_join

    2、数据匹配函数:inner_join、right_join、left_join、semi_join、anti_join等,其实这个就和sql中的一样。在你匹配数据的时候经常出现匹配误差很大,而实际上很多数据本身是匹配的,那么你赶紧用用str_trim去除数据中的空格,还有数据的格式,这个就很容易从报错中知道。

    3、字符串的计数str_count: 字符串计数、str_length: 字符串长度,至于怎么用今天就不写了,太晚了。

    4、数据拆分函数:str_split、str_split_fixed,两者的 区别在于输出数据格式不同、参数可选不同

    5、匹配、筛选、清理对应格式数据,str_replace、str_replace_all,两者主要在于前者只有匹配第一个与之相对应格式的数据,而后者会处理所有,函数中均有三个参数:数据列column或者文本数据等,匹配模式pattern(可根据需求使用固定格式的匹配方式、还可用正则表达式编写相应的通用pattern),替换的值

    6、定位相应格式数据的位置:str_locate、str_locate,这个就比较方便,可以定位到你想要知道的数据具体位置进而去做处理

    7、检查匹配字符串的字符函数:str_detect,这个函数会判断相应pattern的字符,它并不是判断两个值是否相等,而是去具体的值中搜索是否存在相应模式的值,然后返回TRUE/FALSE

    8、从字符串中提取匹配组:str_match、str_match_all,这个函数就与前面的str_replace不同,它是匹配你想要的pattern值返回给你,str_replace是清除。其实从字符串中提取匹配字符函数str_extract与它有点类似

     

     

    不写了不写了,下次继续,这里面的函数基本都可以使用正则表达式去处理疑难数据,至于语法了,就不介绍了,后面专门写一篇语法。

     

    欢迎下次来看哈!小编等你

    :

    展开全文
  • 商业智能BI、大数据分析挖掘、机器学习,python,R数据领域感兴趣同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交...
        

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

    对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿

    作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。

    邮箱:huang.tian-yuan@qq.com

    前文推送:

    R语言自然语言处理:中文分词

    R语言自然语言处理:词性标注与命名实体识别

    R语言自然语言处理:关键词提取(TF-IDF)

    R语言自然语言处理:关键词提取与文本摘要(TextRank)

    R语言自然语言处理:文本向量化——词嵌入(Word Embedding)

    R语言自然语言处理:情感分析

    不知不觉已经写了这么多,但是很多R语言自然语言处理的方法并没有展开来讲。这次希望尝试用简单的技术(TF-IDF和相似度矩阵)做一次实践,即文档分类。

    任务定义:对于任意给定的一个字符串,判断它与目前哪个文档最为相似,从而进行归类。首先要对当前的文档(数据见github.com/hope-data-sc)做词嵌入(就用最简单的TF-IDF模型),然后对于任意的新字符串,进行向量化之后,与先前的标准库做相似性的分析,看看与哪个文档相似性最近,就属于哪一个类别。

    1 读入文件

    1 library(pacman)

    2 p_load(tidyverse,data.table)

    4 fread("classification_corpus_raw.csv",encoding ="UTF-8") %>%

    5 as_tibble() %>%

    6 mutate(id=1:n())-> raw

    这样,文件就在raw中了。

    2 计算TF-IDF

    这一部分参考R语言自然语言处理:关键词提取(TF-IDF),先进行分词,然后对所有的词计算TF-IDF。

    1 ## 快速分词

    2 p_load(jiebaR)

    3 worker() -> wk

    5 raw %>%

    6 mutate(words = map(title,segment,jieba = wk)) %>%

    7 select(id,words) -> corpus

    9 ## 计算TF-IDF

    10 corpus %>%

    11 unnest() %>%

    12 count(id,words) %>%

    13 bind_tf_idf(term = words,document =id,n = n) -> corpus_tf_idf

    仔细看,这个文档现在究竟有多少个词语呢?

    1 corpus_tf_idf%>% distinct(words)

    2

    3 # A tibble: 1,510 x 1

    4 words

    5 <chr>

    6 1百年

    7 2办公室

    8 3筹备工作

    9 4校庆

    10 5保卫部

    11 6处

    12 7安全

    13 8管理

    14 9生产

    15 10保密

    16 # ... with 1,500 more rows

    一共1510个,不多,因此我决定不进行筛选了。本来常规套路要把这个TF-IDF的矩阵变为一个文档-词语矩阵(Document Term Matrix,DTM)。但是既然走了tidy的路线,我突然认为那是一个多余的步骤,做了一个高维稀疏的矩阵效率异常低,而进行连接(join)的速度可谓异常地快。

    下面我要写一个函数,它要完成一个这样的任务:对于任意给定的字符串,求这个字符串与当前所有文档的相似性,然后筛选出相似性最高的n个文档,显示出来。

    虽然不需要构造矩阵,但是我还是要构造一个类似的数据框。

    1 corpus_tf_idf%>%

    2 select(id,tf_idf) -> for_future_use

    3 举例尝试

    先假设给定的字符串为“大数据学院”,我们看看是否能够找到合理的相似文档。我们首先要明确,什么叫做相似?定义:1、字符串中包含相同的组分(相同的分词结果);2、当包含组分数量一致的时候,如果包含重要表征组分,其得分更高(举例说明:我们给定的字符串是“物理学院”,分词之后是“物理”和“学院”,但是“物理”这个词能够表征的程度更高,因此它会得到更高的得分,这个得分在我们的模型中是以TF-IDF的形式存在的)。

    下面我们给出代码:

    1 string="大数据学院"

    3 string%>%

    4 segment(jiebar = wk) %>%

    5 enframe() %>%

    6 transmute(words =value) -> string_table

    8 for_future_use %>%

    9 inner_join(string_table) %>%

    10 group_by(id) %>%

    11 summarise(score = sum(tf_idf)) %>%

    12 arrange(desc(score)) -> sort_table

    13 

    14 sort_table %>%

    15 slice(1:5) %>%

    16 inner_join(raw,by="id")

    17

    18 # A tibble: 5 x 3

    19 id score title

    20   

    21 1584.70大数据学院

    22 2572.86大数据研究院

    23 31091.84高级律师学院

    24 44361.84公共卫生学院

    25 54791.84管理学院

    我们可以看到,“大数据学院”被正确地筛选出来,而排名第二的是“大数据研究院”,因为“大数据”作为一个比“学院”拥有更高TF-IDF的关键词,更能够表征“大数据”这个特征。其他3个选项得分其实是一样的,它们都因为有“学院”而被筛选出来,但是没有匹配更多更有价值的词语了。现在我们就可以正式对函数进行构造:

    1 get_sim = function(string){

    2 string%>%

    3 segment(jiebar = wk) %>%

    4 enframe() %>%

    5 transmute(words =value) -> string_table

    7 for_future_use %>%

    8 inner_join(string_table,by="words") %>%

    9 group_by(id) %>%

    10 summarise(score = sum(tf_idf)) %>%

    11 arrange(desc(score)) -> sort_table

    12

    13 sort_table %>%

    14 slice(1:3) %>%

    15 inner_join(raw,by="id") ->result

    16 

    17 ifelse(nrow(result)==0,

    18 NA,

    19 result %>%

    20 pull(title) %>%

    21 str_c(collapse =","))

    22 }

    这个函数能够对任意的字符串进行识别,如果没有任何识别,就返回NA;如果识别到了,最多返回匹配度最高的3个分类,分类之间以“,”分隔(注意是英文的逗号,这个可以根据自己的洗好更改)。我们用两个例子看看结果如何:

    1 get_sim("稀奇古怪")

    2 [1]NA

    4 get_sim("大数据")

    5 [1]"大数据研究院,大数据学院,大数据试验场研究院(筹)"

    显然,这个函数是有效的。

    ——————————————

    往期精彩:

    今天,我改名了!

    不敢穷,不敢病,不敢死……我们是独生子女

    qkerntool使用说明

    R语言中文社区2018年终文章整理(作者篇)

    R语言中文社区2018年终文章整理(类型篇)

    展开全文
  • 正则表达其实就是对文本进行模式匹配,所有语言正则表达式都有一些共同特征。我们使用help(regex)命令查看R正则表达帮助内容。 在我看来,正则表达式主要用途有两种: ①查找特定信息 ②查找并编辑特定...
  • 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域...商业智能BI、大数据分析挖掘、机器学习,python,R数据领域感兴趣同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据...
  • 笔者寄语:情感分析中对文本处理数据的小技巧要求比较高,笔者在学习时候会为一些小技巧感到头疼不已。
  • 中国通信工业协会通信和信息技术创新人才培养工程项目办公室通人办〔2017〕 第45号“R语言机器学习与大数据可视化”暨“Python文本挖掘与自然语言处理”核心技术高级研修班通知各有关单位:为了响应国家大数据战略...
  • 同时自己也是这方面进行一些学习,使用啦R语言进行一批普通文本到CSV格式到转换,普通文本是属于设备自行记录收集到数据文本,区别与一般到CSV文件,多出了3行数据记录log,同时,表头(columes row)相对于下面...
  • 中国通信工业协会通信和信息技术创新人才培养工程项目办公室通人办〔2017〕 第45号“R语言机器学习与大数据可视化”暨“Python文本挖掘与自然语言处理”核心技术高级研修班通知各有关单位:为了响应国家大数据战略...
  • R语言】字符串处理

    万次阅读 多人点赞 2016-07-24 20:35:28
    在挖掘分析的过程当中字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台,虽然文本的处理并不是它的强项, 但是R语言还是包含了些较为常用的字符串处理函数,本文将...
  • 基于Python自然语言数据处理系统设计与实现 打开文本图片集 摘要 随着云时代来临大数据技术将具有越来越重要战略意义很多组织通常都会用一种领域特定计算语言像PythonR和传统mATLAB将其用于想法...
  • R语言字符串处理总结

    千次阅读 2017-08-08 20:11:28
    在挖掘分析的过程当中字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台,虽然文本的处理并不是它的强项, 但是R语言还是包含大量的字符串操作工具,本章着重整理了...
  • #日期数据的处理------------------------------------------------------------- post_date (combined_info, function(v) return(v[3]))%>%str_sub(9,24)%>%as.POSIXlt()##get the date post_year $year+1900 ...
  • 商业智能BI、大数据分析挖掘、机器学习,python,R数据领域感兴趣同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交...
  • R语言】问题处理

    千次阅读 2017-08-04 11:06:28
    记录一下我在使用R时,所遇到问题和最终解决方案,希望遇到此类问题人有所帮助。 1.中文读取乱码问题 2.rJava包安装 3.批量读取整个文件夹中的文本 4.删除数据框中重复行
  • coRPysprofiling是一个开放源代码库,旨在将探索性数据分析和可视化引入自然语言处理领域。 软件包中函数将用于为单个文本语料库提供一些基本统计信息和可视化效果,或者提供将多个语料库彼此进行比较功能。 ...
  • 关于Revolution R在大量数据的聚类中的应用提供了一个小案例。, 第9章:预测和时间序列模型。企业使用商业智能来了解其经营的过去和现在,他们的重点是改进未来的决策。时间序列和预测很强大,但在很多企业都未能...
  • 无论是RRCurl组件还是PythonBeautifulSoup库,网页HTML完成下载解析之后我们从这些看似杂乱无章的文本中拿到我们感兴趣的数据。之前在系列2...
  • 您是否曾经遇到过文本数据,并且怀疑其中是否包含有用洞察力,但如何找到该洞察力感到沮丧? 您是否熟悉dplyr和ggplot2,并准备学习如何在tidyverse生态系统中分析非结构化文本数据? 您是否需要一个灵活框架...
  • R语言学习五

    2017-01-06 20:13:31
    数据处理 处理函数: 统计函数: 数据的标准化: 函数scale()对矩阵或者数据框的... 字符处理函数:使用字符处理函数可以对文本型的数据进行处理,包括信息的抽取和格式转化 基本图形 简单条形图:
  • #R语言# CSV文件导入和查看

    千次阅读 2020-05-22 15:28:34
    在保存过程中也不会对数据进行处理。 所以相比于Excel文件,处理的更快也更容易。 到目前为止,我处理的大多数都是.csv 文件,并没有遇到因为格式问题而带来不变。(遇到了会继续补充) 一. CSV文件导入 ...
  • 2016年11月,Jeroen Ooms在CRAN发布了tesseract包,实现了R语言对简单图片的文本提取、分析功能。 利用开源OCR引擎进行图片处理,目前可以识别超过100种语言,R语言可以借助tesseract调用OCR引擎进行相应操作。 ...
  • 文本挖掘,也称为文本数据挖掘,意思就如字面,对文本数据进行挖掘分析。文本挖掘一般包含:文本分类、文本聚类、概念实体挖掘、自然语言处理等等。接下来,我打算用一个简单例子,介绍一下R语言文本挖掘一般...
  • 数据分析领域,最热门...这次拿到近亿条日志数据,千万级数据已经是关系型数据库查询分析瓶颈,之前使用过Hadoop大量文本进行分类,这次决定采用Python来处理数据:硬件环境CPU:3.5 GHz Intel Core i7内存:3...
  • 这次拿到近亿条日志数据,千万级数据已经是关系型数据库查询分析瓶颈,之前使用过Hadoop大量文本进行分类,这次决定采用Python来处理数据: 硬件环境 CPU:3.5 GHz Intel Core i7 内存:32 GB HDDR 3 1600 MHz...
  • NLP(自然语言处理) ...文本数据的 建立文本分类模型..可以是任何等价的经验问题 1-4周 参考 BERT,ELMo和GPT2上下文化词表示法的上下文如何? -来自斯坦福大学AI实验室 插图BERT,ELMo和其他NLP以及转移学习环境

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 257
精华内容 102
关键字:

r语言对文本数据的处理