Quanteda R:如何删除令牌中“ /”中的数字或符号?

时间:2019-06-03 17:39:13

标签: r quanteda

我对Quanteda R中的语言预处理有疑问。我想基于某些文档生成文档功能矩阵。因此,我生成了一个语料库并运行以下代码。

data <- read.csv2("abstract.csv", stringsAsFactors = FALSE)
corpus<-corpus(data, docid_field = "docname", text_field = "documents")
dfm <- dfm(corpus, stem = TRUE, remove = stopwords('english'),
           remove_punct = TRUE, remove_numbers = TRUE, 
           remove_symbols = TRUE, remove_hyphens = TRUE)

当我检查dfm时,我注意到一些标记(#ml, @attribut, _iq, 0.01ms)。我宁愿拥有({ml, attribut, iq, ms)。

我以为我删除了所有符号和数字。为什么我仍然可以得到它们?

很高兴获得帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

要进行精确控制,您将需要自己通过模式替换来处理文本。使用 stringi (或 stringr ),您可以轻松地将Unicode类别替换为符号或标点符号。

请考虑以下示例。

txt <- "one two, #ml @attribut _iq, 0.01ms."

quanteda::tokens(txt, remove_twitter = TRUE, remove_punct = TRUE)
## tokens from 1 document.
## text1 :
## [1] "one"      "two"      "ml"       "attribut" "_iq"      "0.01ms"

这是删除可能表示“ Twitter”或其他社交媒体约定的特殊字符的简便方法。

更多底层控制:

# how to remove the leading _ (just to demonstrate)
stringi::stri_replace_all_regex(txt, "(\\b)_(\\w+)", "$1$2")
## [1] "one two, #ml @attribut iq, 0.01ms."

# remove all digits
(txt <- stringi::stri_replace_all_regex(txt, "\\d", ""))
## [1] "one two, #ml @attribut _iq, .ms."
# remove all punctuation and symbols
(txt <- stringi::stri_replace_all_regex(txt, "[\\p{p}\\p{S}]", ""))
## [1] "one two ml attribut iq ms"

quanteda::tokens(txt)
## tokens from 1 document.
## text1 :
## [1] "one"      "two"      "ml"       "attribut" "iq"       "ms"

您的目标是什么,我(部分)在猜测。