楼主: a454093113
6204 10

[问答] tm包创建中文的文本词条矩阵乱码。 [推广有奖]

  • 0关注
  • 0粉丝

大专生

68%

还不是VIP/贵宾

-

威望
0
论坛币
60 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1326 点
帖子
40
精华
0
在线时间
32 小时
注册时间
2016-9-27
最后登录
2019-2-20

3论坛币
> library(tm)
载入需要的程辑包:NLP
> sms_corpus <- Corpus(VectorSource(segWord))
> sms_dtm <- DocumentTermMatrix(x = sms_corpus)
> str(sms_dtm)
List of 6
$ i       : int [1:65439] 1 2 3 4 5 6 7 8 9 10 ...
$ j       : int [1:65439] 1 2 3 3 1 2 4 5 6 4 ...
$ v       : num [1:65439] 1 1 1 1 1 1 1 1 1 1 ...
$ nrow    : int 65439
$ ncol    : int 15611
$ dimnames:List of 2
  ..$ Docs : chr [1:65439] "1" "2" "3" "4" ...
  ..$ Terms: chr [1:15611] "楂樺喎" "濡撳コ" "璺熶笂" "杞彂" ...
- attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
- attr(*, "weighting")= chr [1:2] "term frequency" "tf"
已经用jiebaR分完词了想创建一个文本词条矩阵。结果输出为乱码。求助各位大神

最佳答案

niu9146 查看完整内容

这个不是jieba分词的原因,是tm包 DocumentTermMatrix()这个命令以后产生了乱码。 解决的办法有几个 1、修改 locale 为英文, 在执行TermDocumentMatrix前,调用Sys.setlocale(locale="English"),之后再设定回去,Sys.setlocale(locale="Chinese (Simplified)_People's Republic of China.936"),local设置通过函数sessionInfo()获得。 2、修改 tm 包的 tokenizer.R 里的 scan_tokenizer 函数 ,然后安装修改后的 tm 包。 ...
关键词:Frequency weighting Document Library matrix library 中文
沙发
niu9146 发表于 2017-4-14 23:56:46 |只看作者 |坛友微信交流群
这个不是jieba分词的原因,是tm包 DocumentTermMatrix()这个命令以后产生了乱码。
解决的办法有几个

1、修改 locale 为英文,
在执行TermDocumentMatrix前,调用Sys.setlocale(locale="English"),之后再设定回去,Sys.setlocale(locale="Chinese (Simplified)_People's Republic of China.936"),local设置通过函数sessionInfo()获得。

2、修改 tm 包的 tokenizer.R 里的 scan_tokenizer 函数 ,然后安装修改后的 tm 包。

原函数:
scan_tokenizer <- NLP::Token_Tokenizer(function(x)
    scan(text = as.character(x), what = "character", quote = "", quiet = TRUE))

改为
scan_tokenizer <- NLP::Token_Tokenizer(function(x){
  con <- textConnection(as.character(x))
  tokens <- scan(con, what = "character", quote = "", quiet = TRUE)
  close(con)
  tokens
})
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

使用道具

藤椅
a454093113 发表于 2017-4-17 00:39:16 |只看作者 |坛友微信交流群
谢谢你

使用道具

板凳
哀其不幸 发表于 2017-5-9 23:01:32 来自手机 |只看作者 |坛友微信交流群
a454093113 发表于 2017-4-17 00:39
谢谢你
请问 第二种改函数的方法 最新的tm包找不到tokenizer.R 我下载旧版本tm0.6-1 md5验证成功 但是library()时显示无效这该怎么办

使用道具

报纸
哀其不幸 发表于 2017-5-9 23:08:46 来自手机 |只看作者 |坛友微信交流群
niu9146 发表于 2017-4-14 23:56
这个不是jieba分词的原因,是tm包 DocumentTermMatrix()这个命令以后产生了乱码。
解决的办法有几个

请问 我最近也出现这个问题 我现在用的是最新的tm包 里面我没找到tokenizer.R 我又在官网下载了旧版本tm0.6-1 安装显示成功 但library()时显示无效的包我该怎么办  现在很急

使用道具

地板
qiaosangcc 发表于 2017-7-28 21:19:53 |只看作者 |坛友微信交流群
用第一种方法试过,虽然不是乱码,但是依然不是文字啊

使用道具

7
qiaosangcc 发表于 2017-7-28 21:22:40 |只看作者 |坛友微信交流群
所以,楼主解决了吗

使用道具

8
a454093113 发表于 2017-8-23 21:06:10 |只看作者 |坛友微信交流群
qiaosangcc 发表于 2017-7-28 21:22
所以,楼主解决了吗
sms_dtm<-DocumentTermMatrix(x =sms_corpus, control = list(wordLengths = c(2,Inf)))
sms_dtm <- DocumentTermMatrix(x = sms_corpus)
Sys.setlocale(category = "LC_ALL", locale = "us")#解决报错

使用道具

9
bk3333 发表于 2018-2-6 09:58:45 |只看作者 |坛友微信交流群
将R和Rstudio升级到最新版本,完美解决问题

使用道具

10
森之竭力 发表于 2018-4-14 10:05:45 |只看作者 |坛友微信交流群
请问下这个乱码问题最后解决了吗,怎么解决的,究竟是什么原因额,快被烦死了。。。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 00:14