标签: text-mining

在R tm中添加自定义停用词

我在R中有一个使用该tm软件包的语料库.我正在应用该removeWords功能来删除停用词

tm_map(abs, removeWords, stopwords("english")) 
Run Code Online (Sandbox Code Playgroud)

有没有办法将自己的自定义停用词添加到此列表中?

r corpus text-mining stop-words tm

14
推荐指数
2
解决办法
3万
查看次数

在R中真的快速字ngram矢量化

编辑:新包text2vec非常好,并且很好地解决了这个问题(和许多其他问题).

关于github 插图的CRAN text2vec上的text2vec,用于说明ngram标记化

我在R中有一个非常大的文本数据集,我已将其作为字符向量导入:

#Takes about 15 seconds
system.time({
  set.seed(1)
  samplefun <- function(n, x, collapse){
    paste(sample(x, n, replace=TRUE), collapse=collapse)
  }
  words <- sapply(rpois(10000, 3) + 1, samplefun, letters, '')
  sents1 <- sapply(rpois(1000000, 5) + 1, samplefun, words, ' ')
})
Run Code Online (Sandbox Code Playgroud)

我可以将此字符数据转换为词袋表示,如下所示:

library(stringi)
library(Matrix)
tokens <- stri_split_fixed(sents1, ' ')
token_vector <- unlist(tokens)
bagofwords <- unique(token_vector)
n.ids <- sapply(tokens, length)
i <- rep(seq_along(n.ids), n.ids)
j <- match(token_vector, bagofwords)
M <- sparseMatrix(i=i, j=j, x=1L)
colnames(M) <- bagofwords
Run Code Online (Sandbox Code Playgroud)

所以R可以在大约3秒钟内将1,000,000,000个短句矢量化为一个单词表示形式(不错!):

