如何在R中编写用于文本挖掘的自定义控件函数
我有一个文本数据集,包括不同的主题,写得很糟糕,很多单词粘在一起。我找到了一种将“长术语”分解为足够的单词的方法,并且我已经构建了一个这样的数据表(仅显示对本例有用的行):如何在R中编写用于文本挖掘的自定义控件函数,r,nlp,tm,R,Nlp,Tm,我有一个文本数据集,包括不同的主题,写得很糟糕,很多单词粘在一起。我找到了一种将“长术语”分解为足够的单词的方法,并且我已经构建了一个这样的数据表(仅显示对本例有用的行): >wordMap[1:4] 长期词汇 1:线条取消线条,隐藏 2:夹克对比夹克,对比夹克 3:氨纶专家氨纶,专家 4:inchescmmidweightsemi inchescm、中、重、半 请记住,单词列本身就是一个单词列表 >class(wordMap$words) "list" >wordMap$words
>wordMap[1:4]
长期词汇
1:线条取消线条,隐藏
2:夹克对比夹克,对比夹克
3:氨纶专家氨纶,专家
4:inchescmmidweightsemi inchescm、中、重、半
请记住,单词
列本身就是一个单词列表
>class(wordMap$words)
"list"
>wordMap$words[1]
[[1]]
[1] "lined" "concealed"
使用此数据表,我希望创建一个控制函数,并将其传递到tm
包中的函数tm\u map
。基于此帖子,我构建了以下功能:
>mapWords <- function(x) UseMethod("mapWords", x)
>mapWords.PlainTextDocument <- mapWords.character <- function(x) {
if (x %in% wordMap$longTerm) {
i <- which(x == wordMap$longTerm)
x=wordMap$words[[i]]
}
return(x)
}
警告消息:
在if(x%在%wordMap$longTerm中){
条件的长度大于1,且仅使用第一个元素
这很清楚。条件匹配不止一次。但是,我认为map函数是在“令牌基础”上工作的,一个接一个地传递到控制函数令牌。通常,我的自定义控制函数使用gsub
或类似功能,因此它们的编码与上面的mapWords
函数不同。下面是一个工作的控制函数示例:
rmRepeatLetters <- function(str) gsub('([[:alpha:]])\\1{2,}', '\\1', str)
"alice+olivia黑色羊毛混纺夹克对比织物,加垫肩部,皮革镶边,正面全衬里隐蔽钩扣面料%羊毛,%棉;面料%皮革;面料%人造丝,%尼龙,%弹性纤维;衬里%涤纶,%氨纶专家清洁长度肩部至下摆英寸cm中码半合身款式此款ru与sizemodel相同的ns为“\”厘米,穿的尺码较小“
然而,我想知道是否有一种方法可以构建一个定制的控制函数来打破语料库本身的长期限制
提前感谢您的时间
rmRepeatLetters <- function(str) gsub('([[:alpha:]])\\1{2,}', '\\1', str)
>testT <- as.character(testC[[1]])
>terms <- paste(as.character(unlist(sapply(unlist(strsplit(testT, " ")), function(x) mapWords(x)))), collapse = " ")
>terms