R tm软件包和西里尔文字

德米特里(Dmitriy Selivanov)

我正在尝试使用tm包使用俄语文本进行一些文本挖掘,但遇到一些问题。

预处理速度在很大程度上取决于编码。

library(tm)
rus_txt<-paste(readLines('http://lib.ru/LITRA/PUSHKIN/dubrowskij.txt',encoding='cp1251'), collapse=' ')
object.size(rus_txt)
eng_txt<-paste(readLines('http://www.gutenberg.org/cache/epub/1112/pg1112.txt',encoding='UTF-8'), collapse=' ')
object.size(eng_txt)
# text sizes nearly identical
rus_txt_utf8<-iconv(rus_txt, to='UTF-8')
system.time(rus_txt_lower<-tolower(rus_txt_utf8))
#3.17         0.00         3.19 
system.time(rus_txt_lower<-tolower(eng_txt))
#0.03         0.00         0.03
system.time(rus_txt_lower<-tolower(rus_txt))
#0.07         0.00         0.08

快40倍!在大型语料库上的差异高达500倍!

让我们尝试标记一些文本(在TermDocumentMatrix中使用此函数):

some_text<-"Несколько  лет  тому  назад  в  одном  из своих  поместий жил старинный
русской барин, Кирила Петрович Троекуров. Его богатство, знатный род и связи
давали ему большой вес в губерниях, где  находилось его имение.  Соседи рады
были угождать малейшим его прихотям; губернские чиновники трепетали  при его
имени;  Кирила  Петрович принимал знаки  подобострастия как надлежащую дань;
дом его  всегда был полон  гостями, готовыми тешить  его барскую праздность,
разделяя  шумные,  а  иногда  и  буйные  его  увеселения.  Никто  не  дерзал
отказываться от его приглашения, или в известные  дни не являться  с должным
почтением в село  Покровское."
scan_tokenizer(some_text)
#[1] "Несколько"  "лет"        "тому"       "назад"      "в"          "одном"      "из"         "своих"     
# [9] "поместий"   "жил"        "старинный"  "русской"    "барин,"     "Кирила"     "Петрович"   "Троекуров."
#[17] "Его"        "богатство," "знатный"    "род"        "и"          "св" 

糟糕...似乎R核心功能scan()将俄语小写字母'я'视为EOF。我尝试了不同的编码,但是我没有回答如何解决。

好吧,让我们尝试删除标点符号:

removePunctuation("жил старинный русской барин, Кирила Петрович Троекуров")
#"жил старинный русской барин Кирила Петрови Троекуров"

嗯...字母'ч'在哪里?使用UTF-8编码可以正常工作,但是花了一些时间才找到它。我也有关于removeWords()函数性能的问题,但是无法重现。主要问题是:如何阅读和标记带有字母“?”的文本?我的语言环境:

Sys.getlocale()
#[1] "LC_COLLATE=Russian_Russia.1251;LC_CTYPE=Russian_Russia.1251;LC_MONETARY=Russian_Russia.1251;LC_NUMERIC=C;LC_TIME=Russian_Russia.1251"
德米特里(Dmitriy Selivanov)

1)问题:如何阅读和标记带有字母“я”的文本?:尝试编写自己的令牌生成器并使用它。例如:

my_tokenizer <- function (x) 
{
  strsplit(iconv(x, to='UTF-8'), split='([[:space:]]|[[:punct:]])+', perl=F)[[1]]
}
 TDM <- TermDocumentMatrix(corpus,control=list(tokenize=my_tokenizer, weighting=weightTf, wordLengths = c(3,10)))

2)性能在很大程度上取决于...较低功能的性能我不知道这可能是一个错误,但是在每次调用它时,都必须使用enc2native将文本转换为本地编码。(当然,如果您的文字语言不是英语)。

doc.corpus <- Corpus(VectorSource(enc2native(textVector)))

此外,在对语料库进行所有文本预处理之后,您必须再次对其进行转换。(这是因为TermDocumentMatrix和tm包中的许多其他函数在内部使用tolower

tm_map(doc.corpus, enc2native)

因此,您的全部流程将如下所示:

createCorp <-function(textVector)
{
  doc.corpus <- Corpus(VectorSource(enc2native(textVector)))
  doc.corpus <- tm_map(doc.corpus, tolower)
  doc.corpus <- tm_map(doc.corpus, removePunctuation)
  doc.corpus <- tm_map(doc.corpus, removeWords, stopwords("russian"))
  doc.corpus <- tm_map(doc.corpus, stemDocument, "russian")
  doc.corpus <- tm_map(doc.corpus, stripWhitespace)
  return(tm_map(doc.corpus, enc2native))
}
my_tokenizer <- function (x) 
{
  strsplit(iconv(x, to='UTF-8'), split='([[:space:]]|[[:punct:]])+', perl=F)[[1]]
}
TDM <- TermDocumentMatrix(corpus,control=list(tokenize=my_tokenizer, weighting=weightTf, wordLengths = c(3,10)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R tm软件包和西里尔文字

来自分类Dev

在R中解码西里尔字母

来自分类Dev

从R导出西里尔字母?

来自分类Dev

无法加载R软件包“ tm.plugin.webmining”

来自分类Dev

西里尔文字验证

来自分类Dev

Meta和Metafor R软件包-

来自分类Dev

R tm软件包tm.plugin.tags停止工作

来自分类Dev

R tm软件包vcorpus:将语料库转换为数据帧时出错

来自分类Dev

R:TM软件包可从单列中查找词频

来自分类Dev

在R tm软件包的term-document矩阵中包括所有标记

来自分类Dev

如何重新连接到R tm软件包中的PCorpus?

来自分类Dev

R:TM软件包可从单列中查找词频

来自分类Dev

无法在R 3.3.2(macOS Sierra)上安装“ tm”,“ NLP”或“ slam”软件包

来自分类Dev

R的ImageJ软件包

来自分类Dev

R中的Snowball和SnowballC软件包是否不同?

来自分类Dev

软件包和R路径以及安装错误

来自分类Dev

使用Packrat和AppVeyor构建R软件包

来自分类Dev

R RecordLinkage软件包,了解alpha和beta错误

来自分类Dev

无法安装ggm软件包和R语言

来自分类Dev

软件包和R路径以及安装错误

来自分类Dev

调试和更改软件包中的R函数

来自分类Dev

R软件包:RCurl和curl软件包在Linux上安装失败

来自分类Dev

如何替换类似的西里尔字母和英文字符

来自分类Dev

R软件包CRAN注释,用于测试中的软件包依赖性和警告

来自分类Dev

R tm软件包:如何将文本与肯定参考词列表进行比较并返回肯定出现词的计数

来自分类Dev

扫描仪不想读取西里尔文字

来自分类Dev

俄语西里尔文字输入数据库

来自分类Dev

西里尔文字的源格式是什么?

来自分类Dev

如何找到西里尔文字(俄语字符)?

Related 相关文章

热门标签

归档