Regex 将相似的单词/短语分组
我有一个单词频率表,如下所示Regex 将相似的单词/短语分组,regex,r,string,nlp,distance,Regex,R,String,Nlp,Distance,我有一个单词频率表,如下所示 > head(freqWords) employees work bose people company 1879 1804 1405 971 959 employee 100 > tail(freqWords) youll younggood
> head(freqWords)
employees work bose people company
1879 1804 1405 971 959
employee
100
> tail(freqWords)
youll younggood yoyo ytd yuorself zeal
1 1 1 1 1 1
我想创建另一个频率表,它将组合相似的单词并添加它们的频率
在上面的示例中,我的新表应该包含employee和employees作为一个元素,频率为1979。比如说
> head(newTable)
employee,employees work bose people
1979 1804 1405 971
company
959
我知道如何找到类似的单词(使用adist
,stringdist
),但我无法创建频率表。例如,我可以使用下面的方法得到一个类似单词的列表
words <- names(freqWords)
lapply(words, function(x) words[stringdist(x, words) < 3])
我的单词/短语中没有任何标点符号/特殊符号。(我对R不太了解;我通过调整我找到的adist2
的实现创建了stringdist2
,但我不完全了解模式和repl
的工作原理)
所以我需要帮助来创建新的频率表。如果你使用词干分析,也许是从tm软件包中,你至少可以像对待雇员、雇员和雇主一样对待单词。谢谢律师,tm软件包中的词干分析正是我需要的单词。但是对于短语(两个词,三个词),我仍然需要一些调整。我会尽量让你知道我试过词干分析,因为单个单词也不完全是我需要的。例如,它将改进
和改进
减少为改进
,这不是我需要的。我需要改进
或改进
或两者兼而有之(改进,改进
),如果我做词干分析,那么我必须手动更正所有拼写。}然后做词干分析,但保留一个反向列表。谢谢你,如果我有任何问题,我会尝试在这里发布。但短语的问题仍然存在。
lapply(words, function(x) words[stringdist2(x, words) < 3])
stringdist2 <- function(word1, word2){
min(stringdist(word1, word2),
stringdist(word1, gsub(word2,
pattern = "(.*) (.*)",
repl="\\2,\\1")))
}