2017-06-04 33 views
1

我正在尝试处理日语中的UTF8编码文件。在UTF-8编码日本语料库上的R处理

我没有在Python预处理,一切都OK(标记化/搭配/停用词),我获得了以下一种字符串:

リカーショップ 寄っ たら サントリー 山崎 響が 入荷_し て た 

然而,当我试图读取预处理文件(一UTF-8编码CSV)中的R运行一个STM,我正在此格式:

<U+30AB><U+30F4><U+30A1> <U+4E00><U+676F> <U+767D> <U+8D64> <U+4E00><U+676F> <U+89D2>_<U+30CF><U+30A4><U+30DC><U+30FC><U+30EB> <U+5C71><U+5D0E> <U+30CF><U+30A4><U+30DC><U+30FC><U+30EB> <U+591A><U+304B><U+3063> <U+305F> <U+304B> 

我第一次尝试不同的导入功能,但具有相同的结果:

df <- read.xlsx2(corpus_filename,sheetIndex=1,header=TRUE) 
df <-read_csv(corpus_filename,locale = locale(encoding = "UTF-8")) 

然后我想我可以运行stm并返回到python重新编码生成的文件,但在尝试编码/解码功能半天后,我不得不承认我完全卡住了。

任何人都可以帮助我吗? 非常感谢。

编辑: 这里是我的蟒预处理(在UTF8编码)=>的CSV输出的前20行是我给我ř程序

865781289361604609;コークハイ 山崎 年 酔っ払い なう 
856448528331161600;リカーショップ 寄っ たら サントリー 山崎 響が 入荷_し て た 
815926577556897792;おと なしく 山崎 んどき ます w まあ 竹鶴 結局 手 にいれ まし_た しよし ます w 
769384649143361536;再 来週 山崎_蒸留 所 行く アド しか_ない 
860119818296414208;非売 品 山崎 仕込_み 水 水割り 最高 です_ね 
759768684457975809;ゴースト 観 た 面白 かっ_た ラスト 個人_的 驚い た 最高 だろ_う こういう 時期っ て 絶対 ある よね ラスト 切り 口 俺 好き 山崎 ハイボール うまし 
807576715203444736;山崎 ロック う まいわぁ 
833936664938500098;ある お店 飲み_放題 ウイスキー 以前 山崎 白州 ブラックニッカ 角 変わっ てる 大人 事情っ て やつ か 
744757755177664512;父 日 サントリー 山崎 プレゼント しよ_う として 円 しか なかっ_た 竹鶴 あげ た 
744850084580384768;今度 山崎 か 響買 おう 
742576211759628288;i サントリー 山崎_蒸溜 所 島本_町 大阪府 
862666125909278720;山崎 年 だねー 杯 ご_馳走 する_よ 
865932271169159172;山崎 年 神々しい 
788394825494175745;山崎 年 よき て 
833282834412376064;山崎_蒸留 所見 学ツアー 千円 部 大阪 ダメダメ 団 向け テイスティング 
823471399289253888;おと とい 山崎 年 ごち そう なっ たん_だけ どめっっっちゃ 美味_しく て 家 帰っ_て 調べ たら 定価 でも く らい する 知っ て ヒェッ て なっ た いつも 穏やか な 愛する あまり 相手 薬漬け 快楽 漬け て 全裸 首輪 つけ て 自室 監禁 て 泣き ながら 犯す 攻め 見 た 時 よう 
775381740160299008;次買う ウイスキー 山崎 しよ_う とり_あえ ず 山崎 美味い だ 
862137645895262209;山崎 シェリーカスク 一 回 飲ん_でみ たいけど 値段 ぶっ 飛ん て ヤヴァイ 年 万く らい とか な 
741984119035334660;山崎 ハイボール なう 
768400284754190337;久々_に 自覚 する くらい 酔っ ぱらっちゃっ た ぬ 山崎 ボトル 一本 飲ませ て 頂い た よ あり たい ね 
839372940374237184;ウイスキー ある_けど 家 やつ 美味_しく ない ー 山崎 響き 好き 
744138456025042944;山崎 ロック 飲み_ながら 妹ちょ 見る 
779968612224217089;無駄 いい ホテル 笑知っ てる と_思う けど 山崎 響飲ん だ 翌日 体臭 おじ_さん なる ね 気 をつけ て 
822126367584043008;山崎 でも いい ウイスキー 蒸留_所行 き たい 
753358847352246272;山崎 年 のうえ 年 

