美文网首页机器学习
自然语言处理-R

自然语言处理-R

作者: 灵妍 | 来源:发表于2018-04-22 11:49 被阅读5次

    楔子:
    tm程序包就算在本地安装上了,也会无法载入,我们可以通过手动打勾的方式检测是不是需要安装其它的辅助包,联网安装则不需要考虑这些问题

    tsv.PNG
    自然语言处理是指我们分析的对象是文本,可以是中文、日文、英文等等。这里我们要分析评论是好还是坏,也就是通过输入一条评论,计算机可以识别评论的性质。
    对于自然语言处理,常用的CSV数据格式是不适用的,因为是逗号分隔符,逗号很容易被误认为是文本信息本身,所以我们使用tsv格式,也就是将逗号变为tab制表符,也就是多个空格分割文本数据。
    1、读取数据

    代码:

    # Natural Language Processing
    
    # Importing the dataset
    dataset_original = read.delim('Restaurant_Reviews.tsv', quote = '', stringsAsFactors = FALSE)
    

    这里delim是指读取tsv文件,参数quote为空代表在文本中的引号将不会被读取。stringAsFactors为错误代表文本不会被看成分类因子,由于我们要处理的是字符与字符之间的关系,不能将评论本身视为某一类。

    2、创建词袋
    copus.PNG

    代码:

    # Cleaning the texts
    # install.packages('tm')
    # install.packages('SnowballC')
    library(NLP)
    library(tm)
    library(SnowballC)
    corpus = VCorpus(VectorSource(dataset_original$Review))
    

    所谓的corpus词袋就是指文集,由一篇一篇的文章组成,这里一条评论构成一篇文章。

    3、去掉噪声数据(清理数据)

    代码:

    corpus = tm_map(corpus, content_transformer(tolower))
    corpus = tm_map(corpus, removeNumbers)
    corpus = tm_map(corpus, removePunctuation)
    corpus = tm_map(corpus, removeWords, stopwords())
    corpus = tm_map(corpus, stemDocument)
    corpus = tm_map(corpus, stripWhitespace)
    

    这里包括大小写转换,去掉数字,去掉标点符号,去掉虚词(指示代词,this,that),词根化(转化成一般现在时,一些语言的动词有多种词态,名词有单复数形式,还有形容词的一般形式等等),之前去除数字、标点符号、虚词会使单词间留下多余的间隔,这里要重新使单词间的间隔为一个空格。
    虚词实词
    这里特别介绍一下tm包,是文本挖掘包,可以对文字信息做很多处理

    大小写验证.PNG
    取去除数字验证.PNG
    去除标点符号验证.PNG
    取出虚词验证.PNG
    这里要特别说明一下虚词是不具有实际意义,只是构成语法的词,也以是指示代词,少量的名词,量词等等。我们的stopwords函数是来自于SnowBallc包的函数,表示不同语言的虚词,默认是英语。
    词根化验证.PNG
    去除多余空格验证.PNG
    4、建立稀疏矩阵
    dtm.PNG

    代码:

    # Creating the Bag of Words model
    dtm = DocumentTermMatrix(corpus)
    dtm = removeSparseTerms(dtm, 0.999)
    

    这里的稀疏矩阵是以每一条评论为行,以每一个不同的单词为列记录一条评论中这个单词是否出现过,也可能是出现了几次。
    由于矩阵的列数比较大,我们规定了最大稀疏程度,这里有1000条评论,我们去除了稀疏程度大于99.9%的,也就是只在一条评论中出现过的单词。

    5、分类模型

    适用于文本分类的分类算法有朴素贝叶斯,决策树,随机森林等等,这里我们使用随机森林算法。
    代码:

    dataset = as.data.frame(as.matrix(dtm))
    dataset$Liked = dataset_original$Liked
    
    # Encoding the target feature as factor
    dataset$Liked = factor(dataset$Liked, levels = c(0, 1))
    
    # Splitting the dataset into the Training set and Test set
    # install.packages('caTools')
    library(caTools)
    set.seed(123)
    split = sample.split(dataset$Liked, SplitRatio = 0.8)
    training_set = subset(dataset, split == TRUE)
    test_set = subset(dataset, split == FALSE)
    
    # Fitting Random Forest Classification to the Training set
    # install.packages('randomForest')
    library(randomForest)
    classifier = randomForest(x = training_set[-692],
                              y = training_set$Liked,
                              ntree = 10)
    
    # Predicting the Test set results
    y_pred = predict(classifier, newdata = test_set[-692])
    
    # Making the Confusion Matrix
    cm = table(test_set[, 692], y_pred)
    

    由于上文得到的是稀疏矩阵,分类算法处理的是数据文件,前两行代码我们把稀疏矩阵转换成数据文件,并且添加了分类结果列。
    然后3行和4行我们对于分类结果进行因子化,这样才便于分类。
    由于数据集样本比较小,我们将训练集和测试集的比例划分为4:1。
    注意:如果没有对分类结果进行因子化,我们得到的可能是回归树。
    运行结果:


    cm.PNG

    相关文章

      网友评论

        本文标题:自然语言处理-R

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