如何从列表中的 R tm_map gsub 中进行大规模 replacement/tokenization?
How to do large-scale replacement/tokenization in R tm_map gsub from a list?
有没有人设法创建大量 find/replace function/working 代码片段来交换数据框中已知的二元语法?
举个例子。我可以使用 onesie-twosie 替换,但我真的想利用一个已知的大约 800 个术语的词典,我想在 DTM 生成之前将它们转换为单词单元。比如我想把"Google Analytics"变成"google-analytics".
我知道这在理论上是可行的;本质上,自定义停用词列表在功能上几乎做同样的事情,只是没有替换。而且只有 800 gsub 似乎很愚蠢。
这是我当前的代码。任何 help/pointers/URLs/RTFMs 将不胜感激。
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)
语料库 库允许您将多词短语组合成单个标记。当有多个匹配时,它选择最长的一个:
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 ), 然后设置预处理选项(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
有没有人设法创建大量 find/replace function/working 代码片段来交换数据框中已知的二元语法?
举个例子。我可以使用 onesie-twosie 替换,但我真的想利用一个已知的大约 800 个术语的词典,我想在 DTM 生成之前将它们转换为单词单元。比如我想把"Google Analytics"变成"google-analytics".
我知道这在理论上是可行的;本质上,自定义停用词列表在功能上几乎做同样的事情,只是没有替换。而且只有 800 gsub 似乎很愚蠢。
这是我当前的代码。任何 help/pointers/URLs/RTFMs 将不胜感激。
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)
语料库 库允许您将多词短语组合成单个标记。当有多个匹配时,它选择最长的一个:
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 ), 然后设置预处理选项(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