我下工作的文件Windows 7直接在Rconsole上复制/粘贴来自SublimeText的行。

编辑2:

我想马克的建议:

> rm(list=ls(all=TRUE)) 
> library(readr) 
> parselmouth.windows <- 
+ read_delim(
+  parselmouth.csv, 
+  ";", 
+  escape_double = FALSE, 
+  col_names = FALSE, 
+  trim_ws = TRUE 
+ ) 
Parsed with column specification: 
cols(
    X1 = col_double(), 
    X2 = col_character() 
) 
> names(parselmouth.windows) <- c('document', 'content') 
> parselmouth.windows$document <- as.character(parselmouth.windows$document) 
> 
> print.listof(head(parselmouth.windows)) 
document : 
[1] "865781289361604608" "856448528331161600" "815926577556897792" 
[4] "769384649143361536" "860119818296414208" "759768684457975808" 

content : 
[1] "<U+30B3><U+30FC><U+30AF><U+30CF><U+30A4> <U+5C71><U+5D0E> <U+5E74> <U+9154> 
<U+3063><U+6255><U+3044> <U+306A><U+3046>" 
[2] "<U+30EA><U+30AB><U+30FC><U+30B7><U+30E7><U+30C3><U+30D7> <U+5BC4><U+3063> < 
U+305F><U+3089> <U+30B5><U+30F3><U+30C8><U+30EA><U+30FC> <U+5C71><U+5D0E> <U+97F 
F><U+304C> <U+5165><U+8377>_<U+3057> <U+3066> <U+305F>" 
[3] "<U+304A><U+3068> <U+306A><U+3057><U+304F> <U+5C71><U+5D0E> <U+3093><U+3069> 
<U+304D> <U+307E><U+3059> w <U+307E><U+3042> <U+7AF9><U+9DB4> <U+7D50><U+5C40> < 
U+624B> <U+306B><U+3044><U+308C> <U+307E><U+3057>_<U+305F> <U+3057><U+3088><U+30 
57> <U+307E><U+3059> w" 
[4] "<U+518D> <U+6765><U+9031> <U+5C71><U+5D0E>_<U+84B8><U+7559> <U+6240> <U+884 
C><U+304F> <U+30A2><U+30C9> <U+3057><U+304B>_<U+306A><U+3044>" 
[5] "<U+975E><U+58F2> <U+54C1> <U+5C71><U+5D0E> <U+4ED5><U+8FBC>_<U+307F> <U+6C3 
4> <U+6C34><U+5272><U+308A> <U+6700><U+9AD8> <U+3067><U+3059>_<U+306D>" 
[6] "<U+30B4><U+30FC><U+30B9><U+30C8> <U+89B3> <U+305F> <U+9762><U+767D> <U+304B 
><U+3063>_<U+305F> <U+30E9><U+30B9><U+30C8> <U+500B><U+4EBA>_<U+7684> <U+9A5A><U 
+3044> <U+305F> <U+6700><U+9AD8> <U+3060><U+308D>_<U+3046> <U+3053><U+3046><U+30 
44><U+3046> <U+6642><U+671F><U+3063> <U+3066> <U+7D76><U+5BFE> <U+3042><U+308B> 
<U+3088><U+306D> <U+30E9><U+30B9><U+30C8> <U+5207><U+308A> <U+53E3> <U+4FFA> <U+ 
597D><U+304D> <U+5C71><U+5D0E> <U+30CF><U+30A4><U+30DC><U+30FC><U+30EB> <U+3046> 
<U+307E><U+3057>" 
+0

编码,可令人沮丧的R.你能1)提供您要加载数据的例子吗? 3)告诉我们您正在使用哪种操作系统? 3)告诉我们你使用的是什么R接口?例如,RStudio默默地制作了一些编码配置,通常(但不总是**)有用/合适。 –

+0

感谢马克的建议。我编辑了我的问题。希望它有帮助... –

+0

'content'有一些'w'和'_',看起来像他们可能在剪切和粘贴过程中引入的。他们真的在数据中吗? – G5W

回答

2

