小编JBG*_*ber的帖子

无法将“...”翻译为宽字符串

在我看来,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

在进行字符串操作之前有什么方法可以删除这些特殊字符吗?请注意,我不知道哪些字符具体失败,因为我正在使用的真实字符串太长而无法检查。

encoding r

9
推荐指数
1
解决办法
3232
查看次数

查找相距 0 到 3 个单词的两个关键字

我想识别包含两个关键字且之间有 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+)不让句子包含任何标点符号。如何更好地定义单词的正则表达式,以便不排除标点符号(最好是忽略它)。

regex r

5
推荐指数
1
解决办法
52
查看次数

从 9gag Api 获取帖子

我想通过 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)

get r httr2

5
推荐指数
0
解决办法
1424
查看次数

用于查找文件的正则表达式

好吧,在我阅读了正则表达式的帮助文章之后,我放弃并提出问题,但仍然不知道我在寻找什么:

我有一个文件列表:

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中正则表达式的完整列表,我真的很感激,因为每次阅读帮助都很繁琐,而且在我的情况下不成功,有时...

regex r

4
推荐指数
1
解决办法
154
查看次数

Quanteda的朴素贝叶斯与插入符号:结果截然不同

我正在尝试使用这些包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)

r supervised-learning text-classification r-caret quanteda

4
推荐指数
1
解决办法
289
查看次数

R中西里尔文的情感分析

我无法在此页面上发表评论,我在该页面上找到了俄语/西里尔语语言的情绪分析文本分析功能

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)

nlp r

2
推荐指数
1
解决办法
521
查看次数

用data.table准报价

我试图将我的头缠在准引号上,以便可以与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

r data.table rlang quasiquotes

2
推荐指数
1
解决办法
74
查看次数

从分类变量创建直方图(非条形图)

我知道您通常应该对分类变量使用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)

r histogram

1
推荐指数
1
解决办法
3272
查看次数

在 dfm 中查找非英语标记并将其删除

在 dfm 中如何检测非英语单词并将其删除?

\n
dftest <- data.frame(id = 1:3, \n                     text = c("Holla this is a spanish word", \n                              "English online here", \n                              "Bonjour, comment \xc3\xa7a va?"))\n
Run Code Online (Sandbox Code Playgroud)\n

dfm 的构造示例如下:

\n
testDfm <- dftest$text %>%\n             tokens(remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE)  %>%  %>% tokens_wordstem() %>%\n             dfm()\n
Run Code Online (Sandbox Code Playgroud)\n

我发现 textcat 包作为替代解决方案,但在真实数据集中有很多情况,其中整行都是英语,它仅将其识别为另一种语言的字符。是否有其他方法可以使用 quanteda 在 dfm 中的数据帧或标记中查找非英语行?

\n

r quanteda

0
推荐指数
1
解决办法
979
查看次数