> M[1:3, …
Run Code Online (Sandbox Code Playgroud)

r vectorization text-mining n-gram text2vec

14
推荐指数
1
解决办法
3740
查看次数

潜在语义分析概念

我已经阅读过使用奇异值分解(SVD)在文本语料库中进行潜在语义分析(LSA).我已经明白了如何做到这一点,我也理解了SVD的数学概念.

但我不明白为什么它适用于文本语料库(我相信 - 必须有语言解释).有人能用语言学的观点来解释我吗?

谢谢

algorithm nlp data-mining text-mining latent-semantic-indexing

13
推荐指数
2
解决办法
2858
查看次数

如何在R中增加绘制区域wordclouds的大小

试图复制这里的例子;

http://onertipaday.blogspot.com/2011/07/word-cloud-in-r.html

需要帮助搞清楚如何增加单词云的绘制区域.更改png("wordcloud_packages.png",width = 1280,height = 800)中的高度和宽度参数只会更改画布的高度和宽度.但绘制的区域仍然很小.

require(XML)
require(tm)
require(wordcloud)
require(RColorBrewer)
u = "http://cran.r-project.org/web/packages/available_packages_by_date.html"
t = readHTMLTable(u)[[1]]
ap.corpus <- Corpus(DataframeSource(data.frame(as.character(t[,3]))))
ap.corpus <- tm_map(ap.corpus, removePunctuation)
ap.corpus <- tm_map(ap.corpus, tolower)
ap.corpus <- tm_map(ap.corpus, function(x) removeWords(x, stopwords("english")))
ap.tdm <- TermDocumentMatrix(ap.corpus)
ap.m <- as.matrix(ap.tdm)
ap.v <- sort(rowSums(ap.m),decreasing=TRUE)
ap.d <- data.frame(word = names(ap.v),freq=ap.v)
table(ap.d$freq)
pal2 <- brewer.pal(8,"Dark2")
png("wordcloud_packages.png", width=1280,height=800)
wordcloud(ap.d$word,ap.d$freq, scale=c(8,.2),min.freq=3,
max.words=Inf, random.order=FALSE, rot.per=.15, colors=pal2)
dev.off()
Run Code Online (Sandbox Code Playgroud)

r tag-cloud text-mining word-cloud

13
推荐指数
1
解决办法
2万
查看次数

爬网

我想抓取特定的东西.特别是正在发生的事件,如音乐会,电影,艺术画廊开放等等.任何可能花时间去的东西.

如何实现爬虫?

我听说过Grub(grub.org - > Wikia)和Heritix(http://crawler.archive.org/)

还有其他人吗?

每个人都有什么意见?

-Jason

nlp information-retrieval web-crawler text-mining

12
推荐指数
3
解决办法
3517
查看次数

可以自动找到停止词吗?

在NLP中,停用词移除是典型的预处理步骤.它通常是基于我们认为停止词应该是什么的经验方式来完成的.

但在我看来,我们应该概括一下停止词的概念.对于来自不同领域的语料库,停止词可能会有所不同.我想知道我们是否可以在数学上定义停用词,例如通过其统计特征.然后我们可以自动从特定域的语料库中提取停用词.

对此有任何类似的想法和进展吗?谁能解开一些光明?

nlp machine-learning data-mining text-mining

12
推荐指数
1
解决办法
2379
查看次数

R中的TermDocumentMatrix错误

我一直在研究R中{tm}包的许多在线示例,试图创建一个TermDocumentMatrix.创建和清理语料库非常简单,但是当我尝试创建矩阵时,我一直遇到错误.错误是:

UseMethod("meta",x)中的错误:"meta"没有适用于类"character"对象的适用方法此外:警告消息:在mclapply(unname(content(x)),termFreq,control):all计划的核心在用户代码中遇到错误

例如,这里是Jon Starkweather的文本挖掘示例中的代码.为这么长的代码提前道歉,但这确实产生了一个可重复的例子.请注意,错误在{tdm}函数结束时出现.

#Read in data
policy.HTML.page <- readLines("http://policy.unt.edu/policy/3-5")

#Obtain text and remove mark-up
policy.HTML.page[186:202]
id.1 <- 3 + which(policy.HTML.page == "                    TOTAL UNIVERSITY        </div>")
id.2 <- id.1 + 5
text.data <- policy.HTML.page[id.1:id.2]
td.1 <- gsub(pattern = "<p>", replacement = "", x = text.data, 
     ignore.case = TRUE, perl = FALSE, fixed = FALSE, useBytes = FALSE)

td.2 <- gsub(pattern = "</p>", replacement = "", x = td.1, ignore.case = TRUE,
     perl = FALSE, fixed = FALSE, useBytes …
Run Code Online (Sandbox Code Playgroud)

r corpus text-mining tm term-document-matrix

12
推荐指数
2
解决办法
1万
查看次数

在scikit中保存并重复使用TfidfVectorizer

我在scikit中使用TfidfVectorizer学习从文本数据创建矩阵.现在我需要保存此对象以便以后重用.我试图使用pickle,但它给出了以下错误.

loc=open('vectorizer.obj','w')
pickle.dump(self.vectorizer,loc)
*** TypeError: can't pickle instancemethod objects
Run Code Online (Sandbox Code Playgroud)

我尝试在sklearn.externals中使用joblib,这再次给出了类似的错误.有没有办法保存这个对象,以便我以后可以重用它?

这是我的完整对象:

class changeToMatrix(object):
def __init__(self,ngram_range=(1,1),tokenizer=StemTokenizer()):
    from sklearn.feature_extraction.text import TfidfVectorizer
    self.vectorizer = TfidfVectorizer(ngram_range=ngram_range,analyzer='word',lowercase=True,\
                                          token_pattern='[a-zA-Z0-9]+',strip_accents='unicode',tokenizer=tokenizer)

def load_ref_text(self,text_file):
    textfile = open(text_file,'r')
    lines=textfile.readlines()
    textfile.close()
    lines = ' '.join(lines)
    sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
    sentences = [ sent_tokenizer.tokenize(lines.strip()) ]
    sentences1 = [item.strip().strip('.') for sublist in sentences for item in sublist]      
    chk2=pd.DataFrame(self.vectorizer.fit_transform(sentences1).toarray()) #vectorizer is transformed in this step 
    return sentences1,[chk2]

def get_processed_data(self,data_loc):
    ref_sentences,ref_dataframes=self.load_ref_text(data_loc)
    loc=open("indexedData/vectorizer.obj","w")
    pickle.dump(self.vectorizer,loc) #getting error here
    loc.close()
    return ref_sentences,ref_dataframes
Run Code Online (Sandbox Code Playgroud)

python nlp pickle text-mining scikit-learn

12
推荐指数
2
解决办法
2万
查看次数

如何使用OpenNLP和stringi检测句子边界?

我想打破下string一句话:

library(NLP) # NLP_0.1-7  
string <- as.String("Mr. Brown comes. He says hello. i give him coffee.")
Run Code Online (Sandbox Code Playgroud)

我想展示两种不同的方式.一个来自包装openNLP:

library(openNLP) # openNLP_0.2-5  

sentence_token_annotator <- Maxent_Sent_Token_Annotator(language = "en")  
boundaries_sentences<-annotate(string, sentence_token_annotator)  
string[boundaries_sentences]  

[1] "Mr. Brown comes."   "He says hello."     "i give him coffee."  
Run Code Online (Sandbox Code Playgroud)

第二个来自包装stringi:

library(stringi) # stringi_0.5-5  

stri_split_boundaries( string , opts_brkiter=stri_opts_brkiter('sentence'))

[[1]]  
 [1] "Mr. "                              "Brown comes. "                    
 [3] "He says hello. i give him coffee."
Run Code Online (Sandbox Code Playgroud)

在第二种方式之后,我需要准备句子以删除多余的空格或再次将新的字符串分解成句子.我可以调整stringi函数来提高结果的质量吗?

当它是一个大数据时,openNLP(非常)慢stringi.
有没有办法结合stringi( - >快速)和openNLP …

regex r text-mining opennlp stringi

12
推荐指数
2
解决办法
705
查看次数

"RTextTools"create_matrix出错了

我正在运行RTextTools包来构建文本分类模型.

当我准备预测数据集并尝试将其转换为矩阵时.我得到错误:

Error in if (attr(weighting, "Acronym") == "tf-idf") weight <- 1e-09 : 
  argument is of length zero
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

table<-read.csv("traintest.csv",header = TRUE)
dtMatrix <- create_matrix(table["COMMENTS"])
container <- create_container(dtMatrix, 
                              table$LIKELIHOOD_TO_RECOMMEND, 
                              trainSize=1:5000,testSize=5001:10000, 
                              virgin=FALSE)
model <- train_model(container, "SVM", kernel="linear", cost=1)

predictionData<-read.csv("rest.csv",header = TRUE)
**predMatrix <- create_matrix(predictionData["COMMENTS"],originalMatrix=dtMatrix)**
Error in if (attr(weighting, "Acronym") == "tf-idf") weight <- 1e-09 : 
      argument is of length zero
Run Code Online (Sandbox Code Playgroud)

错误是由最后一个代码(粗体)给出我尝试在谷歌搜索但没有看到一个明确的解决方案.

谢谢

r classification text-mining

12
推荐指数
1
解决办法
3922
查看次数