对,我你使用的是Windows怀疑。在Linux(Ubuntu 16.04.2,RStudio 0.99.879,R 3.3.2)中,读取和打印只是工作

parselmouth.ubuntu <- 
    read.csv('parselmouth.csv', header = FALSE, sep = ";") 

> head(parselmouth.ubuntu) 
      V1 
1 8.657813e+17 
2 8.564485e+17 
3 8.159266e+17 
4 7.693846e+17 
5 8.601198e+17 
6 7.597687e+17 
                                       V2 
1                            コークハイ 山崎 年 酔っ払い なう 
2                      リカーショップ 寄っ たら サントリー 山崎 響が 入荷_し て た 
3                 おと なしく 山崎 んどき ます w まあ 竹鶴 結局 手 にいれ まし_た しよし ます w 
4                          再 来週 山崎_蒸留 所 行く アド しか_ない 
5                          非売 品 山崎 仕込_み 水 水割り 最高 です_ね 
6 ゴースト 観 た 面白 かっ_た ラスト 個人_的 驚い た 最高 だろ_う こういう 時期っ て 絶対 ある よね ラスト 切り 口 俺 好き 山崎 ハイボール うまし 
> 

我想你会发现在内部,R 为Windows不“知道”数据的正确的编码。它只是没有以我们预期或希望的方式印刷。

我建议你阅读http://people.fas.harvard.edu/~izahn/posts/reading-data-with-non-native-encoding-in-r/

尝试保存例如数据parselmouth.csv,安装readr库,然后运行

library(readr) 
parselmouth.windows <- 
    read_delim(
    "parselmouth.csv", 
    ";", 
    escape_double = FALSE, 
    col_names = FALSE, 
    trim_ws = TRUE 
) 

names(parselmouth.windows) <- c('document', 'content') 
parselmouth.windows$document <- as.character(parselmouth.windows$document) 

print.listof(head(parselmouth.windows)) 

你会看到:

document : 
[1] "865781289361604608" "856448528331161600" "815926577556897792" 
[4] "769384649143361536" "860119818296414208" "759768684457975808" 

content : 
[1] "コークハイ 山崎 年 酔っ払い なう"                            
[2] "リカーショップ 寄っ たら サントリー 山崎 響が 入荷_し て た"                      
[3] "おと なしく 山崎 んどき ます w まあ 竹鶴 結局 手 にいれ まし_た しよし ます w"                 
[4] "再 来週 山崎_蒸留 所 行く アド しか_ない"                          
[5] "非売 品 山崎 仕込_み 水 水割り 最高 です_ね"                          
[6] "ゴースト 観 た 面白 かっ_た ラスト 個人_的 驚い た 最高 だろ_う こういう 時期っ て 絶対 ある よね ラスト 切り 口 俺 好き 山崎 ハイボール うまし" 

如果仍有没有喜悦,它可能有助于确定或设置当前的语言环境。在我的Windows示例中,我使用的是默认的Windows代码页:

Sys.getlocale(category = "LC_ALL") 
[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252" 

但我可以改变它

Sys.setlocale(category = "LC_ALL", locale = "English_United States.932") 
[1] "LC_COLLATE=English_United States.932;LC_CTYPE=English_United States.932;LC_MONETARY=English_United States.932;LC_NUMERIC=C;LC_TIME=English_United States.932" 

你也可以用十六进制编辑器来验证您的输入我的一样:

enter image description hereenter image description here

+0

感谢您的回答。我在研究期间已经偶然发现了你的链接,但是应用它却无效。至于你的一小段代码,我跑了它,但结果仍然是一样的。我不关心终端屏幕,但我真的很喜欢一个干净的出口。你认为我可以在处理后使用转换步骤吗? –

+0

嗯,这是一个很好的网络链接,但它不是“我的”。你能给我一些关于获得**相同结果的细节吗?我只是将代码粘贴到Windows 10的R 3.2.2控制台中,并获得了日语字符的输出。你准确地粘贴了我的建议命令吗?也许我们保存/编码输入文件的方式有所不同。我从你的帖子剪下来,粘贴到记事本++,并保存。我不认为我做了任何定制记事本+ +,我会认为崇高会表现相同。 –

+1

@Parselmouthintraining你说你想要“干净的出口”。你只是想写出来的文本文件或其他东西? – G5W