如何检测语料库中的外来词?

时间:2016-04-29 12:44:24

标签: r text-mining

假设我正在使用tm包解析英语语料库,并且我会执行常规的清理步骤。

library(tm)
data("crude")
corpus <- Corpus(crude)

corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, content_transformer(removeWords)) stopwords("english"))
corpus <- tm_map(corpus, stripWhitespace)
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, stemDocument)
corpus <- tm_map(corpus, PlainTextDocument)

# text matrices
tdm <- TermDocumentMatrix(corpus)
dtm<- DocumentTermMatrix(corpus)

如何识别用不同于语料库的语言编写的单词?类似的问题面临Python here,但我的研究没有产生有趣的结果。

1 个答案:

答案 0 :(得分:1)

这不是一个完整的解决方案,但我觉得它可能有所帮助。我最近不得不做类似的事情,我不得不用汉字删除语料库中的单词。我最终使用带有正则表达式的自定义转换来删除其中包含非a-z 0-9字符的任何内容。

corpus <- tm_map(corpus, content_transformer(function(s){
  gsub(pattern = '[^a-zA-Z0-9\\s]+',
       x = s,
       replacement = " ",
       ignore.case = TRUE,
       perl = TRUE)
}))

例如,如果那里有中文单词,则会被删除。

gsub(pattern = '[^a-zA-Z0-9\\s]+',
     x = 'English 象形字 Chinese',
     replacement = "",
     ignore.case = TRUE,
     perl = TRUE)

输出:“英文中文”

如果你试图从像西班牙语这样的语言中删除单词,那就太麻烦了,因为有些字母有重音而有些字母没有。例如,这不起作用,但可能是一个开始。

gsub(pattern = '[a-zA-Z0-9]+[^a-zA-Z0-9\\s]+[a-zA-Z0-9]+',
     x = 'El jalapeño es caliente',
     replacement = "",
     ignore.case = TRUE,
     perl = TRUE)

输出:“El es caliente”

希望这有帮助!