首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的高效语言处理

R中的高效语言处理
EN

Stack Overflow用户
提问于 2018-02-23 07:44:50
回答 2查看 49关注 0票数 0

我遇到了以下问题:

我有一组需要标准频率的单词。这份清单统计了350个单词。我还有另一个列表,让我们称之为频率列表,有超过550万个不同的单词和它们相应的标准绝对频率。

现在,我需要这350个单词的频率。我想在R中使用这段代码,但仅加载频率列表就需要我的MacBook大约7分钟。

代码语言:javascript
复制
#Read data
decow <- read.table("decow14ax.freq10.w.tsv", header = TRUE, fill = TRUE)

#Converting wordlist in lower case
decow$token_lowercase <- tolower(as.character(decow$token...)) 

#Read word list
wordlist <- read.csv("wordlist.csv") 

#Set frequency counter to 0
wordlist$norm_frequency = 0  

#Obtaining frequencies for word list from norm database
for (i in 1:nrow(wordlist))                                               
{ 
  for (j in 1:nrow(decow_small)) {
    if (wordlist$word[i]==decow$token_lowercase[j]) {
    wordlist$norm_frequency[i] <- decow_small$f_raw[j]}
  }
}

我注意到这段代码效率不是很高。相反,我希望使用向量,因为我猜这将使我不必实现这个循环350次,从而使我的笔记本电脑在几个小时内都很忙。

提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2018-02-23 08:08:18

代码语言:javascript
复制
library(tm)
library(janeaustenr)
wordlist<-janeaustenr::emma
wordlist<-sample(wordlist,50)
wordlist<-tokenizers::tokenize_words(wordlist)
wordlist<-unlist(wordlist)
wordlist<-removeWords(wordlist,stopwords('english'))
wordlist<-table(wordlist)[-1]
wordlist

这是一个向你展示table()函数提供频率的示例。

库(Tm)将使用removeWords(),而[-1]将从表中删除""计数。

希望这能有所帮助

票数 1
EN

Stack Overflow用户

发布于 2018-02-23 10:43:55

我已经找到了一个解决方案,它很可能比我之前的方法更快:

代码语言:javascript
复制
#Create word vector containing all entries from word list
wordvec1 <- unname(unlist(sapply(wordlist$word, function(z) str_split(tolower(z), " "))))

#Create empty word vector with length of word vector 1
wordvec2 <- rep(0,length(wordvec1))

#Iteration
for (i in 1:length(wordvec1)) {
wordvec2[i] <- wordvec2[i]+sum(decow$f_raw[decow$token_lowercase==wordvec1[i]])
}

任何改进的想法都会被欣然接受。

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

https://stackoverflow.com/questions/48939050

复制
相关文章

相似问题

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