首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R函数查找文件中单词出现的次数

使用R函数查找文件中单词出现的次数
EN

Stack Overflow用户
提问于 2014-02-05 02:50:18
回答 2查看 1.4K关注 0票数 5

我使用下面的代码来查找文件中出现的单词memory的次数,并且得到了错误的结果。你能帮我知道我错过了什么吗?

NOTE1:问题是寻找“记忆”这个词的准确出现!NOTE2:我意识到他们确实在寻找“记忆”,甚至像“记忆”这样的东西也不被接受!我想,这就是引起混乱的部分。我试着用“动作”这个词,正确的答案是7!你也可以试试。

代码语言:javascript
复制
#names=scan("hamlet.txt", what=character())
names <- scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=character())
Read 28230 items
> length(grep("memory",names))
[1] 9

这是文件

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-05 03:18:35

正如@andrew所指出的,如果一个单词在同一行重复,我先前的回答会给出错误的结果。根据其他答复/评论,这一条似乎可以:

代码语言:javascript
复制
names = scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=character(), quote=NULL )
idxs = grep("memory", names, ignore.case = TRUE)

length(idxs)
# [1] 10
票数 3
EN

Stack Overflow用户

发布于 2014-02-05 03:22:19

问题是莎士比亚对标点符号的使用。课文中有很多撇号。当R函数scan遇到一个撇号时,它假设它是一个引号字符串的开始,并将所有字符读入到下一个撇号到names数组的单个条目中。这些长条目中的一个碰巧包含两个单词"memory“的实例,因此将匹配的总数减少了一个。

您可以通过告诉scan将所有引号视为普通字符,而不对它们进行特殊处理来解决此问题:

代码语言:javascript
复制
names <- scan('http://pastebin.com/raw.php?i=kC9aRvfB', what=character(), quote=NULL )

在使用grep的R实现时要小心。它的行为方式与通常的GNU/Linux程序不同。特别是,您在这里使用它的方式将找到匹配词的数量,而不仅仅是一些人建议的匹配行的总数。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21567718

复制
相关文章

相似问题

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