从R中的CSV提取文本

e5njpo68  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(117)

我有一个Excel.CSV文件,其中一列有对话的转录。每当说话者使用西班牙语时,西班牙语都写在括号内。
举个例子:
所以[通常]也许[我来这里一个新媒体]喜欢我锻炼和我喜欢要么去网上上课或亲自喜欢它取决于一天

理想情况下,我希望分别提取英语和西班牙语,这样一个文件将包含所有西班牙语单词,另一个文件将包含所有英语单词。
有什么想法吗?或者使用哪个函数/包?
编辑以添加:这个Excel工作表中大约有100个包含文本的单元格。我想我困惑的地方是如何将整个CSV视为"字符串"?
我不想把每个单元格都复制粘贴成一个"字符串"--我希望有人能上传整个CSV

z2acfund

z2acfund1#

要将CSV加载到R中,您可以使用readr::read_CSV(YOUR_FILE.CSV)。还有更多的选项,如果您使用RStudio中的“File -- Import Dataset -- From Text(readr)”菜单选项,其中一些选项是可用的。
假设你已经加载了数据,你可能需要依靠某种形式的“regex”来根据括号将文本解析成几个部分。有一些基本的R函数可以做到这一点,但是我发现stringrtidyverse元包的一部分)中的函数对此很有用。tidyr::separate_rows是一个将文本拆分成更多行的好方法。
在下面的正则表达式中,有一些成分:

  • (?=...)意味着在[之前拆分,但保留它。
  • \\[是我们引用[的方式,因为括号在正则表达式中有特殊的含义,所以我们需要对它们进行“转义”,将它们视为文字字符。
  • (?<=...)表示在]之后拆分,但保留它。
  • 最后一行中的|表示“或”

(当然,我仍然是一个正则表达式初学者,所以我希望有更简洁的方法来做到这一点。)
所以我们可以这样做:

df1 <- data.frame(text = "so [usualmente] maybe [me levanto como a las nueve y media] like I exercise and the I like either go to class online or in person like it depends on the day")

library(tidyverse)
df1 %>%
  mutate(orig_row = row_number()) %>%
  separate_rows(text, sep = "(?=\\[)") %>%
  separate_rows(text, sep = "(?<=\\] )") %>%
  mutate(language = if_else(str_detect(text, "\\[|\\]"), "Espanol", "English"),
         text = str_remove_all(text, "\\[|\\]"))

结果

# A tibble: 5 × 3
  text                                                                                               orig_row language
  <chr>                                                                                                 <int> <chr>   
1 "so "                                                                                                     1 English 
2 "usualmente "                                                                                             1 Espanol 
3 "maybe "                                                                                                  1 English 
4 "me levanto como a las nueve y media "                                                                    1 Espanol 
5 "like I exercise and the I like either go to class online or in person like it depends on the day"        1 English

相关问题