- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是新来的,我的问题是数学性质的,而不是编程性质的,我想就我的方法是否有意义获得第二意见。
我试图使用函数 findAssocs
在我的语料库中找到单词之间的关联。 ,来自 tm
包裹。尽管它在通过软件包提供的数据(例如纽约时报和美国国会)上表现得相当好,但我对它在我自己的不太整洁的数据集上的表现感到失望。它似乎很容易被包含相同单词的多次重复的罕见文档所扭曲,这似乎在它们之间建立了强烈的关联。我发现余弦度量可以更好地说明术语的相关性,即使基于文献,它也只倾向于用于测量文档而不是术语的相似性。让我们使用来自 RTextTools
的美国国会数据包来演示我的意思:
首先,我将设置所有...
data(USCongress)
text = as.character(USCongress$text)
corp = Corpus(VectorSource(text))
parameters = list(minDocFreq = 1,
wordLengths = c(2,Inf),
tolower = TRUE,
stripWhitespace = TRUE,
removeNumbers = TRUE,
removePunctuation = TRUE,
stemming = TRUE,
stopwords = TRUE,
tokenize = NULL,
weighting = function(x) weightSMART(x,spec="ltn"))
tdm = TermDocumentMatrix(corp,control=parameters)
# Government: appears in 37 docs and between then it appears 43 times
length(which(text %like% " government"))
sum(str_count(text,"government"))
# Foreign: appears in 49 document and between then it appears 56 times
length(which(text %like% "foreign"))
sum(str_count(text,"foreign"))
length(which(text[which(text %like% "government")] %like% "foreign"))
# together they appear 3 times
# looking for "foreign" and "government"
head(as.data.frame(findAssocs(tdm,"foreign",0.1)),n=10)
findAssocs(tdm, "foreign", 0.1)
countri 0.34
lookthru 0.30
tuberculosi 0.26
carryforward 0.24
cor 0.24
malaria 0.23
hivaid 0.20
assist 0.19
coo 0.19
corrupt 0.19
# they do not appear to be associated
text[4450] = gsub("(.*)",paste(rep("\\1",50),collapse=" "),"foreign government")
corp = Corpus(VectorSource(text))
tdm = TermDocumentMatrix(corp,control=parameters)
#running the association again:
head(as.data.frame(findAssocs(tdm,"foreign",0.1)),n=10)
findAssocs(tdm, "foreign", 0.1)
govern 0.30
countri 0.29
lookthru 0.26
tuberculosi 0.22
cor 0.21
carryforward 0.20
malaria 0.19
hivaid 0.17
assist 0.16
coo 0.16
cosine(as.vector(tdm["government",]),as.vector(tdm["foreign",]))
[,1]
[1,] 0
tdm.reduced = removeSparseTerms(tdm,0.98)
Proximity = function(tdm){
d = dim(tdm)[1]
r = matrix(0,d,d,dimnames=list(rownames(tdm),rownames(tdm)))
for(i in 1:d){
s = seq(1:d)[-c(1:(i-1))]
for(j in 1:length(s)){
r[i,s[j]] = cosine(as.vector(tdm[i,]),as.vector(tdm[s[j],]))
r[s[j],i] = r[i,s[j]]
}
}
diag(r) = 0
return(r)
}
rmat = Proximity(tdm.reduced)
# findAssocs method
head(as.data.frame(sort(findAssocs(tdm.reduced,"fund",0),decreasing=T)),n=10)
sort(findAssocs(tdm.reduced, "fund", 0), decreasing = T)
use 0.11
feder 0.10
insur 0.09
author 0.07
project 0.05
provid 0.05
fiscal 0.04
govern 0.04
secur 0.04
depart 0.03
# cosine method
head(as.data.frame(round(sort(rmat[,"fund"],decreasing=T),2)),n=10)
round(sort(rmat[, "fund"], decreasing = T), 2)
use 0.15
feder 0.14
bill 0.14
provid 0.13
author 0.12
insur 0.11
state 0.10
secur 0.09
purpos 0.09
amend 0.09
最佳答案
如果我理解您的查询(我认为应该在堆栈交换上)。我相信问题在于 findAssocs
中的术语距离正在使用欧几里得测量。因此,仅将单词翻倍的文档就成为异常值,并且在距离测量中被认为有很大不同。
切换到余弦作为文档的度量被广泛使用,所以我怀疑术语也可以。我喜欢 skmeans
用于通过余弦聚类文档的包。 Spherical K-Means 将直接接受 TDM 并以单位长度进行余弦距离。
此 video在 ~11m 处显示它,以防您不知道。
希望这有点帮助......最后我相信余弦是可以接受的。
关于r - tm.package : findAssocs vs Cosine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21357656/
我一直在用findAssoc()使用文本挖掘( tm 包)但意识到我的数据集似乎有些不对劲。 我的数据集是保存在一列 csv 文件中的 1500 个开放式答案。 所以我这样称呼数据集并使用典型的tm_
我正在尝试使用 tm 包查找与术语文档矩阵中的特定单词相关的单词。 我正在使用 findAssocs 来执行此操作。 findAssocs 的参数是: x:术语-文档矩阵。 term:持有术语的角色。
我是新来的,我的问题是数学性质的,而不是编程性质的,我想就我的方法是否有意义获得第二意见。 我试图使用函数 findAssocs 在我的语料库中找到单词之间的关联。 ,来自 tm包裹。尽管它在通过软件
考虑以下列表: library(tm) data("crude") tdm 0) names(d) else NA, cor=if(length(d)>0) d else NA,
我是一名优秀的程序员,十分优秀!