Как удалить слова, начинающиеся с цифр, из токенов? - PullRequest
1 голос
/ 03 мая 2020

Как удалить слова, начинающиеся с цифр, из токенов в quanteda? Примеры слов: 21-е, 80-е, 8-е, 5k, но они могут быть совершенно разными, и я не знаю их заранее.

У меня есть фрейм данных с предложениями engli sh. Я преобразовал его в корпус с помощью Quanteda. Затем я преобразовал корпус в токены и провел некоторую очистку, например remove_punct, remove_symbols, remove_numbers и т. Д. 1010 *. Однако функция remove_numbers не удаляет слова, начинающиеся с цифр. Я хотел бы удалить такие слова, но я не знаю их точную форму - это может быть, например, 21-е, 22-е и т. Д. c.

library("quanteda")

data = data.frame(
  text = c("R is free software and 2k comes with ABSOLUTELY NO WARRANTY.",
           "You are welcome to redistribute it under 80s certain conditions.",
           "Type 'license()' or 21st 'licence()' for distribution details.",
           "R is a collaborative 6th project with many contributors.",
           "Type 'contributors()' for more information and",
           "'citation()' on how to cite R or R packages in publications."),
  stringsAsFactors = FALSE
)

corp = corpus(data, text_field = "text")
toks = tokens(corp, remove_punct = TRUE, remove_symbols = TRUE, remove_numbers = TRUE,
              remove_separators = TRUE, split_hyphens = TRUE)
dfmat = dfm(toks, tolower = TRUE, stem = TRUE, remove = stopwords("english"))

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Вам просто нужно явно удалить их, так как они не управляются remove_numbers = TRUE. Просто используйте простое регулярное выражение, которое ищет несколько цифр перед символом. В приведенном ниже примере я ищу последовательность цифр от 1 до 5 (например, (?<=\\d{1,5}). Вы можете настроить два числа для точной настройки вашего регулярного выражения.

Вот пример, который использует только quanteda , но явно добавляет tokens_remove().

library("quanteda")
#> Package version: 2.0.0
#> Parallel computing: 2 of 8 threads used.
#> See https://quanteda.io for tutorials and examples.
#> 
#> Attaching package: 'quanteda'
#> The following object is masked from 'package:utils':
#> 
#>     View

data = data.frame(
  text = c("R is free software and 2k comes with ABSOLUTELY NO WARRANTY.",
           "You are welcome to redistribute it under 80s certain conditions.",
           "Type 'license()' or 21st 'licence()' for distribution details.",
           "R is a collaborative 6th project with many contributors.",
           "Type 'contributors()' for more information and",
           "'citation()' on how to cite R or R packages in publications."),
  stringsAsFactors = FALSE
)

corp = corpus(data, text_field = "text")
toks = tokens(corp, remove_punct = TRUE, remove_symbols = TRUE, remove_numbers = TRUE,
              remove_separators = TRUE, split_hyphens = TRUE)
toks = tokens_remove(toks, pattern = "(?<=\\d{1,5})\\w+", valuetype = "regex" )
dfmat = dfm(toks, tolower = TRUE, stem = TRUE, remove = stopwords("english"))

Создан в 2020-05-03 представьте пакет (v0.3.0)

2 голосов
/ 03 мая 2020

Этот тип проблемы требует поиска шаблона. Вот решение, использующее gsub:

text = c("R is free software and 2k comes with ABSOLUTELY NO WARRANTY.",
           "You are welcome to redistribute it under 80s certain conditions.",
           "Type 'license()' or 21st 'licence()' for distribution details.",
           "R is a collaborative 6th project with many contributors.",
           "Type 'contributors()' for more information and",
           "'citation()' on how to cite R or R packages in publications.")

text1<-gsub("[0-9]+[a-z]{2}","",text)
# 
# [1] "R is free software and 2k comes with ABSOLUTELY NO WARRANTY."     "You are welcome to redistribute it under 80s certain conditions."
# [3] "Type 'license()' or  'licence()' for distribution details."       "R is a collaborative  project with many contributors."           
# [5] "Type 'contributors()' for more information and"                   "'citation()' on how to cite R or R packages in publications."  

Подробнее см. Ниже вопрос:

Как мне работать со специальными символами, такими как \ ^ $.? * | + ( ) [{в моем регулярном выражении?

https://rstudio.com/wp-content/uploads/2016/09/RegExCheatsheet.pdf

...