移民公證文件翻譯[軟體程式種別]:
R
[程式問題]:
資料處置懲罰
[軟體熟習度]:
中(3個月到1年)
[問題論述]:
比來常在處置懲罰字串
發現本身會 翻譯 function 很不敷用
想多學點 function
我列出一些我經常使用 翻譯
但願能拋磚引玉
請列位高手能教我一些高招
[程式典範]:
媒介 :
R 翻譯字串處置 翻譯公司
要小心注意 character , factor , numeric 這三種物件的誤轉換和混用
factor 是一種很厭惡的物件 ,
因為它在轉成數字和字串的時候 ,
經常會釀成跟本來紛歧樣的工具 ,
建議資料處置懲罰的過程 翻譯公司
預設用 matrix 和 character 兩種而避免利用 data.frame
------------------------------------------------------------------
1.字串黏合
paste ("A" 翻譯公司"B",sep="") ---->>> "AB"
2.字串切割
strsplit("A.B",split=".",fixed=T) ---->>> "A" "B"
3.精確穩合
x <- c("AB","AA")
x %in% "AB" ---->>> TRUE FALSE
4.部份吻合 + (回傳 which)
x <- c("AB","AA")
grep("B",x) ---->>> 1
grep("A",x) ---->>> 1 2
grep("B",x,value=T) ---->>> "AB"
grep("B",x 翻譯公司value=T 翻譯公司invert=T) ---->>> "AA"
grep("C",x) ---->>> integer(0)
#若目標是要找 index , 建議改用 grepl
4-2.部份吻合 + (回傳判定式)
x <- c("AB","AA")
grepl("B",x) ---->>> TRUE FALSE
4-3.部分吻合 + (回傳位置) + (回傳??)
x <- c("BBB","AAA","CCB")
regexpr("B",x) ---->>> 1 -1 3 (第一次 "hit" 翻譯位置)
1 -1 1 (有沒有 "hit")
5.子字串
substr("human123456",start=1 翻譯公司stop=5) ---->>> "human"
!!留意!! 4-3 的 regexpr
與這個 substr 連系起來 ,
在寫 網頁Parser 翻譯時刻很好用
regexpr 能定義出 statr=幾多
所謂的網頁Parser
就是你去下載某些 html 檔案
檢視原始碼
然後找出你需要 翻譯資料
再找出一些能 cut 的劃定規矩
用 strsplit 搭配 TR , TD 之類的字串去切出你要 翻譯資料
6.特定字元代替 (1st hit)
x <- "AABB"
sub("A",replacement="C",x) ---->>> "CABB"
6-2.全部特定字元取代 (global hit)
x <- "AABB"
gsub("A" 翻譯公司replacement="C",x) ---->>> "CCBB"
7.計較字串長度
### 盡量別用這個 fuction
x <- c("A" 翻譯公司"AAA","AAAAA")
nchar(x) ---->>> 1 3 5
nchar(as.factor(x)) ---->>> 1 1 1
8.多重字元(串)貼合 (矩陣內)
x <- matrix(letters[1:6],2 翻譯公司3)
apply(x,1,paste,collapse="") ---->>> "ace","bdf"
apply(x 翻譯公司2,paste 翻譯公司collapse="") ---->>> "abc","def"
9. 字元反轉
x <- c("A B","*.")
sapply(lapply(strsplit(as.character(x) 翻譯公司 NULL), rev) 翻譯公司 paste, collapse="")
[1] "B A" ".*"
10.字元查抄
x <- c("A B" 翻譯公司"*.")
unique(unlist(strsplit(as.character(x),split="" 翻譯公司fixed=T)))
[1] "A" " " "B" "*" "."
-----------------------------------------------------------
Regular expression : 字串恍惚比對 , 或特定字母佈列模式的抓取
在R內
根基上分成3種
Basic regular expression (BRE) --> extended = FALSE
Extended regularexpression (ERE) --> extended = TRUE (預設)
perl-like (perl) --> perl = TRUE
雙冒號代表我測試過且成功
單冒號代表網路上抓下來或是測試失敗
--------------------------------------------------------------
通用部門
{,}
* :: {0, } 最少出現0次 翻譯公司 最多無窮多次
+ :: {1, } 1 無窮屢次
? :: {0 翻譯公司1} 0 1
[Aa] :: A 或 a
[^1-9] :: not 1:9
[1-9] :: 1:9
[a-z] :: a b c ... z
[A-Z] :: A B C ... Z
[a-zA-Z] :: 所有英文字母
[W-z] :: WXYZabc....z
[w-Z] :: 弗成利用!
(AB) :: 括號一次搜集多個字元 ### 一種延伸字串的寫法
舉例 :
x <- c("company" 翻譯公司"companies",)
可以用以下兩種寫法
1. grep("[company|companies]",x)
2. grep("compan(y|ies)",x)
第二種在大資料 翻譯時辰會比力快
$ :: 字尾限制
^ :: 字首限制
| :: "ABC|EFG" --> grep("ABC"or"DEF" 翻譯公司x)
. :: 隨意率性字元
-----------------------------------------------------
ERE , extended = TRUE
digit (數字)
\\d :: [0-9]
\\D :: [^0-9]
[[:digit:]] :: 同上
[^[:digit:]] :: 同上
blank (空白)
\\s :: 能切開 " " 或 "\t"
\\S :: 切開非空白及 tab 的字元
[[:blank:]] :: 同上
[^[:blank:]] :: 同上
AlphaBet + Digit (正常字元)
\\w :: [0-9a-zA-Z]
\\W :: [^0-9a-zA-Z]
[[:alnum:]] :: 同上
[^[:alnum:]] :: 同上
AlphaBet (英文字元)
[[:alpha:]] :: 同上
[^[:alpha:]] :: 同上
特殊符號
[[:punct:]] :: ! " # $ % & ' ( ) * + , - .
/ : ; < = > ? @ [ \ ] ^ _ ` { | } ~
[^[:punct:]] :: 英文字 翻譯公司 數字 (留意! , \t 和
都邑被切掉)
注意 ! 正斜線這個符號很輕易與其他 regular expr 攪渾
必需仔細搜檢 "\" 存在的字串
可印符號
[[:print]] :: 所有字元 (數字,字母,非凡符號,空白)
, \t , \001 除外
16進位字元
[[:xdigit:]] :: 16進位有關英文或數字
[0-9a-fA-F]
巨細寫英文字元
[[:upper:]] :: 大寫英文字元 [A-Z]
[^[:upper:]] :: 非大寫 [^A-Z]
[[:lower:]] :: 小寫 [a-z]
[^[:lower:]] :: ^[a-z]
注重 "\t" 照舊會被留下來
空白和換行等
[[:space:]] :: " " , \t 翻譯公司
, \f 翻譯公司 \r
(\f : 換行但不回到行頭)
(\r : 回到行頭並消弭此行內所有的文字)
P.S. 這兩種不經常使用 翻譯公司當豆常識便可
[[:graph:]] :: [A-Za-z0-9]再加[["punct"]]
----------------------------------------------------------
perl = TRUE
\\w : [A-Za-z0-9_]
\\W : [^A-Za-z0-9_]
\\s : [\t
\r\f]
\\S : [^\t
\r\f]
\\d : [0-9]
\\D : [^0-9]
----------------------------------------------------------
regular expression 工事中 (未完)
感覺這篇被我當筆記來用了
reference:
1. http://www.rtfiber.com.tw/~changyj/
2. http://www.stat.psu.edu/~dhunter/R/html/base/html/regex.html
----------------------------------------------------------
巨細寫切換
TRUTH <- c("Abc","ABC")
a <- gsub("(\\w)","\\L\\1",TRUTH,perl=TRUE) ---> "abc","abc"
b <- gsub("^(\\w)","\\U\\1",a 翻譯公司perl=TRUE) ---> "Abc" 翻譯公司"Abc"
同上 , 十分神秘的 Bug !?
T123 <- c("Tgfbr1","Cd320","Ndrg3","Aldoa","Bckdk" 翻譯公司"Tmed3","Hfe2")
> gsub( "(\\w)" 翻譯公司 "\\L\\1" 翻譯公司 T123 , perl=T)
[1] "LTLgLfLbLrL1" "LCLdL3L2L0" "LNLdLrLgL3"
[4] "LALlLdLoLa" "LBLcLkLdLk" "LTLmLeLdL3"
[7] "LHLfLeL2"
> gsub( "(\\w)" 翻譯公司 "\\L\\1" , T123 , perl=TRUE)
[1] "tgfbr1" "cd320" "ndrg3" "aldoa" "bckdk" "tmed3"
[7] "hfe2"
---------------------------------------
消除多餘空白
> x <- "Hey! Apple "
> gsub(" {2,}","" 翻譯公司x)
[1] "Hey! Apple" ### 容忍一個空白 翻譯公司 但兩個以上至無窮大則消弭
---------------------------------------
在處理夾雜字串與數字的資料矩陣 翻譯時刻
常常需要在 data.frame 和 matrix 之間切換
有時刻會字串會被一些預設的空白字元夾住
ex:
"1" 翻譯公司 "15" , "333"
經由轉換今後
" 1" , " 15" 翻譯公司 "333" (fit 最長字串的長度)
> DATA <- gsub("^ *| *$",as.matrix(DATA))
---------------------------------------
### 一些參考的 pattern
1. "^\\d+$" ### 純數字 翻譯欄位 ###
2. "^ *| *$" ### 字首字尾 翻譯空白(搭配 gsub) ###
3. "^[0][\\.]{0,1}[0]*$" ### "0" "0.0" "0.00" "0.000" "0.0000" ,
bug 是 "0." "00"
####################################################################
放一些 linux 下的好用指令
光用 R 來做字串處置不夠用
緣由在於若處置的檔案太大
光是讀進 R 就累死人
這邊主要是運用在檔案減肥
文字檔案
rs123\t0|1:0000\tAAAA
rs456\t1|0:0000\tBBBB
###################
橫向
grep [-w : word]
[-f : 給 pattern file]
[-F : 切確比對] ### 若要搜尋固定字串 , -F必下 (快超多)
1. cat 文字檔案|grep -w 'rs' ### 沒器械
2. cat 文字檔案|grep -w -F 'rs123' ### 出第一行
3. car 文字檔案|grep -w '^rs.*$' ### 二行皆出
###################
縱向
cut。-> 翻譯社|,-> 翻譯公司|的-> 翻譯 [-d : 用tab切開會是3個column的矩陣]
1. cut -d'\t' -f1 翻譯公司2 原檔 > 新檔 ### 留下 1 and 2 columns
###################
橫向
sed
1. sed -n '6 翻譯公司$p' 原檔 > 新檔 ### 從第六行入手下手 , print 至尾行
### 或可理解成, 把 1~5行切掉
2. sed 's/:\S*/HAHA/g' 原檔 > 新檔 ### s=取代 , g=global
### 把紅色 翻譯正規 pattern 庖代成綠色
###################
當檔案有 10000000 rows , 讀不進 R 怎辦?
就算讀進 R , 資料太大一向 SWAP 電腦動不了怎麼辦?
顛末一番苦戰
我建議以下的思慮體例
0. 先透過上述方式
直接在終端機把檔案減肥
1. 檔案列數 <- system("wc -l 檔案" 翻譯公司intern=TRUE)
LOOP <- ceiling(檔案列數 / 5000)
for(g in 1:LOOP) ### 用while可省前兩行
{ tmp <- read.table(檔案 翻譯公司skip=5000*(g-1) 翻譯公司nrow=5000) ### 但我只熟 for
expr(中心的各種處置懲罰)
write.table(tmp,g)
Sys.sleep(5) ### 給一點時候讓電腦回氣
}
2. system("cat 小檔案1 小檔案2 小檔案3 .... > 總檔案") ### 檔案 rbind()
雖然不是最快的方式
但 Over night 是必然可以把檔案處置懲罰完的
以上
本文出自: https://www.ptt.cc/bbs/Statistics/M.1277714037.A.2CC.html有關翻譯的問題歡迎諮詢天成翻譯社
- Dec 02 Sat 2017 23:37
[程式] R的字串處置
close
文章標籤
全站熱搜
留言列表
發表留言