【发布时间】:2015-05-22 10:04:30
【问题描述】:
我创建了一个术语文档矩阵“myDtm”,其中包含大量专利中包含的一组关键字。我想获得一个有序的、前 100 名、关键字频率最高的专利列表。
代码行是
myDtm <- TermDocumentMatrix(myCorpus, control = list(minWordLength = 1))
keywords <- unique(c("labor","cost","autom", "human" ,"person", "intens","reduc","machin","algorithm"))
inspect(myDtm[keywords,tail(order(colSums(v)),100)])
结果如下所示(摘录):
Terms 2435 33164 27276 1874 20447 41149 35987 21765 798 2461 19249 6822 27640
labor 0 0 0 0 1 0 0 0 0 0 0 0 2
cost 11 0 0 0 13 0 0 0 2 9 0 0 9
autom 0 0 0 0 26 0 0 0 0 0 0 0 0
human 0 0 0 270 150 16 0 279 0 0 54 0 1
person 0 29 0 0 46 3 0 0 0 0 0 0 1
intens 0 0 0 1 0 0 0 0 0 0 0 0 41
reduc 8 0 8 9 13 289 2 12 12 305 292 0 44
machin 264 77 0 0 2 0 0 2 0 0 0 323 31
algorithm 0 0 8 0 0 0 1 0 2 0 0 0 95
问题:如何排除异常值,例如专利号。 6822?对于异常值,我指的是仅包含一两个关键字但频率非常高的专利。我想获得看起来像专利号的前 100 名专利列表。 20447 或 27640,其中包含大多数关键字。更具体地说,有没有一种说法:按关键字提及的频率对列进行排序,并确保至少 50% 的关键字被提及? ?
提前谢谢你。
【问题讨论】:
-
离群值是什么意思?你如何定义异常值? “包含大多数关键字的位置”太模糊而无法正式化,您需要更加具体,例如:应该包含 60% 的单词还是多少?你能做的是计算每个文档的术语数,用箱线图绘制它,然后决定截止应该是什么,比如
newDtm <- lapply(myDtm, function(x) ifelse(x > 0, 1,0)); boxplot(colSums(newDtm) -
一项专利,其中仅代表一个或两个关键字但经常使用,因此位于前 100 名列表中(例如专利 41149 或 2461)。我只对提及多个关键字的专利感兴趣(例如专利 20447)
标签: r subset text-mining outliers term-document-matrix