首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在名字和姓氏向量上使用DocumentTermMatrix

在名字和姓氏向量上使用DocumentTermMatrix
EN

Stack Overflow用户
提问于 2017-04-16 20:17:45
回答 1查看 256关注 0票数 0

我的数据框架(df)中有一列如下:

代码语言:javascript
运行
复制
> people = df$people
> people[1:3]
[1] "Christian Slater, Tara Reid, Stephen Dorff, Frank C. Turner"     
[2] "Ice Cube, Nia Long, Aleisha Allen, Philip Bolden"                
[3] "John Travolta, Uma Thurman, Vince Vaughn, Cedric the Entertainer"

该列具有4k+唯一的首/最后/尼克名,作为每一行上的全名列表,如上面所示。我想为这个列创建一个DocumentTermMatrix,其中找到全名匹配,并且只有最常见的名称被用作列。我尝试了以下代码:

代码语言:javascript
运行
复制
> people_list = strsplit(people, ", ")

> corp = Corpus(VectorSource(people_list))

> dtm = DocumentTermMatrix(corp, people_dict)

其中people_dict是people_list中最常见的人(~150个全名)的列表,如下所示:

代码语言:javascript
运行
复制
> people_dict[1:3]
[[1]]
[1] "Christian Slater"

[[2]]
[1] "Tara Reid"

[[3]]
[1] "Stephen Dorff"

但是,DocumentTermMatrix函数似乎根本没有使用people_dict,因为我的列比people_dict中的列多得多。此外,我认为DocumentTermMatrix函数正在将每个名称字符串拆分为多个字符串。例如,"Danny Devito“成为"Danny”和"Devito“的列。

代码语言:javascript
运行
复制
> inspect(actors_dtm[1:5,1:10])
<<DocumentTermMatrix (documents: 5, terms: 10)>>
Non-/sparse entries: 0/50
Sparsity           : 100%
Maximal term length: 9
Weighting          : term frequency (tf)

    Terms
Docs 'g. 'jojo' 'ole' 'piolin' 'rampage' 'spank' 'stevvi' a.d. a.j. aaliyah
   1   0      0     0        0         0       0        0    0    0       0
   2   0      0     0        0         0       0        0    0    0       0
   3   0      0     0        0         0       0        0    0    0       0
   4   0      0     0        0         0       0        0    0    0       0
   5   0      0     0        0         0       0        0    0    0       0

我已经阅读了我能找到的所有TM文档,并且花了几个小时搜索堆栈溢出以找到解决方案。请帮帮我!

EN

Stack Overflow用户

回答已采纳

发布于 2017-04-16 21:21:39

默认标记器将文本拆分为单个单词。您需要提供一个自定义函数

代码语言:javascript
运行
复制
commasplit_tokenizer <- function(x)
unlist(strsplit(as.character(x), ", "))

注意,在创建语料库之前,不要将参与者分开。

代码语言:javascript
运行
复制
people <- character(3)
people[1] <- "Christian Slater, Tara Reid, Stephen Dorff, Frank C. Turner"     
people[2] <- "Ice Cube, Nia Long, Aleisha Allen, Philip Bolden"                
people[3] <- "John Travolta, Uma Thurman, Vince Vaughn, Cedric the Entertainer"

people_dict <- c("Stephen Dorff", "Nia Long", "Uma Thurman")

控制选项不适用于Coprus,我使用了VCorpus

代码语言:javascript
运行
复制
corp = VCorpus(VectorSource(people))
dtm = DocumentTermMatrix(corp, control = list(tokenize = 
commasplit_tokenizer, dictionary = people_dict, tolower = FALSE))

所有选项都在控制范围内传递,包括:

  1. 符号化-函数
  2. 字典
  3. 收费人=虚假

结果:

代码语言:javascript
运行
复制
as.matrix(dtm)
Terms
Docs Nia LOng Stephen Dorff Uma Thurman
   1        0             1           0
   2        0             0           0
   3        0             0           1

我希望这能帮到你

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43441713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档