删除 http 中的连字符但保留语料库中的连字符
Removing hyphens in http but preserving hyphenated words in corpus
我正在尝试修改一个词干提取函数,该函数能够 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 部分中删除 -
的罪魁祸首。
我不知道如何实现我们想要的输出,如果有人可以提供他们的见解,我们将不胜感激。
真正的罪魁祸首是 [[: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 demo。
注:
x = gsub("^ ", "", x)
和x = gsub(" $", "", x)
可以替换为trimws(x)
gsub("\b-\b(*SKIP)(*F)|[[:punct:]]", "", x, perl=TRUE)
删除单词字符之间的任何标点符号但连字符(您可以在 (*SKIP)(*F)
之前的部分进一步调整)
gsub("[^[:alnum:][:space:]'-]", " ", x)
是 str_replace_all(x, "[^[:alnum:][:space:]'-]", " ")
. 的基础 R 等价物
gsub("\h{2,}", "", x, perl=TRUE)
删除任意 2 个或更多水平空格。如果 "[ |\t]{2,}"
意味着匹配任何 2 个或更多空格,请在此处使用 \s
而不是 \h
。
我正在尝试修改一个词干提取函数,该函数能够 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 部分中删除 -
的罪魁祸首。
我不知道如何实现我们想要的输出,如果有人可以提供他们的见解,我们将不胜感激。
真正的罪魁祸首是 [[: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 demo。
注:
x = gsub("^ ", "", x)
和x = gsub(" $", "", x)
可以替换为trimws(x)
gsub("\b-\b(*SKIP)(*F)|[[:punct:]]", "", x, perl=TRUE)
删除单词字符之间的任何标点符号但连字符(您可以在(*SKIP)(*F)
之前的部分进一步调整)gsub("[^[:alnum:][:space:]'-]", " ", x)
是str_replace_all(x, "[^[:alnum:][:space:]'-]", " ")
. 的基础 R 等价物
gsub("\h{2,}", "", x, perl=TRUE)
删除任意 2 个或更多水平空格。如果"[ |\t]{2,}"
意味着匹配任何 2 个或更多空格,请在此处使用\s
而不是\h
。