楼主: ron2000
4236 9

[问答] 请R语言大侠帮忙指点scan为什么结果不对 [推广有奖]

  • 0关注
  • 0粉丝

初中生

0%

还不是VIP/贵宾

-

威望
0
论坛币
9 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
153 点
帖子
10
精华
0
在线时间
12 小时
注册时间
2007-1-26
最后登录
2021-2-2

楼主
ron2000 发表于 2015-7-26 16:31:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
本人有一个文本文件"D:/test.segment.txt",内容是汉语的,词之间是空格分开,如:
金 书签 中国 阅读 小达人 评选活动

我用scan读取文件
> data = scan("D:/test.segment.txt", "character", sep = " ",encoding="UTF-8")Read 5 items> data[1] "金"                   "书签"                "中国"                "阅读"                "小达人 评选活动\xff"

为什么有的词读入时没有分开,比如"小达人 评选活动\xff"?测试发现英语空格识别就没有问题。

请高手帮忙指点一下,实在搞不明白了,谢谢!!!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:scan R语言 Character segment Coding character 中文字幕 文本文件 中国

沙发
万人往LVR 在职认证  发表于 2015-7-26 18:06:33
测试没问题

藤椅
ron2000 发表于 2015-7-27 07:16:03
万人往LVR 发表于 2015-7-26 18:06
测试没问题
2015-07-27_071350.png
非常感谢万人往LVR您的回复,为什么我的RStudio里结果就不对呢?是否哪里设置不对?我用的版本是64位R-3.1.2?

板凳
万人往LVR 在职认证  发表于 2015-7-27 09:29:38
不清楚
可以尝试这几项:

把小达人后面空格重写一下

sep=" "换成sep=""

regexpr(" ","小达人 评选活动\xff") 看结果是什么

报纸
ron2000 发表于 2015-7-27 10:45:08
万人往LVR 发表于 2015-7-27 09:29
不清楚
可以尝试这几项:
再次感谢您的回复,我测试了一下,sep=""和sep=" ",结果是一样的。
另外,用regexpr也发现空格在第4个位置。
真不知道问题出在什么地方了,我附上我用测试用txt文件,麻烦您有空用我的附件测试一下。非常感谢!!!
2015-07-27.png

test.segment.txt (50 Bytes)

地板
ron2000 发表于 2015-7-27 11:09:17
万人往LVR 发表于 2015-7-27 09:29
不清楚
可以尝试这几项:
在您的启发下,我测试了一下我的文件,发现我原来的txt文件是UTF-8格式,我另存为ASNI格式,用同样的语句:
data = scan("D:/test5.txt", "character", sep = " ",encoding="UTF-8")
发现结果分对了,但是RStudio里看是乱码。于是我将语句改为:
data = scan("D:/test5.txt", "character", sep = " ",encoding="ANSI")
这回结果对了。

现在没弄怎么明白问题出在什么地方,不是汉语用
UTF-8格式吗,为什么用了,按空格分,反而分的不对?

2015-07-27_2.png


7
万人往LVR 在职认证  发表于 2015-7-27 11:20:21
不知道问题出在哪
给出一个解决方案:搜索文档中的多个汉字相连的情形,并分别提取

  1. data1 <- readLines("D:/test.segment.txt",encoding="UTF-8")
  2. data1 <- paste(data1,collapse=" ") ##如果文档是多行,把多行连成一行
  3. record1 <- gregexpr("[\u4e00-\u9fa5]+",data1)[[1]] ##提取汉字组成的词,如果词中有字母数字,[\u4e00-\u9fa5]+改成[^ ]+
  4. f <- function(x){return(substr(data1,x[1],x[1]+x[2]-1))}
  5. data2 <- apply(cbind(record1,attr(record1,"match.length")),1,f)
复制代码

8
ron2000 发表于 2015-7-27 11:22:32
进一步测试发现,txt文件(原先是UTF-8格式)必须另存为ANSI格式,如果是UTF-8格式,目前还没有找到好办法,能准确的按空格分。
存为ANSI格式后,可以用:
data = scan("D:/test5.txt", "character", sep = " ",encoding="ANSI")
或者
data = scan("D:/test5.txt", "character", sep = " ")
得到准确的划分结果。

不知道为什么UTF-8文件就不行?另外,我有很多UTF-8文件,一个一个另存为,真是太麻烦了,不知道有什么好办法?能否在R里实现记事本另存为?

9
ron2000 发表于 2015-7-27 11:26:43
万人往LVR 发表于 2015-7-27 11:20
不知道问题出在哪
给出一个解决方案:搜索文档中的多个汉字相连的情形,并分别提取
这是真是一个好方法,省得我一个一个文件另存为了。再次谢谢您的帮助!!!

10
柚子炒酸奶 发表于 2018-5-24 19:43:27
我也遇到这个问题了,搜了半天,然后发现scan还有一个参数是fileEncoding,如果原文件是UTF-8,不设encoding,直接fileEncoding=“UTF-8”就可以得出正确结果了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 04:17