Есть ли функция R, чтобы разбить предложение - PullRequest
0 голосов
/ 19 мая 2019

У меня есть пара неструктурированных предложений, как показано ниже. Описание ниже - имя столбца

Description

Automatic lever for a machine
Vaccum chamber with additional spare
Glove box for R&D
The Mini Guage 5 sets
Vacuum chamber only
Automatic lever only

Я хочу разделить это предложение от Col1 до Col5 и сосчитать вхождение, как показано ниже

Col1             Col2            Col3               Col4               
Automatic_lever lever_for        for_a               a_machine  
Vaccum_chamber  chamber_with     with_additional    additional_spare     
Glove_box       box_for          for_R&D            R&D 
The_Mini        Mini_Guage       Guage_5             5_sets 
Vacuum_chamber  chamber_only     only       
Automatic_lever lever_only       only       

Также из приведенных выше столбцов могу ли я встретить эти слова. Мол, Vaccum_chamber и Automatic_lever повторяются здесь дважды. Точно так же возникли другие слова?

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Вы можете использовать пакет ngram [1] для генерации вывода.

library(ngram)
x <- "Automatic lever for a machine"
ngram_asweka(x, min = 2, max = 2, sep = " ")
gsub(" ", "_", ngram_asweka(x, min = 2, max = 2, sep = " "))

Вывод: "Automatic_lever" "рычаг_for" "for_a" "a_machine"

Затем вы можете добавить последний элемент вручную.

  1. https://cran.r -project.org / web / packages / ngram / ngram.pdf
0 голосов
/ 19 мая 2019

Вот вариант tidyverse

df %>%
    rowid_to_column("row") %>%
    mutate(words = map(str_split(Description, " "), function(x) {
        if (length(x) %% 2 == 0) words <- c(words, "")
        idx <- 1:(length(words) - 1)
        map_chr(idx, function(i) paste0(x[i:(i + 1)], collapse = "_"))
    })) %>%
    unnest() %>%
    group_by(row) %>%
    mutate(
        words = str_replace(words, "_NA", ""),
        col = paste0("Col", 1:n())) %>%
    filter(words != "NA") %>%
    spread(col, words, fill = "")
## A tibble: 6 x 6
## Groups:   row [6]
#    row Description                Col1        Col2       Col3       Col4
#  <int> <fct>                      <chr>       <chr>      <chr>      <chr>
#1     1 Automatic lever for a mac… Automatic_… lever_for  for_a      a_machine
#2     2 Vaccum chamber with addit… Vaccum_cha… chamber_w… with_addi… additional…
#3     3 Glove box for R&D          Glove_box   box_for    for_R&D    R&D
#4     4 The Mini Guage 5 sets      The_Mini    Mini_Guage Guage_5    5_sets
#5     5 Vacuum chamber only        Vacuum_cha… chamber_o… only       ""
#6     6 Automatic lever only       Automatic_… lever_only only       ""

Объяснение: Мы разбиваем предложения в Description на один пробел " ", затем объединяем каждые два слова вместе с подходом со скользящим окном, следя за тем, чтобы в sentence всегда было нечетное нечетное количество слов; остальное - просто трансформация длиной в ширину.

Не красиво, но воспроизводит ожидаемый результат; вместо ручного подхода с раздвижными окнами вы также можете zoo::rollapply.


Пример данных

df <- read.table(text =
    "Description
'Automatic lever for a machine'
'Vaccum chamber with additional spare'
'Glove box for R&D'
'The Mini Guage 5 sets'
'Vacuum chamber only'
'Automatic lever only'", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...