我正在尝试使用带有西班牙文本的unnest_tokens。它适用于unigrams,但用bigrams打破了特殊角色。
代码在Linux上运行良好。我在语言环境中添加了一些信息。
library(tidytext)
library(dplyr)
df <- data_frame(
text = "César Moreira Nuñez"
)
# works ok:
df %>%
unnest_tokens(word, text)
# # A tibble: 3 x 1
# word
# <chr>
# 1 césar
# 2 moreira
# 3 nuñez
# breaks é and ñ
df %>%
unnest_tokens(bigram, text, token = "ngrams", n = 2 )
# # A tibble: 2 x 1
# bigram
# <chr>
# 1 cã©sar moreira
# 2 moreira nuã±ez
> Sys.getlocale()
[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"
答案 0 :(得分:2)
当您将token
参数更改为ngrams
时,似乎会发生这种情况。我不确定为什么会这样做,但这是一个使用包qlcMatrix
library(qlcMatrix)
splitStrings(df$text, sep = ' ', bigrams = TRUE, boundary = FALSE, bigram.binder = ' ')$bigrams
#[1] "César Moreira" "Moreira Nuñez"
答案 1 :(得分:1)
挖掘tidytext
的{{3}},看起来使用tokenizer
包拆分了单词和ngram。这些函数使用不同的方法:tokenize_words
使用stri_split
,而tokenize_ngrams
使用source code。
我想最后一步 - 在R和C ++数据类型之间切换 - 使变音符号变得麻烦,尽管我无法解释为什么会这样。
答案 2 :(得分:1)
我们曾与几位曾遇到过编码问题的人聊过Polish和Estonian。它总是有点棘手,因为我永远无法在本地重现问题,因为我无法解决您的问题:
library(tidytext)
library(dplyr)
df <- data_frame(
text = "César Moreira Nuñez"
)
df %>%
unnest_tokens(word, text)
#> # A tibble: 3 x 1
#> word
#> <chr>
#> 1 césar
#> 2 moreira
#> 3 nuñez
df %>%
unnest_tokens(bigram, text, token = "ngrams", n = 2 )
#> # A tibble: 2 x 1
#> bigram
#> <chr>
#> 1 césar moreira
#> 2 moreira nuñez
你说你的代码在Linux上运行良好,这也符合其他人的经验。这似乎总是一个Windows编码问题。这与tidytext包中的代码甚至是tokenizers包无关;从我所看到的,我怀疑这与stringi中的C库以及它们如何在Windows上与其他平台相比起作用。因此,你可能会遇到与stringi相关的任何问题(R实际上是NL中的所有NLP)。
答案 3 :(得分:0)
我不知道问题是什么,但我能够重现它。我还可以确认以下内容适用于Windows:
library(corpus)
df %>% term_counts(ngrams = 2)
#> text term count
#> 1 1 césar moreira 1
#> 2 1 moreira nuñez 1
此处的结果与unnest_tokens
的结果非常相似,但是按术语聚合,不会保留df
中的其他变量。要获得unnest_tokens
之类的结果,请使用df
列将结果与text
一起加入,例如:
y <- df %>% term_counts(ngrams = 2)
cbind(df[y$text,], y)