在UTF-8编码的日语语料库上进行R处理

时间:2017-06-04 17:47:55

标签: python r encoding utf-8

我正在尝试用日语处理UTF8编码的文件。

我在python中进行了预处理,一切正常(tokenization / collocations / stopwords),我获得了以下类型的字符串:

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

但是,当我尝试在R中读取预处理文件(UTF-8编码的csv)来运行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重新编码生成的文件,但在尝试编码/解码功能半天后,我不得不承认我完全卡住了。

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

编辑: 以下是我的python预处理的csv输出的前20行(以utf8编码)=&gt;这是我给我的R程序的文件

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;山崎 年 のうえ 年

我通过SublimeText中的复制/粘贴行直接在Rconsole上使用Windows 7。

编辑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>"

1 个答案:

答案 0 :(得分: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 for 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 here enter image description here