Re: [问题] text mining 长词优先

楼主: celestialgod (天)   2015-07-23 10:53:26
看一下 是不是你想要的
long = grep("\\s", names(v))
short = setdiff(1:length(v), long)
for (i in long)
{
words = strsplit(names(v[i]), "\\s")[[1]]
for (j in 1:length(words))
v[short][names(v[short]) == words[j]] =
v[short][names(v[short]) == words[j]] - v[i]
}
第二个循环可以用match做,并且省略short这个变量,这个你可以自己尝试
code可以这样改
long = grep("\\s", names(v))
for (i in long)
{
words = strsplit(names(v[i]), "\\s")[[1]]
loc = na.omit(match(words, names(v)))
v[loc] = v[loc] - v[i]
}
不用循环的作法:
twoWords = do.call(rbind, strsplit(names(v[long]), "\\s"))
s = tapply(rep(v[long],2), twoWords, sum)
loc = match(names(s), names(v))
v[loc] = v[loc] - s
你可以自己查看 s 跟 v[loc] 总数是有出入的
所以麻烦你确认一下你的双词跟单词次数是否有误
我后来想到你这个问题是
你双词会撷取前后,所以会有两倍的单词在双词中计入
你可能要自己去考虑这问题的解决方式
※ 引述《john5601 (HTC ONE年不变)》之铭言:
: 目前在作英文的文字探勘,已经可以分别算出单词和双词的结果
: 举例 :
: "Information management" 在文章中出现3次
: "Information"在文章中出现5次
: "management"在文章中出现6次
: 但因为想要长词优先,所以"management"和"Information"的次数要分别减3次
:

: 以上为跑出的结果 不知道该如何达成这样的作法
: 恳请前辈大大指导
: [程式范例]:
: http://pastebin.com/27rXYuQp 程式码
作者: john5601 (HTC粉)   2015-07-23 15:55:00
" target="_blank" rel="nofollow">
把c大的执行后结果还是不太懂第二个循环该怎么做没错 我应该要单词跟双词分开后,先取双词的前几趴的词之后再跟单词的结果作计算

Links booklink

Contact Us: admin [ a t ] ucptt.com