阅读R中的泰米尔语料库

时间:2016-10-01 05:21:56

标签: r unicode tm tamil

我使用R作为在线课程项目工作的一部分,构建了一个基本的单词预测产品。我想扩展它以预测泰米尔语阶段的下一个词。我曾使用过HC Corpora网站的泰米尔语语料库样本。我已将其读入R并创建了一个tm()语料库。

testData <- "திருவண்ணாமலை, கொல்லிமலை, சதுரகிரி என அவன் சித்தர்களை பல 
        இடங்களில், மலைகளில், குகைகளில், இன்னும் பல ரகசிய இடங்களில்
        அவன் சித்தர்களை சந்தித்து பல நம்பமுடியாத சக்திகளைப்
        பெற்றுவிட்டான் என்று சொல்லிக் கொள்கிறார்கள்"
getUnigrams <- function(x) {NGramTokenizer(x, 
                            Weka_control(min=1, max=1))}
unigrams <- DocumentTermMatrix(VCorpus(VectorSource(testData)),
                               control=list(tokenize=getUnigrams))
unigramsList <- data.frame(slam::col_sums(unigrams))
head(unigramsList, 3)

>         slam..col_sums.unigrams.
அவன்                            2
இடங்களில்                        2
இன்னும்                          1

实际的泰米尔语单词是此数据框的行名称,并在屏幕上正确显示。但是,当我尝试将它作为列添加到它们各自的计数时,结果数据框不会在列unigramsList $ word1中正确显示泰米尔语单词。它将其显示为基础泰米尔语单词的unicode字符。

    unigramsList$word1 <- rownames(unigramsList) ## Encoding issues arise from here!!!
head(unigramsList, 3)

slam..col_sums.unigrams.
அவன்                            2
இடங்களில்                        2
இன்னும்                          1
                                                                           word1
அவன்                                             <U+0B85><U+0BB5><U+0BA9><U+0BCD>
இடங்களில் <U+0B87><U+0B9F><U+0B99><U+0BCD><U+0B95><U+0BB3><U+0BBF><U+0BB2><U+0BCD>
இன்னும்                   <U+0B87><U+0BA9><U+0BCD><U+0BA9><U+0BC1><U+0BAE><U+0BCD>
> 

我尝试继续使用这些unicode字符并构建2,3克和4克的n-gram并将其用于我的预测。但此列上的所有后续操作仅显示为原始unicode。我希望能够以他们的本土泰米尔语字符查看和预测它们。

我的会话信息如下:

> sessionInfo()
R version 3.2.5 (2016-04-14)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 7 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RWeka_0.4-29  tm_0.6-2      NLP_0.1-9     stringi_1.0-1 stringr_1.0.0

loaded via a namespace (and not attached):
[1] magrittr_1.5      parallel_3.2.5    tools_3.2.5       slam_0.1-37      
[5] grid_3.2.5        rJava_0.9-8       RWekajars_3.9.0-1

1 个答案:

答案 0 :(得分:1)

我设法破解了上面的解决方案,因此考虑将其发布给对此主题感兴趣的任何人。

a)我没有将n-gram保存为Windows上的csv文件,而是将它们保存为R二进制格式(使用save()和load()函数)。我使用read.csv()并将fileEncoding选项设置为UTF-8保存了生成的n-gram,但即使在Shiny上部署它之后它仍然没有帮助。

b)在Shiny应用程序上部署和测试,这些应用程序在Linux平台上运行,因此能够正确显示unicode中的泰米尔语字符。在Windows上本地测试无效,因为字符显示为原始unicodes,例如等等。

感谢stringi的作者Marek Gagolewski,感谢有关shineio的建议,这有助于我在闪亮的Linux平台上进行部署和测试。

如果您有兴趣,可以使用以下链接查看产品:https://periasamyr.shinyapps.io/predictwordml/

此致