我在R中有一个使用该tm软件包的语料库.我正在应用该removeWords功能来删除停用词
tm_map(abs, removeWords, stopwords("english"))
Run Code Online (Sandbox Code Playgroud)
有没有办法将自己的自定义停用词添加到此列表中?
编辑:新包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) 我已经阅读过使用奇异值分解(SVD)在文本语料库中进行潜在语义分析(LSA).我已经明白了如何做到这一点,我也理解了SVD的数学概念.
但我不明白为什么它适用于文本语料库(我相信 - 必须有语言解释).有人能用语言学的观点来解释我吗?
谢谢
algorithm nlp data-mining text-mining latent-semantic-indexing
试图复制这里的例子;
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) 我想抓取特定的东西.特别是正在发生的事件,如音乐会,电影,艺术画廊开放等等.任何可能花时间去的东西.
如何实现爬虫?
我听说过Grub(grub.org - > Wikia)和Heritix(http://crawler.archive.org/)
还有其他人吗?
每个人都有什么意见?
-Jason
在NLP中,停用词移除是典型的预处理步骤.它通常是基于我们认为停止词应该是什么的经验方式来完成的.
但在我看来,我们应该概括一下停止词的概念.对于来自不同领域的语料库,停止词可能会有所不同.我想知道我们是否可以在数学上定义停用词,例如通过其统计特征.然后我们可以自动从特定域的语料库中提取停用词.
对此有任何类似的想法和进展吗?谁能解开一些光明?
我一直在研究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) 我在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) 我想打破下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 …
我正在运行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)
错误是由最后一个代码(粗体)给出我尝试在谷歌搜索但没有看到一个明确的解决方案.
谢谢
text-mining ×10
r ×6
nlp ×4
corpus ×2
data-mining ×2
tm ×2
algorithm ×1
n-gram ×1
opennlp ×1
pickle ×1
python ×1
regex ×1
scikit-learn ×1
stop-words ×1
stringi ×1
tag-cloud ×1
text2vec ×1
web-crawler ×1
word-cloud ×1