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

How detect foreign words in Corpus?

假设我正在使用 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也面临类似的问题,但我的研究并没有产生有趣的结果。

这不是一个完整的解决方案,但我觉得它可能会有所帮助。我最近不得不做一些类似的事情,我不得不从带有汉字的语料库中删除单词。我最终使用带有正则表达式的自定义转换来删除其中包含非 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)

输出:"English Chinese"

如果您尝试从西班牙语等语言中删除单词,这会比较棘手,因为有些字母有重音,而有些则没有。例如,这并不完全有效,但也许是一个开始。

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"

希望对您有所帮助!