有没有人设法创建一个庞大的查找/替换功能/工作代码片段,在数据帧中交换已知的双字母组合?
这是一个例子。我能够进行单人替换,但我真的想利用我想要找到的大约800个术语的已知词典 - 替换它们在DTM生成之前将它们变成单词单位。例如,我想转向" Google Analytics"进入" google-analytics"。
我知道它在理论上是可能的;实质上,自定义停用词列表在功能上几乎完全相同,除非没有替换。只有800 gsubs似乎很愚蠢。
这是我目前的代码。任何帮助/指针/ URL / RTFM都将不胜感激。
mystopwords <- read.csv(stopwords.file, header = FALSE)
mystopwords <- as.character(mystopwords$V1)
mystopwords <- c(mystopwords, stopwords())
# load the file
df <- readLines(file.name)
# transform to corpus
doc.vec <- VectorSource(df)
doc.corpus <- Corpus(doc.vec)
# summary(doc.corpus)
## Hit known phrases
docs <- tm_map(doc.corpus, content_transformer(gsub), pattern = "Google Analytics", replacement = "google-analytics")
## Clean up and fix text - note, no stemming
doc.corpus <- tm_map(doc.corpus, content_transformer(tolower))
doc.corpus <- tm_map(doc.corpus, removePunctuation,preserve_intra_word_dashes = TRUE)
doc.corpus <- tm_map(doc.corpus, removeNumbers)
doc.corpus <- tm_map(doc.corpus, removeWords, c(stopwords("english"),mystopwords))
doc.corpus <- tm_map(doc.corpus, stripWhitespace)
答案 0 :(得分:1)
语料库库允许您将多个单词短语组合成单个标记。当有多个匹配时,它会选择最长的匹配项:
library(corpus)
text_tokens("I live in New York City, New York",
combine = c("new york city", "new york"))
# [[1]]
# [1] "i" "live" "in" "new_york_city"
# [5] "," "new_york"
默认情况下,连接器是下划线字符(_
),但您可以使用connector
参数指定备用连接器。
在您的示例中,您可以执行以下操作来获取逐个文档的矩阵:
mycombine <- c("google analytics", "amazon echo") # etc.
term_matrix(doc.corpus, combine = mycombine,
drop_punct = TRUE, drop_number = TRUE,
drop = c(stopwords_en, mystopwords))
另请注意,语料库会保留字内连字符,因此不需要preserve_intra_word_dashes
选项。
在每个函数调用中指定预处理选项可能很麻烦。如果您愿意,可以将语料库转换为 corpus_frame (带有特殊 text 列的data.frame),然后设置预处理选项(< EM> text_filter ):
corpus <- as_corpus_frame(doc.corpus)
text_filter(corpus) <- text_filter(combine = mycombine,
drop_punct = TRUE,
drop_number = TRUE,
drop = c(stopwords_en, mystopwords))
之后,您可以致电
term_matrix(corpus)
有关语料库的更多信息,包括介绍性小插图,http://corpustext.com