精华内容
下载资源
问答
  • huang.tian-yuan@qq.com前文推送:R语言自然语言处理:中文分词R语言自然语言处理:词性标注与命名实体识别R语言自然语言处理:关键词提取(TF-IDF)R语言自然语言处理:关键词提取与文本摘要(TextRank)R语言自然语言...

    9d568e034413d8447d2784d0cda6f15e.png

    作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深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 读入文件

    1library(pacman)
    2p_load(tidyverse,data.table)
    3
    4fread("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## 快速分词
    2p_load(jiebaR)
    3worker() -> wk
    4
    5raw %>% 
    6  mutate(words = map(title,segment,jieba = wk)) %>% 
    7  select(id,words) -> corpus 
    8
    9## 计算TF-IDF
    10corpus %>% 
    11  unnest() %>% 
    12  count(id,words) %>% 
    13  bind_tf_idf(term = words,document = id,n = n) -> corpus_tf_idf

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

     1corpus_tf_idf %>% distinct(words)
    2
    3# A tibble: 1,510 x 1
    4   words    5       6 1 百年    
    7 2 办公室  
    8 3 筹备工作
    9 4 校庆    
    10 5 保卫部  
    11 6 处      
    12 7 安全    
    13 8 管理    
    14 9 生产    
    1510 保密    
    16# ... with 1,500 more rows

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

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

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

    1corpus_tf_idf %>% 
    2  select(id,tf_idf) -> for_future_use

    3 举例尝试

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

    下面我们给出代码:

     1string = "大数据学院"
    2
    3string %>% 
    4  segment(jiebar = wk) %>% 
    5  enframe() %>% 
    6  transmute(words = value) -> string_table
    7
    8for_future_use %>% 
    9  inner_join(string_table) %>% 
    10  group_by(id) %>% 
    11  summarise(score = sum(tf_idf)) %>% 
    12  arrange(desc(score)) -> sort_table
    13
    14sort_table %>% 
    15  slice(1:5) %>% 
    16  inner_join(raw,by = "id")
    17
    18# A tibble: 5 x 3
    19     id score title       
    20  <int>         
    211    58  4.70 大数据学院  
    222    57  2.86 大数据研究院
    233   109  1.84 高级律师学院
    244   436  1.84 公共卫生学院
    255   479  1.84 管理学院  

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

     1get_sim = function(string){
    2  string %>% 
    3    segment(jiebar = wk) %>% 
    4    enframe() %>% 
    5    transmute(words = value) -> string_table
    6
    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") -> result1617  ifelse(nrow(result== 0,
    18         NA,
    19         result %>% 
    20           pull(title) %>%
    21           str_c(collapse = ","))
    22}

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

    1get_sim("稀奇古怪")
    2[1NA
    3
    4get_sim("大数据")
    5[1"大数据研究院,大数据学院,大数据试验场研究院(筹)"

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

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

    往期精彩:

    • 今天,我改名了!

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

    • qkerntool使用说明

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

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

    68799400e24e34ca69bf4451e9ace29e.png

    展开全文
  • R语言自然语言处理:文本分类

    千次阅读 2019-04-27 11:47:00
    作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。邮箱:huang.tian-yuan...
        

    640?wx_fmt=png

    作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深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 读入文件


    1library(pacman)
    2p_load(tidyverse,data.table)
    3
    4fread("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## 快速分词
    2p_load(jiebaR)
    3worker() -> wk
    4
    5raw %>% 
    6  mutate(words = map(title,segment,jieba = wk)) %>% 
    7  select(id,words) -> corpus 
    8
    9## 计算TF-IDF
    10corpus %>% 
    11  unnest() %>% 
    12  count(id,words) %>% 
    13  bind_tf_idf(term = words,document = id,n = n) -> corpus_tf_idf


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


     1corpus_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 生产    
    1510 保密    
    16# ... with 1,500 more rows

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

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

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

    1corpus_tf_idf %>% 
    2  select(id,tf_idf) -> for_future_use


    3 举例尝试

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

    下面我们给出代码:

     1string = "大数据学院"
    2
    3string %>% 
    4  segment(jiebar = wk) %>% 
    5  enframe() %>% 
    6  transmute(words = value) -> string_table
    7
    8for_future_use %>% 
    9  inner_join(string_table) %>% 
    10  group_by(id) %>% 
    11  summarise(score = sum(tf_idf)) %>% 
    12  arrange(desc(score)) -> sort_table
    13
    14sort_table %>% 
    15  slice(1:5) %>% 
    16  inner_join(raw,by = "id")
    17
    18# A tibble: 5 x 3
    19     id score title       
    20  <int> <dbl> <chr>       
    211    58  4.70 大数据学院  
    222    57  2.86 大数据研究院
    233   109  1.84 高级律师学院
    244   436  1.84 公共卫生学院
    255   479  1.84 管理学院  


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


     1get_sim = function(string){
    2  string %>% 
    3    segment(jiebar = wk) %>% 
    4    enframe() %>% 
    5    transmute(words = value) -> string_table
    6
    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个分类,分类之间以“,”分隔(注意是英文的逗号,这个可以根据自己的洗好更改)。我们用两个例子看看结果如何:


    1get_sim("稀奇古怪")
    2[1NA
    3
    4get_sim("大数据")
    5[1"大数据研究院,大数据学院,大数据试验场研究院(筹)"


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


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

    往期精彩:

    640?wx_fmt=png

    展开全文
  • 作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R/Python),致力于利用数据科学迅速积累行业经验优势和...前文参考:HopeR:R语言自然语言处理:中文分词HopeR:R语言自然语言处理:词性标注与命名实体...

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R/Python),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等。知乎专栏:R语言数据挖掘 邮箱:huang.tian-yuan@qq.com.欢迎合作交流。

    前文参考:

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

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

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

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

    HopeR:R语言自然语言处理:词嵌入(Word Embedding)

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

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

    任务定义:对于任意给定的一个字符串,判断它与目前哪个文档最为相似,从而进行归类。首先要对当前的文档(数据见https://github.com/hope-data-science/chinese_NLP/blob/master/%E7%AE%80%E5%8D%95%E6%96%87%E6%A1%A3%E5%88%86%E7%B1%BB/classification_corpus_raw.csv)做词嵌入(就用最简单的TF-IDF模型),然后对于任意的新字符串,进行向量化之后,与先前的标准库做相似性的分析,看看与哪个文档相似性最近,就属于哪一个类别。

    1 读入文件

    library(pacman)
    p_load(tidyverse,data.table)
    
    fread("classification_corpus_raw.csv",encoding = "UTF-8") %>% 
      as_tibble() %>% 
      mutate(id = 1:n())-> raw

    这样,文件就在raw中了。

    2 计算TF-IDF

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

    ## 快速分词
    p_load(jiebaR)
    worker() -> wk
    
    raw %>% 
      mutate(words = map(title,segment,jieba = wk)) %>% 
      select(id,words) -> corpus 
    
    ## 计算TF-IDF
    corpus %>% 
      unnest() %>% 
      count(id,words) %>% 
      bind_tf_idf(term = words,document = id,n = n) -> corpus_tf_idf

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

    corpus_tf_idf %>% distinct(words)
    
    # A tibble: 1,510 x 1
       words   
       <chr>   
     1 百年    
     2 办公室  
     3 筹备工作
     4 校庆    
     5 保卫部  
     6 处      
     7 安全    
     8 管理    
     9 生产    
    10 保密    
    # ... with 1,500 more rows

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

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

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

    corpus_tf_idf %>% 
      select(id,tf_idf) -> for_future_use

    3 举例尝试

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

    下面我们给出代码:

    string = "大数据学院"
    
    string %>% 
      segment(jiebar = wk) %>% 
      enframe() %>% 
      transmute(words = value) -> string_table
    
    for_future_use %>% 
      inner_join(string_table) %>% 
      group_by(id) %>% 
      summarise(score = sum(tf_idf)) %>% 
      arrange(desc(score)) -> sort_table
    
    sort_table %>% 
      slice(1:5) %>% 
      inner_join(raw,by = "id")
    
    # A tibble: 5 x 3
         id score title       
      <int> <dbl> <chr>       
    1    58  4.70 大数据学院  
    2    57  2.86 大数据研究院
    3   109  1.84 高级律师学院
    4   436  1.84 公共卫生学院
    5   479  1.84 管理学院  

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

    get_sim = function(string){
      string %>% 
        segment(jiebar = wk) %>% 
        enframe() %>% 
        transmute(words = value) -> string_table
      
      for_future_use %>% 
        inner_join(string_table,by = "words") %>% 
        group_by(id) %>% 
        summarise(score = sum(tf_idf)) %>% 
        arrange(desc(score)) -> sort_table
      
      sort_table %>% 
        slice(1:3) %>% 
        inner_join(raw,by = "id") -> result
      
      ifelse(nrow(result) == 0,
             NA,
             result %>% 
               pull(title) %>%
               str_c(collapse = ","))
    }

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

    get_sim("稀奇古怪")
    [1] NA
    
    get_sim("大数据")
    [1] "大数据研究院,大数据学院,大数据试验场研究院(筹)"

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

    展开全文
  • R语言做文本挖掘 Part4文本分类

    千次阅读 2016-01-25 14:58:36
    Part4文本分类 Part3文本聚类里讲到过,分类跟聚类的简单差异。所以要做分类我们需要先整理出一个训练集,也就是已经有明确分类的文本;测试集,可以就用训练集来替代;预测集,就是未分类的文本,是分类...

    原帖地址:http://blog.csdn.net/cl1143015961/article/details/44413631


    Part4文本分类


    Part3文本聚类里讲到过,分类跟聚类的简单差异。所以要做分类我们需要先整理出一个训练集,也就是已经有明确分类的文本;测试集,可以就用训练集来替代;预测集,就是未分类的文本,是分类方法最后的应用实现。

    1.       数据准备

    训练集准备是一个很繁琐的功能,暂时没发现什么省力的办法,根据文本内容去手动整理。这里还是使用的某品牌的官微数据,根据微博内容,我将它微博的主要内容分为了:促销资讯(promotion)、产品推介(product)、公益信息(publicWelfare)、生活鸡汤(life)、时尚资讯(fashionNews)、影视娱乐(showbiz),每个分类有20-50条数据,如下可看到训练集下每个分类的文本数目,训练集分类名为中文也没问题。

    训练集为hlzj.train,后面也会被用作测试集。

    预测集就是Part2里面的hlzj。

    > hlzj.train <-read.csv("hlzj_train.csv",header=T,stringsAsFactors=F)

    > length(hlzj.train)

    [1] 2

    > table(hlzj.train$type)

    fashionNews      life         product

          27            34            38

    promotion    publicWelfare     showbiz

          45            22            36

    > length(hlzj)

    [1] 1639

     

    2.       分词处理

    训练集、测试集、预测集都需要做分词处理后才能进行后续的分类过程。这里不再详细说明,过程类似于Part2中讲到的。训练集做完分词后hlzjTrainTemp,之前对hlzj文件做过分词处理后是hlzjTemp。然后分别将hlzjTrainTemp和hlzjTemp去除停词。

    > library(Rwordseg)

    载入需要的程辑包:rJava

    # Version: 0.2-1

    > hlzjTrainTemp <- gsub("[0-90123456789 < > ~]","",hlzj.train$text)

    > hlzjTrainTemp <-segmentCN(hlzjTrainTemp)

    > hlzjTrainTemp2 <-lapply(hlzjTrainTemp,removeStopWords,stopwords)

    >hlzjTemp2 <-lapply(hlzjTemp,removeStopWords,stopwords)

     

    3.      得到矩阵

    在Part3中讲到了,做聚类时要先将文本转换为矩阵,做分类同样需要这个过程,用到tm软件包。先将训练集和预测集去除停词后的结果合并为hlzjAll,记住前202(1:202)条数据是训练集,后1639(203:1841)条是预测集。获取hlzjAll的语料库,并且得到文档-词条矩阵,将其转换为普通矩阵。

    > hlzjAll <- character(0)

    > hlzjAll[1:202] <- hlzjTrainTemp2

    > hlzjAll[203:1841] <- hlzjTemp2

    > length(hlzjAll)

    [1] 1841

    > corpusAll <-Corpus(VectorSource(hlzjAll))

    > (hlzjAll.dtm <-DocumentTermMatrix(corpusAll,control=list(wordLengths = c(2,Inf))))

    <<DocumentTermMatrix(documents: 1841, terms: 10973)>>

    Non-/sparse entries: 33663/20167630

    Sparsity           : 100%

    Maximal term length: 47

    Weighting          : term frequency (tf)

    > dtmAll_matrix <-as.matrix(hlzjAll.dtm)

     

    4.      分类

    用到knn算法(K近邻算法),这个算法在class软件包里。矩阵的前202行数据是训练集,已经有分类了,后面的1639条数据没有分类,要根据训练集得到分类模型再为其做分类的预测。将分类后的结果和原微博放在一起,用fix()查看,可以看到分类结果,效果还是挺明显的。

    > rownames(dtmAll_matrix)[1:202] <-hlzj.train$type

    > rownames(dtmAll_matrix)[203:1841]<- c("")

    > train <- dtmAll_matrix[1:202,]

    > predict <-dtmAll_matrix[203:1841,]

    > trainClass <-as.factor(rownames(train))

    > library(class)

    > hlzj_knnClassify <-knn(train,predict,trainClass)

    > length(hlzj_knnClassify)

    [1] 1639

    > hlzj_knnClassify[1:10]

     [1] product    product     product     promotion  product     fashionNews life      

     [8] product    product     fashionNews

    Levels: fashionNews life productpromotion publicWelfare showbiz

    > table(hlzj_knnClassify)

    hlzj_knnClassify

    fashionNews    life   product     promotion   publicWelfare   showbiz

        40        869       88        535        28        79

    > hlzj.knnResult <-list(type=hlzj_knnClassify,text=hlzj)

    > hlzj.knnResult <-as.data.frame(hlzj.knnResult)

    > fix(hlzj.knnResult)

    Knn分类算法算是最简单的一种,后面尝试使用神经网络算法(nnet())、支持向量机算法(svm())、随机森林算法(randomForest())时,都出现了电脑内存不够的问题,我的电脑是4G的,看内存监控时能看到最高使用达到3.92G。看样子要换台给力点的电脑了╮(╯▽╰)╭

    在硬件条件能达到时,应该实现分类没有问题。相关的算法可以用:??方法名,的方式来查看其说明文档。

     

    5.       分类效果

    上面没有讲到测试的过程,对上面的例子来说,就是knn前两个参数都用train,因为使用数据集相同,所以得到的结果也是正确率能达到100%。在训练集比较多的情况下,可以将其随机按7:3或者是8:2分配成两部分,前者做训练后者做测试就好。这里就不再细述了。

    在分类效果不理想的情况下,改进分类效果需要丰富训练集,让训练集特征尽量明显,这个在实际问题是一个很繁琐却不能敷衍的过程。


    有什么可以改进的地方欢迎指正,转载请注明来源,谢谢!

    展开全文
  • 上次我们学习了文本分析中重要的一些技术和理论,包括中文的分词和词性的标注... 文本分类基本流程文本分类是用计算机对文本集按照一定的分类体系或标准进行自动分类标记的过程。文本分类的主要环节如下:文本集首先...
  • R语言-文本挖掘 主题模型 文本分类

    千次阅读 2017-04-23 13:41:07
    ####需要先安装几个R包,如果有这些包,可省略安装包的步骤。 #install.packages("Rwordseg") #install.packages("tm"); #install.packages("wordcloud"); #install.packages("topicmodels") 例子中所用数据 ...
  • [R语言]文本分类(2)

    千次阅读 2015-10-29 17:16:12
    上一节,介绍了R语言,和本人做文本分类时运用的几个包,还有个小例子。 这一节就用代码来简单介绍下我做文本分类的过程。我的分类很简单,就是给你一段文字,你将它分类到特定的类别。当然,这是前提是需要大量的...
  • FastText是Facebook开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,不过这个项目其实是有两部分组成的。理论介绍可见博客:NLP︱高级词向量表达(二)——FastText(简述、学习笔记) ...
  • 转自:... ####需要先安装几个R包,如果有这些包,可省略安装包的步骤。 #install.packages("Rwordseg") #install.packages("tm"); #install.packages("wordcloud"); #install.package
  • [R语言]文本分类(1)

    千次阅读 2015-10-29 15:07:33
    因项目需要,结合自身专业知识,故而接触了R语言及一些常用分类器。记录下自己这一个多月的学习历程。R语言与起源于贝尔实验室的s语言类似,R也是一种为统计计算和绘图而生的语言和环境,它是一套开源的数据分析解决...
  • 一般的只含有可观测变量的概率分布模型由于先验概率分布是可以通过可观测的类别标签来求得(对应文本分类问题中每个类别的数据出现的概率),而条件概率分布是可以通过可观测的类别标签以和可观测的样本自变量中特征...
  • 1Perceptron与SVM概念介绍1.1感知机(Perceptron)感知机(perceptron)1957年由Rosenblatt提出,是神经网络与支持向量机的基础†感知机,是二类分类的线性分类模型,其输入为样本的特征向量,输出为样本的类别出为样本...
  • R语言文本挖掘

    2019-02-25 07:57:16
    R 语言环境下的文本挖掘,文本挖掘被描述为 “自动化或半自动化处理文本的过程”,包含了文档聚类、文档分类、自 然语言处理、文体变化分析及网络挖掘等领域内容。 对于文本处理过程首先要拥有分析的语料(text ...
  • library(rJava) library (RODBC) library (tm) #文本分析包 library(kernlab) #支持向量机 library(Rwordseg) #处理中文的分词 然后 excel_file sheet_data sheet_data2 close
  • r语言文本分析

    2017-12-26 22:18:29
    大数据学习,r语言进行文本分析, k-means分类聚合。
  • [R语言]文本分类(3)

    2015-10-29 18:24:18
    在上一节中,已经生成了我所需要的...接下来就可以分类了:直接上代码:library(tm) library(maxent)traindata (NULL) testdata (NULL)#循环测试 for(i in 1:10) { filename (i,'.txt',sep="") text = read.table
  • 文本挖掘流程图:从图中可知,文本挖掘主要包含以下几个步骤:1)读取数据库或本地外部文本文件;2)文本分词;3)构建文档-条目矩阵,即文本的特征提取;4)对矩阵建立统计模型...
  • 一般的只含有可观测变量的概率分布模型由于先验概率分布是可以通过可观测的类别标签来求得(对应文本分类问题中每个类别的数据出现的概率),而条件概率分布是可以通过可观测的类别标签以和可观测的样本自变量中特征...
  • 原文地址:CSDN-R语言做文本挖掘 Part4文本分类 Part4文本分类 Part3文本聚类里讲到过,分类跟聚类的简单差异。所以要做分类我们需要先整理出一个训练集,也就是已经有明确分类的文本;测试集,可以就用...
  • 简单安装几个R软件包,你就直接在自己电脑上打造出一个文本分类器,用进行机器来评估人类写作。本文是一篇极简的上手教程,它想用清晰明了的步骤告诉读者,机器学习不神秘,关键是动手!仅需七步,你也一样能“作诗...
  • R语言文本分析入门

    千次阅读 2018-05-21 08:48:48
    文本挖掘被描述为 “自动化或半自动化处理文本的过程”,包含了文档聚类、文档分类、自然语言处理、文体变化分析及网络挖掘等领域内容。对于文本处理过程首先要拥有分析的语料,比如报告、信函、出版物等。而后根据...
  • R文本分类之RTextTools

    千次阅读 2018-01-17 00:00:00
    作者简介Introduction黄耀鹏:R语言中文社区专栏作者,一名数据科学研究者及科普写作者。个人博客:http://yphuang.github.io/往期回顾R中的正则表达式及字符处理函数总结R字符串处理应用之邮件考勤自动化R爬虫之...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 190
精华内容 76
关键字:

文本分类r语言