在数据科学的旅程中,不断探索新的工作方式和提高效率至关重要。回顾早期数据科学生涯,也曾陷入“自满”的陷阱。在某个时刻,没有足够地挑战自己,没有尝试不同的工作方法,而是接受了现状,直到意识到“自满是一种只有在回顾时才存在的心态:它必须在被确认之前被打破”。现在,尽可能地挑战自己的工作方式,目的是为了更快、更高效地完成工作。这帮助在数据科学中发现新的工作方式。
文本挖掘是数据科学/分析专家最常面对的挑战之一。最大的挑战是需要彻底评估文本中的潜在模式,而且是手动的。例如,删除文本中的数字在进行任何文本挖掘之前是相当常见的。但如果想要提取像“24/7”这样的内容呢?因此,文本清洗工作根据练习的目标和文本模式的类型高度个性化。
主要处理文本挖掘的两个方面:情感挖掘和主题提取。情感挖掘中,更关心的是解读情感。主题提取则是在情感挖掘之前,希望提取出所选文本的主要主题。
可能会在互联网上找到许多进行情感分析的方法。然而,主题提取非常依赖于上下文。在这篇文章中,分享了行业中用于R语言进行主题提取的前四种技巧。为了方便,也强调了每种技巧的优缺点。
R语言中的前四种技巧
ss <- read.csv("keywords.csv")
Keywords <- as.character(ss$Keywords)
tags <- as.character(ss$Merchant_Name)
for (i in 1:length(Keywords)) {
for (j in 1:nrow(Data1)) {
if(grepl(Keywords[i],Data1[j,1]) == 1){Data1[j,2] <- tags[i]
Data1[j,4] <- 1
}
}
}
这种算法在提取不太明显分隔的单词中的关键词方面非常有效。例如,它可以从“#DataScientistTavishSrivatava”中提取出“Tavish”。这个算法还可以设置关键词匹配算法的优先级顺序。例如,如果需要在上述标签中给“Tavish”比“Srivastava”更高的优先级,可以轻松实现。
然而,它需要一个预定义的关键词列表来进行搜索,并且可能会捕获许多误分类的案例。例如,如果想在上下文中搜索“APE”,也会错误地将“CAPE”标记为“APE”。
words <- read.csv("word_match.csv")
word <- as.character(words$Keywords)
tags <- as.character(words$Tag)
for (i in 1:length(word)) {
for (j in 1:nrow(Data1)) {
if(word(unlist(Data1[j,1]),1) == word[i]){Data1[j,2] <- tags[i]
Data1[j,4] <- 1
}
}
}
这个算法专门针对前一个算法的第二个弱点(误分类案例)进行了改进。在这个算法中,尝试匹配单词而不是关键词。它在寻找分隔良好的单词方面运作得非常好。例如,这个算法可以毫不费力地从“Tavish Srivatava”中提取出“Tavish”。
这个算法还允许在单词匹配算法中设置优先级顺序。例如,如果需要在上述标签中给“Tavish”比“Srivastava”更高的优先级,可以轻松执行。然而,它需要一个预定义的关键词列表来进行搜索,并且只捕获第一个分隔良好的单词。虽然可以修改算法以搜索所有单词,但它会错过不太明显分隔的单词。
for (i in 1:nrow(Data1)) {
if(grepl("WWW",Data1[i,1]) == 1 & grepl("COM",Data1[i,1]) == 1){
start <- str_locate(unlist(Data1[i,1]),"WWW")[2]
end <- str_locate(unlist(Data1[i,1]),"CO")[1]
Data1[i,2] <- paste("www",tolower(substr(unlist(Data1[i,1]),start + 1,end-1)),"com", sep = ".")
Data1[i,4] <- 1
}
}
这种方法不需要任何列表就可以开始。如果能找到一个强大的正则表达式,它通常会非常准确。然而,创建正则表达式需要深入研究。在数据结构不太好的情况下,这种方法能够标记的观察数量非常少。
相信这种方法足够具有挑战性,可以让在智力上得到锻炼。为了让能够自己工作,没有提供完整的代码,而是提供了一步一步的方法。如果仍然觉得困难,请在评论部分留下请求。
步骤1:找到可能正是要找的东西的最常用单词。
步骤2:找到与这些频繁出现的单词最相关的单词。
步骤3:对于每一对单词,找到最佳的频率-关联对(这将需要一些迭代)。
这种方法不需要字典。如果参数优化得当,它可以非常具有预测性。它可以作为其他算法的反馈。即使不知道文本的语言,也可以使用这个算法。
然而,它有时在主题名称上不是很精确。它倾向于捕获甚至那些没有意义的趋势。