R语言文本数据挖掘(一)

2023-05-19,,

文本挖掘可以视为NLP(Natural language processing,自然语言处理)的一个子领域,目标是在大量非结构化文本中整理析取出有价值的内容。由于人类语言具有很高的复杂性,例如不同语言间语法不同,组成方式不同,还有语言种类的多样性,使得NLP是目前机器学习领域最困难的技术之一,里面的难点大部分成为各个应用领域(搜索引擎,情感识别,机器写作等等)的核心障碍,是实现高度智能机器人的关键技术。NLP大部分方法适用于不同的语种,也有部分只适合特定语种。

一、文本挖掘简介

1. 什么是文本挖掘

文本挖掘是抽取有效、新颖、有用、可理解的、散布在文本文件中的有价值知识,并且利用这些知识更好地组织信息的过程。

在文本挖掘领域中,文本自动分类,判同,情感分析是文本挖掘比较常见的应用 。文本分类技术主要应用在百度新闻,谷歌新闻等新闻网站,对新闻内容进行自动分类,并且实现根据用户专业倾向的文档推荐;搜索引擎去重,论文抄袭判别系统等。情感分析技术主要应用在电商评论分析系统,政府和媒体舆情监测系统等。语意理解技术应用在机器翻译、聊天机器人等。

2. NLP

NLP通常包含两方面内容:词法、语法。词法的经典问题为分词、拼写检查、语音识别等;语法的经典问题有词类识别、词义消歧、结构分析等;语音识别领域经典问题有语言识别、语音指令、电话监听、语音生成等。

二、R文本挖掘包tm

tm包是R语言中为文本挖掘提供综合性处理的package,进行操作前载入tm包,vignette命令可以让你得到相关的文档说明。使用默认安装的R平台是不带tm package的,在安装的过程中,它会依赖于'NLP','BH','slam'包,最简单的方式就是采用在线安装。 在tm中主要的管理文件的结构被称为语料库(Corpus),代表了一系列的文档集合。

1. tm包-建立语料库

install.packages("tm")
library(tm)
#Corpus(x,readerControl)
#x-语料库的数据源,可以使用目录数据源-DirSource;或者向量数据源-VectorSource;或者数据框数据源-DataframeSource(注意数据框3列结构:"doc_id", "text", "names")
#readerControl-语料库的读取控制器,是一个list;参数reader-文本为reader,pdf为readPDF等,参数language为文本语言,默认为“en”。**readerControl**\=list(reader=,language=),ReadControl中有ReadDOC,readPDF,readPlain,readReut21578XML等不同的读入方式,可以使用**getReaders()**函数显示出所用的可能的方式。
1.1 语料库-建立数据处理结构
#利用DirSource
ovid1<-Corpus(DirSource("d:/Program Files/R/R-3.3.3/library/tm/texts/txt"), readerControl = list(language = "lat"))
inspect(ovid1)
#inspect可输出语料库的内容
#利用VectorSource
docs <- c("This is a text.", "This another one.")
ovid2 <- Corpus(VectorSource(docs))
inspect(ovid2)
#利用DataframeSource
data <- read.csv("D:/data/Finance Report 2012.csv")
ovid3 <- Corpus(DataframeSource(data),readerControl=list(language="zh"))
inspect(ovid3)
1.2 数据保存

将生成的语料库在磁盘上保存成多个纯文本文件

#将语料库数据写入当前路径
writeCorpus(corpus1,"E:\\R\\",c("a1.txt","a2.txt"))

1.3 语料库-读入语料库(数据读取)

语料库处理函数:

tm_map(x,FUN)
  x-上面的语料库 FUN-使用哪个处理函数如下:
  tolower-转成小写
  removeWords-移除分词,一般用语移除停用词
  stripWh[**it**](https://www.songbingjia.com)espace-移除空白字符
  PlainTextDocument-处理HTML或者XML文档
  segmengCN-中文分词函数,来自Rwordseg包
#将reuters转换为纯文本,去除标签
reuters=tm_map(reuters,PlainTextDocument)
# 所有字母转换成小写
corpus_clean <- tm_map(reuters, tolower)
# 去除text中的数字
corpus_clean <- tm_map(reuters, removeNumbers)
# 去除停用词,例如and,or,until...
corpus_clean <- tm_map(reuters, removeWords, stopwords())
# 去除标点符号
corpus_clean <- tm_map(reuters, removePunctuation)
# 去除多余的空格,使单词之间只保留一个空格
corpus_clean <- tm_map(reuters, stripWhitespace)

2. tmcn包-停用词包

install.packages("tmcn")
library(tmcn)
#stopwordsCN()

   

3. Rwordseg包

install.packages("rJava")
install.packages("Rwordseg")
library(Rwordseg)
分词方法:
      segmentCN(strwords,outfile="",returnType=c("vector","tm"))
        strwords-需要分词的字符串或者文件路径
        outfile-分词后输出的路径,默认为输入文件的同级目录
        returnType-返回值类型,默认是数组,可以选择为tm包的语料库类型
3.1 安装/卸载字典

选择分词词典对于后续的分析极为重要,词典库是之后分词的匹配库,这个词库越强大,分词的效果就越好。网上大多使用的是搜狗分词包。

#安装字典
      installDict(dictpath,dictname)
      uninstallDict(dictname)
      dictpath-字典文件路径
      dictname-字典名字
      字典下载:http://pinyin.sogou.com/dict/
#显示字典
      listDict()
3.2 字典出处
(1)从搜狗词库下载分词词典
##用搜狗词库的时候 一定要在官网上下载 ~.scel 文件,
##搜狗下载官网:http://pinyin.sogou.com/dict/cate/index/101
#不能直接将下载的 ~.txt改为~.scel
installDict("F:/R/文本挖掘分词词库/自然语言处理及计算语言学相关术语.scel","computer",dicttype = "scel")
(2)查看词典的函数
加载词典函数为installDict,下面有一些简单的介绍,其中的词类名称是自定义的,每个词类名称需要不一样。
#查看词典
#installDict函数介绍
# installDict(dictpath, dictname,dicttype = c("text", "scel"), load = TRUE)
#installDict("工作目录","词类名称",dicttype = c("text", "scel"), load = TRUE)
listDict()
#uninstallDict() 删除安装的词典
uninstallDict()
#listDict() 查看剩余的词典
listDict()

4. TM包和Rwordseg包组合使用

#加载相关包
library(tm)
library(tmcn)
#按目录读入语料库
C000007 <- Corpus(DirSource('SogouC.mini/Sample/C000007'),readerControl = list(language="UTF-8"))
stopwordsCN()
#加载rwordreg包
library(Rwordseg)
C000007 <- tm_map(C000007, stripWhitespace) //先把c000007语料库中的空格移除
C000007 = tm_map(C000007, content_transformer(segmentCN), returnType='tm') //用segmentcn方式进行分词

参考文献

1.(R语言文本挖掘tm包详解)[https://www.jianshu.com/p/948eef869be3]

2.(R语言学习-词频学习)[https://www.136.la/tech/show-598389.html]

3. ( 天戈朱-博客园)[https://www.cnblogs.com/tgzhu/p/6680525.html]

R语言文本数据挖掘(一)的相关教程结束。

《R语言文本数据挖掘(一).doc》

下载本文的Word格式文档,以方便收藏与打印。