Удаление дефисов в http, но сохранение переносимых слов в корпусе - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь изменить основную функцию, которая может: 1) удалить дефисы в http (которые появились в корпусе), но, тем временем, 2) сохранить дефисы, которые появились в значимых выражениях через дефис (например, отнимающие много времени, стоимость)- непомерно и т. д.).Я действительно задавал похожие вопросы несколько месяцев назад в другой ветке вопросов , код выглядит так:

# load stringr to use str_replace_all
require(stringr)

clean.text = function(x)
{
  # remove rt
  x = gsub("rt ", "", x)
  # remove at
  x = gsub("@\\w+", "", x)
  x = gsub("[[:punct:]]", "", x)
  x = gsub("[[:digit:]]", "", x)
  # remove http
  x = gsub("http\\w+", "", x)
  x = gsub("[ |\t]{2,}", "", x)
  x = gsub("^ ", "", x)
  x = gsub(" $", "", x)
  x = str_replace_all(x, "[^[:alnum:][:space:]'-]", " ")
  #return(x)
}

# example
my_text <- "accident-prone"
new_text <- clean.text(text)
new_text
[1] "accidentprone"

, но не смог получить удовлетворительный ответ, затем я переключил свое внимание на другие проекты, пока не возобновил работу над этим.Похоже, что "[^[:alnum:][:space:]'-]" в последней строке блока кода является виновником, который также удалил - из части корпуса, не относящейся к http.

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

1 Ответ

0 голосов
/ 05 октября 2018

Фактическим виновником является шаблон удаления [[:punct:]], который соответствует - в любом месте строки.

Вы можете использовать

clean.text <- function(x)
{
  # remove rt
  x <- gsub("rt\\s", "", x)
  # remove at
  x <- gsub("@\\w+", "", x)
  x <- gsub("\\b-\\b(*SKIP)(*F)|[[:punct:]]", "", x, perl=TRUE)
  x <- gsub("[[:digit:]]+", "", x)
  # remove http
  x <- gsub("http\\w+", "", x)
  x <- gsub("\\h{2,}", "", x, perl=TRUE)
  x <- trimws(x)
  x <- gsub("[^[:alnum:][:space:]'-]", " ", x)
  return(x)
}

Затем,

my_text <- "  accident-prone  http://www.some.com  rt "
new_text <- clean.text(my_text)
new_text 
## => [1] "accident-prone"

См. Демоверсию R .

Примечание:

  • x = gsub("^ ", "", x) и x = gsub(" $", "", x) можно заменить на trimws(x)
  • gsub("\\b-\\b(*SKIP)(*F)|[[:punct:]]", "", x, perl=TRUE) удаляет любые знаки препинания, НО дефисы между символами (вы можете отрегулировать это далее в части до (*SKIP)(*F))
  • gsub("[^[:alnum:][:space:]'-]", " ", x) - это базовый эквивалент R для str_replace_all(x, "[^[:alnum:][:space:]'-]", " ").
  • gsub("\\h{2,}", "", x, perl=TRUE) удалить 2 или более горизонтальных пробела.Если под "[ |\t]{2,}" вы подразумевали совпадение с любыми двумя или более пробелами, используйте \\s вместо \\h здесь.
...