RSwath: The R Interface to SWATH

RSwath: The R Interface to Swath ผมเอา SWATH (https://code.google.com/archive/p/swath/) มาทำเป็น r-package สำหรับใช้ใน R บน Windows ครับ

ตอนนี้มันยังเป็นรุ่นเก่าอยู่ (swath 0.3.4) ครับ

SWATH ก็เป็นตัวแบ่งคำภาษาไทยอีกตัวหนึ่งที่พัฒนาโดยท่าน Phaisarn Charoenpornsawat และท่าน Theppitak Karoonboonyanan ครับ
สนใจใช้งานก็ไปที่ https://github.com/slphyx/RSwath

การใช้งานก็เริ่มจากติดตั้งจาก github ด้วยคำสั่ง

library("devtools")
install_github("slphyx/RSwath")

จากนั้นก็เรียกใช้งาน

library("RSwath")

การใช้งานกับไฟล์ข้อความที่เป็นภาษาไทยที่ต้องการแบ่งสมมุติว่าชื่อ testTH.txt แล้วต้องการให้ไฟล์ที่แบ่งคำแล้วด้วย SWATH ชื่อ testTHX.txt ก็เพียงพิมพ์

rswath(inputfile="testTH.txt",outputfile="testTHX.txt")

ตัวอย่างไฟล์ที่ใช้กับswathกับผลลัพธ์ที่ได้

 

 

 

 

ggplot กับฟอนท์ภาษาไทย

มีคนถามมาว่าถ้าจะพิมพ์ภาษาไทยในกราฟที่สร้างจาก ggplot แล้ว save เป็น pdf ต้องทำอย่างไร เพราะที่ทำมามันไม่แสดงผลอะไรเลย

วิธีที่ง่ายที่สุด(ที่ผมใช้อยู่)ตอนนี้ก็คือใช้ package ที่ชื่อ extrafont ช่วยครับ ตามนี้

  1. ติดตั้ง package ที่ชื่อว่า extrafont หลังจากนั้นก็ load package ด้วยคำสั่ง library
  2. ทำการ import fonts ที่มีในคอมพิวเตอร์ด้วยเพื่อสร้างฐานข้อมูล fonts ของ package นี้ ด้วยคำสั่ง font_import() ทำครั้งแรกนี้ครั้งเดียวครับ อาจจะใช้เวลานานหน่อย แต่ถ้ามีการลงฟอนท์เพิ่มก็ต้องมารันคำสั่งนี้อีกนะครับ
  3. ลองพิมพ์คำสั่ง fonts() ดูครับว่ามัน import ฟอนท์อะไรเสร็จไปแล้วบ้าง
  4. จากนั้นก็ทำการ load fonts เพื่อเอามาใช้กับเอกสาร pdf ที่จะสร้างครับ ด้วยคำสั่ง loadfonts()  (คราวหน้าก็ไม่ต้องใช้คำสั่งนี้ครับ สามารถเรียก library(extrafont) ได้เลย มันจะทำให้อัตโนมัต) โดยค่าที่ตั้งไว้แล้ว(default) มันจะโหลดไปใช้กับตัวpdfครับ แต่ถ้าอยากจะให้มันแสดงผลและใช้ได้กับพวกไฟล์ภาพอย่าง png ก็ตั้งมีการเซ็ตค่าพารามิเตอร์ device=”win”ครับ สำหรับใช้งานบนวินโดว์ (ลองดูในตัวอย่างcodeที่ผมพิมพ์นะครับ)
  5. ทดลองสร้างกราฟด้วย ggplot แล้ว save ป็น pdf
library(extrafont)
library(ggplot2)

loadfonts(device="win")
loadfonts(device="pdf")
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
  ggtitle("ประสิทธิภาพของเชื้อเพลิง") +
  xlab("น้ำหนัก (x1000 ปอนด์)") + ylab("ไมล์ต่อแกลอน") +
  theme(text=element_text(size=16, family="TH Mali Grade 6"));
p
ggsave("THfont_ggplot.pdf", plot=p,  width=4, height=4, device = cairo_pdf)

สร้างเอกสารภาษาไทย กับ RMarkdown

ถ้าจะสร้างเอกสารที่เป็น pdf ด้วย rmarkdown (จริงๆแล้วก็ต้องบอกว่า Knit) ใน RStudio ก็ต้องมี latex ติดตั้งลงบนเครื่องก่อน สำหรับท่านใดที่ตัดสินใจว่าจะลงผมแนะนำว่าให้ใช้ texlive ครับ และเพื่อตัดปัญหาว่าจะมีปัญหาเรื่อง package ต่างๆของ latex ผมแนะนำว่าก็ลงแบบทุกอย่างเลยแล้วกันครับ กินเนื้อที่ประมาณ 3 GB ครับ อีกอย่างจากประสบการณ์เราก็ไม่ค่อยอัพเดท latex กันบ่อยอยู่แล้ว แต่ถ้าคิดว่าเอาแค่เล็กๆก็พอ งั้นผมขอแนะนำ tinytex แล้วกันครับ วิธีติดตั้งก็ง่ายมาก ตามนี้เลยครับ

install.packages('tinytex')
tinytex::install_tinytex() 

ผมใช้ rmarkdown สร้างเอกสารเป็น pdf อยู่บ่อยครั้งแต่ส่วนมากจะเป็นภาษาอังกฤษก็มีช่วงอาทิตย์ที่ผ่านมานี้ต้องทำเป็นภาษาไทยด้วย ก็เลยอยากแชร์อะไรบ้างครับ

code หลักๆ สำหรับให้ rmarkdown  มันสร้างภาษาไทยเป็น pdf ได้ก็เพียง load package ที่จำเป็นสำหรับภาษาไทยใน latex ครับ โดยผมแนะนำว่าเพื่อความง่ายก็ขอให้เข้ารหัสสำหรับเอกสารหรือไฟล์ .Rmd เป็นแบบ Unicode หรือ UTF-8 ครับและก็ใช้ xelatex เป็นตัวโปรแกรมหลักสำหรับ latex ครับ เพราะมันใช้ได้ดีกับภาษาไทยและก็ไม่ต้องกังวลเรื่องการตัดคำครับเพราะมันสามารถทำได้กับภาษาไทยเราครับ ตัวอย่าง code อยู่ด้านล่างนี้ครับ หลักก็มีแค่ส่วนของ head-includes:

---
title: "ทดสอบ" 
header-includes:
  - \usepackage{xunicode} 
  - \usepackage{xltxtra}
  - \defaultfontfeatures{Scale=MatchLowercase} 
  - \setmainfont[Scale=1.0]{Angsana New} 
  - \XeTeXlinebreaklocale "th"
  - \XeTeXlinebreakskip = 0pt plus 1pt 
output: 
   pdf_document: 
     latex_engine: xelatex
---

## R Markdown ภาษาไทย
อ ะ ไ ร สั ก อ ย่ า ง

มันต้องมีอะไรสักอย่างในจักรวาลนี้

ที่พลัดหลงไปจากมิติกาลเวลา

อะไรสักอย่างที่โคลัมบัสและยูลิซีสตกสำรวจ

อะไรสักอย่างที่นักดาราศาสตร์กรีกและอาหรับมิได้ค้นพบ

อะไรสักอย่างที่ศาสดาของโลกลืมเทศนาสั่งสอน

อะไรสักอย่างที่ขาดหายไประหว่างหลุมดำ

..

```{r cars}
summary(cars)
```

ผลลัพท์ที่ได้ก็ประมาณนี้ครับ

ส่วนใครที่ต้องการสร้างเอกสารแบบแปลกๆสวยๆ ผมอยากแนะนำให้ศึกษา latex เพิ่มครับ แล้วจะรู้ว่าใช้ rmarkdown สร้างเอกสารlatex สะดวกจริงๆ

###

มีคนถามมาว่าในกรณีที่ใช้ rmarkdown สร้างเอกสาร html ที่ chunk ของคำสั่ง r มีการ return ค่าที่เป็นภาษาไทย อย่างตัวอย่างด้านล่างนี้มันไม่มีข้อความอะไรออกมาเลย จะทำอย่างไรถึงแม้จะใช้ Sys.setlocate(locale=”Thai”) หรือ rmarkdown::render(“file.Rmd”,enconding = “UTF-8”) แล้วก็ตาม (กรณีใช้ R ใน Windows)

วิธีที่พอจะช่วยแก้ปัญหานี้ได้บ้างระหว่างรอการแก้จากผู้พัฒนาโดยตรงที่ผมแนะนำก็คือว่าแทนที่จะ ให้มัน return ภาษาไทยออกมา ก็ให้มัน return เป็นภาษาอังกฤษ แล้วค่อยแทนที่ภาษาอังกฤษนั้นด้วยภาษาไทยที่ต้องการในไฟล์ html ที่ถูกสร้างขึ้นมาโดยตรงลองดูตัวอย่างด้านล่างนี้ครับ

ในตัวอย่างนี้ข้อความที่จะแทนที่เป็นภาษาไทยถูกเก็บไว้อีกไฟล์ (“txt4replace.R”)

library(rmarkdown)
library(stringr)

writeoutput <- function(msg,filename) {
 con <- file(filename, "w")
 tryCatch({
 cat(iconv(msg, to="UTF-8"), file=con, sep="\n")
 },
 finally = {
 close(con)
 })
}

ReplaceHTML <- function(filename,outfile) {
 htmlcode <- readLines(filename, encoding = "UTF-8")
 #read TH txt
 source("txt4replace.R")
 newhtmlcode <- str_replace_all(htmlcode,txt4replace ) 
 writeoutput(msg = newhtmlcode,filename = outfile)
}


#generate html
render("myfile.Rmd")

#replace TH txt
suppressWarnings(ReplaceHTML("myfile.html","new_myfile.html"))
browseURL("new_myfile.html")

ตัวอย่างไฟล์ "txt4replace.R"

THtext <- c("ทดสอบ","โรงเรียน","เที่ยว")
Encoding(THtext) <- "UTF-8"
txt4replace<-c("Xtxt1" = THtext[1],
 "Xtxt2" = THtext[2],
 "Xtxt3" = THtext[3])

หรือจะใช้วิธีบังคับให้มันใช้ UTF-8 ตั้งแต่ตอน render เลยก็ได้เช่น

```{r}
enc <- function(txt,...) iconv(txt, to="UTF-8")
```
```{r, echo=FALSE, results='asis', render= enc}
fn ที่ return ภาษาไทย
```

ทดสอบคำสั่ง WordCloud ของ Wolfram Mathematica กับภาษาไทย

Wolfram Mathematica มีคำสั่ง WordCloud ที่จะช่วยสร้างเมฆของกลุ่มคำที่มีการใช้บ่อยๆจากข้อความที่เราใส่เข้าไป โดยที่คำที่มีการใช้บ่อยที่สุดจะมีตัวโตที่สุด และขนาดของคำอื่นก็ลดลงตามความถี่ของการใช้หรือตามความถี่ทีีปรากฏในข้อความที่เราใส่เข้าไป

ตัวอย่างเช่นที่ http://blog.wolfram.com/2015/09/18/the-republican-presidential-debate-clouds-round-2/ แสดงคำพูดที่ผู้สมัครลงชิงตำแหน่งประธานาธิบดีของพรรครีพับบริกันพูดดีเบตกัน

cloud1

คำสั่ง WordCloud นี้ใช้ได้ดีกับภาษาอังกฤษครับ ไม่มีอะไรมาก เพียงcopyมาใส่ใน Mathematica ได้เลย เพราะ Mathematica จะรู้วิธีการแบ่งคำภาษาอังกฤษอยู่แล้ว แต่ถ้าจะใช้กับภาษาไทยเราต้องทำการแบ่งเว้นวรรคแต่ล่ะคำมาเองก่อนถึงจะใช้ได้ครับ ในตัวอย่างนี้ผมลองใช้บริการตัดคำ(แบ่งคำ)ภาษาไทยเราจากเวบ http://www.sansarn.com/lexto/ ครับ ซึ่งผลที่ได้ก็โอเคครับ

Thai Latex บน Fedora 14 LXDE Desktop

การติดตั้ง Thai Latex บน Fedora 14 LXDE Desktop

วิธีนี้ต้องมี gcc compiler ก่อนนะครับ ซึ่งติดตั้งได้เลยจากตัว Add/Remove Software

ก่อนอื่นต้องไป download ไฟล์พวกนี้ก่อนนะครับ

  1. ftp://linux.thai.net/pub/ThaiLinux/software/libthai/libdatrie-0.2.4.tar.gz
  2. ftp://linux.thai.net/pub/thailinux/software/thailatex/thailatex-0.4.4.tar.gz
  3. ftp://linux.thai.net/pub/thailinux/software/swath/swath-0.4.0.tar.gz

หลังจากนั้นก็แตกไฟล์พวกนี้ออกโดยที่อยู่folder ของใครของมัน

จากนั้นก็เริ่มติดตั้งโดยเริ่มที่ตัว libdatrie ก่อนครับ

ที่ terminal ก็เปลี่ยน folder ไปที่ folder ของ libdatrie จากนั้นก็พิมพ์

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

ตามด้วย

./configure

และ

make install

หลังจากนั้นก็ติดตั้ง swath โดยทำเช่นเดียวกันครับคือพิมพ์ ./configure แล้วตามด้วย make install

ต่อด้วย thailatex ครับทำเช่นเดียวกันกับ swath

เป็นอันว่าเสร็จแล้วครับ ผมใช้งานได้ไม่มีปัญหาครับ

ผมใช้ TexMakerX ในการแก้ไขไฟล์ Latex ครับ อาจต้องมีการปรับแต่งให้มันอ่านและบันทึกภาษาไทยโดยไปที่ Edit -> Setup Encoding… แล้วเลือก TIS-620 ครับ

%d bloggers like this: