R文本挖掘-文章关键词提取

来源:互联网 发布:手机淘宝套餐链接 编辑:程序博客网 时间:2024/06/08 07:23

关键词提取(keywords)

  • 词频(Term Frequency)
  • 逆文档频率(Inverse Document Frequency)
    IDF就是每个词的权重,它的大小与一个词的常见程度成反比。
  • TF-IDF(Term Frequency-Inverse Document Frequency)
    权衡某个分词是否关键词的指标,该值越大,是关键词的可能性就越大。

如何理解呢,举个例子:
有一篇文章,讲述的是马尔科夫模型在中文分词中的应用,假设“马尔科夫模型”
和“中文分词”这两个分词的词频一样,也就是说两个词的TF值一样,那么,
哪个更适合做这篇文章的关键词呢?
显然是“马尔科夫模型”!

用统计学语言表达,就是在词频的基础上,对每个词分配一个权重:
最常用的词(如“的”、“是”、“在”等)给予最小的权重;
最常见的词(如“中文分词”)给予较小的权重;
较少见的词(如“马尔科夫模型”)给予较大的权重。

TF计算公式
TF=该次在文档中出现的次数
IDF=log(文档总数/包含改词的文档数+1)

TF-IDF=TF*IDF

关键词提取的代码实现:

library(tm)library(tmcn)library(Rwordseg)docs <- Corpus(  DirSource(    c(      "SogouC.mini/Sample/C000007", "SogouC.mini/Sample/C000008",      "SogouC.mini/Sample/C000010", "SogouC.mini/Sample/C000013",      "SogouC.mini/Sample/C000014", "SogouC.mini/Sample/C000016",      "SogouC.mini/Sample/C000020", "SogouC.mini/Sample/C000022",      "SogouC.mini/Sample/C000023", "SogouC.mini/Sample/C000024"    )  ),  readerControl = list(    language='UTF-8'  ))#移除空白docs <- tm_map(docs, stripWhitespace)#移除标点docs <- tm_map(docs, removePunctuation)docs <- tm_map(docs, content_transformer(segmentCN), returnType="tm")docs <- tm_map(docs, content_transformer(function(x) iconv(x, from="UTF8", to="GB2312", sub="byte")))tdm <- TermDocumentMatrix(  docs,   control = list(    wordLengths= c(1, 4),    stopwords = stopwordsCN()  ))TF <- as.matrix(tdm)IDF <- apply(TF, 1, function(row) {  return (log2(length(docs)/(sum(ifelse(row>0, 1, 0))+1)))});TF.IDF = TF*IDFkeywords <- apply(TF.IDF, 2, function(col) {  keyword <- col[order(col, decreasing=TRUE)][1:5];  return(names(keyword))})#获取每篇文章关键字所在的位置,#这样子就可以获取对应的TF、IDF以及TF.IDF的值了keywordIndexes <- apply(TF.IDF, 2, function(col) {  index <- order(col, decreasing=TRUE)[1:5];  return(index)})TF[keywordIndexes[, 1], 1]IDF[keywordIndexes[, 1]]TF.IDF[keywordIndexes[, 1], 1]
原创粉丝点击