在我看来,R 在 4.3.0 版本中引入了一个新错误,这破坏了我的很多网络抓取工具。我只发现一处提到了这一变化,但不太理解这篇博文。
本质上,这段代码在较新版本的 R 上失败,但较旧版本执行了一些似乎有效的内部转换:
text <- "\xa0 x"
gsub("x", "u", text)
#> Warning in gsub("x", "u", text): unable to translate '<a0> x' to a wide string
#> Error in gsub("x", "u", text): input string 1 is invalid
Run Code Online (Sandbox Code Playgroud)
创建于 2023-07-13,使用reprex v2.0.2
在进行字符串操作之前有什么方法可以删除这些特殊字符吗?请注意,我不知道哪些字符具体失败,因为我正在使用的真实字符串太长而无法检查。
我想识别包含两个关键字且之间有 0 到 3 个单词的字符串。我所拥有的在大多数情况下都有效:
strings <- c(
"Today is my birthday",
"Today is not yet my birthday",
"Today birthday",
"Today maybe?",
"Today: birthday"
)
grepl("Today(\\s\\w+){0,3}\\sbirthday", strings, ignore.case = TRUE)
#> [1] TRUE FALSE TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
由reprex 包于 2021 年 11 月 24 日创建(v2.0.1)
我的问题是字符串"Today: birthday"。问题在于,单词被定义为(\\s\\w+)不让句子包含任何标点符号。如何更好地定义单词的正则表达式,以便不排除标点符号(最好是忽略它)。
我想通过 9gag.com Api 下载帖子,该 API 显然存在,但没有在任何地方记录。如果您在浏览器中检查此链接,您将收到 json 响应:https://9gag.com/v1/tag-posts/tag/wtf/type/fresh
所以使用httr2这个应该很容易。然而:
library(httr2)
req <- request("https://9gag.com/v1/tag-posts/tag/samantha/type/fresh")
req_dry_run(req)
#> GET /v1/tag-posts/tag/wtf/type/fresh HTTP/1.1
#> Host: 9gag.com
#> User-Agent: httr2/0.1.1 r-curl/4.3.2 libcurl/7.82.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br, zstd
result <- req_perform(req)
#> Error: HTTP 403 Forbidden.
Run Code Online (Sandbox Code Playgroud)
我检查了 Firefox Inspect 中的网络选项卡,并复制了输入 URL 时发送的 GET 请求:
curl 'https://9gag.com/v1/tag-posts/tag/wtf/type/fresh' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate, br' -H 'Connection: keep-alive' -H …Run Code Online (Sandbox Code Playgroud) 好吧,在我阅读了正则表达式的帮助文章之后,我放弃并提出问题,但仍然不知道我在寻找什么:
我有一个文件列表:
files <- c("files_combined.csv","file_1-10.csv","file_11-20.csv",
"file_21-30.csv","file_2731-2740.csv","file_2731-2740.txt")
Run Code Online (Sandbox Code Playgroud)
我只想要以"file_"开头并以".csv"结尾的csv文件.我知道它看起来像这样:
grep(pattern = "^file_???.csv$" ,files)
Run Code Online (Sandbox Code Playgroud)
但我需要找到正确的正则表达式,忽略第一个和第二个模式("file_"+".csv")之间的字符数.如果有人知道R中正则表达式的完整列表,我真的很感激,因为每次阅读帮助都很繁琐,而且在我的情况下不成功,有时...
我正在尝试使用这些包quanteda,caret并根据经过训练的样本对文本进行分类.作为试运行,我想比较的内置的朴素贝叶斯分类器quanteda与的那些caret.但是,我似乎caret无法正常工作.
这是一些复制代码.首先是quanteda侧面:
library(quanteda)
library(quanteda.corpora)
library(caret)
corp <- data_corpus_movies
set.seed(300)
id_train <- sample(docnames(corp), size = 1500, replace = FALSE)
# get training set
training_dfm <- corpus_subset(corp, docnames(corp) %in% id_train) %>%
dfm(stem = TRUE)
# get test set (documents not in id_train, make features equal)
test_dfm <- corpus_subset(corp, !docnames(corp) %in% id_train) %>%
dfm(stem = TRUE) %>%
dfm_select(pattern = training_dfm,
selection = "keep")
# train model on sentiment
nb_quanteda <- textmodel_nb(training_dfm, …Run Code Online (Sandbox Code Playgroud) 我无法在此页面上发表评论,我在该页面上找到了俄语/西里尔语语言的情绪分析文本分析功能
get_sentiment_rus <- function(char_v, method="custom", lexicon=NULL, path_to_tagger = NULL, cl = NULL, language = "english") {
language <- tolower(language)
russ.char.yes <- "[\u0401\u0410-\u044F\u0451]"
russ.char.no <- "[^\u0401\u0410-\u044F\u0451]"
if (is.na(pmatch(method, c("syuzhet", "afinn", "bing", "nrc",
"stanford", "custom"))))
stop("Invalid Method")
if (!is.character(char_v))
stop("Data must be a character vector.")
if (!is.null(cl) && !inherits(cl, "cluster"))
stop("Invalid Cluster")
if (method == "syuzhet") {
char_v <- gsub("-", "", char_v)
}
if (method == "afinn" || method == "bing" || method == "syuzhet") {
word_l <- strsplit(tolower(char_v), "[^A-Za-z']+") …Run Code Online (Sandbox Code Playgroud) 我试图将我的头缠在准引号上,以便可以与data.table电话一起使用。这是一个例子:
library(data.table)
library(rlang)
dt <- data.table(col1 = 1:10, col2 = 11:20)
dt[, col1]
Run Code Online (Sandbox Code Playgroud)
如果我想将其包装到函数中,该怎么做?我试过了:
foo <- function(dt, col) {
col <- quo(col)
expr(dt[, !!col1])
}
foo(dt, col1)
Run Code Online (Sandbox Code Playgroud)
但是得到Error in enexpr(expr) : object 'col1' not found。我认为我缺少一些步骤,因此data.table对的评价与有所不同dplyr。
我知道您通常应该对分类变量使用barplot,但是在我的情况下,有人将连续变量分为几组,总之有一个直方图会很好。
这就是我想要得到的(除非是直方图):
par(oma=c(2,0,0,0)) #so labels are not cut off
barplot(table(hhincome),ylab = "Frequency", main = "Netto houshold income",
border="black", col="grey",las=2)
Run Code Online (Sandbox Code Playgroud)
(注意:直方图在条形图和x轴之间没有空格)
数据:
hhincome <- structure(c(4L, 4L, 1L, 6L, 8L, 1L, 4L, 5L, 2L, 3L, 1L, 5L, 1L, 7L, 6L, 7L, 3L, 2L, 6L, 7L, 8L, 4L, 7L, 8L, 7L, 4L, 5L, 5L, 5L, 9L, 7L, 5L, 8L, 8L, 6L, 5L, 5L, 3L, 5L, 4L, 3L, 5L, 3L, 5L, 4L, 4L, 5L, 7L, 6L, 7L, 2L, 6L, 1L, 7L, 4L, 4L, 5L, …Run Code Online (Sandbox Code Playgroud) 在 dfm 中如何检测非英语单词并将其删除?
\ndftest <- data.frame(id = 1:3, \n text = c("Holla this is a spanish word", \n "English online here", \n "Bonjour, comment \xc3\xa7a va?"))\nRun Code Online (Sandbox Code Playgroud)\ndfm 的构造示例如下:
\ntestDfm <- dftest$text %>%\n tokens(remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE) %>% %>% tokens_wordstem() %>%\n dfm()\nRun Code Online (Sandbox Code Playgroud)\n我发现 textcat 包作为替代解决方案,但在真实数据集中有很多情况,其中整行都是英语,它仅将其识别为另一种语言的字符。是否有其他方法可以使用 quanteda 在 dfm 中的数据帧或标记中查找非英语行?
\n