Цикл gsub () заменяет элементы из списка из нескольких слов в корпус - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть 233 документа ( ecb_corpus ) и список из нескольких слов ( ecb_final ).Я хочу заменить все бриграммы и триграммы в моем списке из нескольких слов в моём корпусе.

Это мой список из нескольких слов:

1   euro_area
2   monetary_policy
3   price_stability
4   interest_rates
5   second_question
6   medium_term
7   first_question
8   central_banks
9   inflation_expectations
10  structural_reforms

Мне просто удалось сделать это для одного случая с помощью gsub :

ecb_ready <- gsub(pattern = "interest rate", replacement= "interest_rates", ecb_corpus, ignore.case = TRUE, perl = FALSE, fixed = TRUE)

Чтобы получить требуемые результаты, в pattern должно быть любое слово корпуса ( ecb_corpus) и замена мой список мультислов ( ecb_final ).Я пытался полностью безуспешно зацикливаться (довольно плохо знаком с R и, к сожалению, пока не смог их сделать).

Есть ли кто-нибудь, кто может помочь мне зациклить его?

Большое спасибо!

1 Ответ

1 голос
/ 28 сентября 2019

stringr::str_replace_all() может сделать это напрямую.Это то, что файл справки пытается кратко связать с «Vectorized over string, pattern и replacement

Здесь я предполагаю, что ваш корпус хранится в символьном векторе,но это может быть и список персонажей.Если это сложнее (например, в JSON ...), то вам может потребоваться выполнить некоторую предварительную обработку, прежде чем передать его в str_replace_all().

. Обратите внимание, что в результате отбрасываются имена входных элементов, ноих было бы легко восстановить.

library(tidyverse)

(ecb_corpus <- c(
  doc_1 = c("lorem ipsum interest rate gobbledygook"),
  doc_2 = c("lorem dolor central bank foobar")
))
#>                                    doc_1 
#> "lorem ipsum interest rate gobbledygook" 
#>                                    doc_2 
#>        "lorem dolor central bank foobar"

replacements <- c("euro_area",
                  "monetary_policy",
                  "price_stability",
                  "interest_rates",
                  "second_question",
                  "medium_term",
                  "first_question",
                  "central_banks",
                  "inflation_expectations",
                  "structural_reforms")

targets <- replacements %>% str_replace_all("_", " ") %>% str_remove("s$")

(replacement_pairs <- replacements %>% set_names(targets))
#>                euro area          monetary policy          price stability 
#>              "euro_area"        "monetary_policy"        "price_stability" 
#>            interest rate          second question              medium term 
#>         "interest_rates"        "second_question"            "medium_term" 
#>           first question             central bank    inflation expectation 
#>         "first_question"          "central_banks" "inflation_expectations" 
#>        structural reform 
#>     "structural_reforms"

(ecb_ready <- ecb_corpus %>% str_replace_all(replacement_pairs))
#> [1] "lorem ipsum interest_rates gobbledygook"
#> [2] "lorem dolor central_banks foobar"

Создано в 2019-09-28 пакетом представитель (v0.3.0)

...