2017-12-08 6 views
1

스페인어 텍스트와 함께 unnest_tokens를 사용하려고합니다. Unigrams에서는 잘 작동하지만 bigrams로는 특수 문자를 구분합니다.tidytext :: unnest_tokens는 스페인어 문자로 작동합니까?

코드는 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

당신이()'뿐만 아니라'Sys.getlocale의 출력을 게시 할 수 다음 text 열, 같은 것을 사용 unnest_tokens 같은 결과는 당신이 df과 결과에 가입 부여합니다 얻으려면? 디버깅에 도움이됩니다. – BrodieG

+0

[Unicode 정규화] (https://en.wikipedia.org/wiki/Unicode_equivalence) 문제 일 가능성이 높지만이를 재현 할 수 없습니다. stringi에는 변환 함수가 있습니다. '? stringi :: stri_trans_nfc'을보십시오. – alistaire

답변

1

당신이 ngramstoken 인수를 변경할 때 발생하는 것으로 보인다. 이 tidytextsource code에 파고 패키지 qlcMatrix

library(qlcMatrix) 

splitStrings(df$text, sep = ' ', bigrams = TRUE, boundary = FALSE, bigram.binder = ' ')$bigrams 
#[1] "César Moreira" "Moreira Nuñez" 
1

를 사용하여 주위에 작업을하는 것이 않지만, 여기에 왜 모르겠어요,이 단어처럼 보이는 ngrams는 tokenizer 패키지를 사용하여 분할됩니다. 이러한 함수는 tokenize_wordsstri_split을 사용하는 반면 tokenize_ngramscustom C++ code을 사용합니다.

R과 C++ 데이터 유형 사이를 전환하는 마지막 단계가 분명한 이유를 설명 할 수는 없지만 발음 구별 부호가 깨지는 것을 상상해보십시오.

+0

귀하의 평가가 나에게 맞는 것으로 보인다 : 이것은'tokenizers '에있는 버그입니다. skip_ngrams의 C++ 소스는 인코딩을 지정하지 않습니다. 대부분의 경우 기본 인코딩은 Linux 및 MacOS에서는 UTF-8이지만 Windows에서는 Windows-1252입니다. –

+0

https://github.com/ropensci/tokenizers/issues/58에 버그 신고서를 제출했습니다. –

0

PolishEstonian과 같이 이전에 인코딩 문제가있는 사람들과 채팅했습니다. 나는 당신의 문제를 할 수 없기 때문에 내가 로컬 문제를 재현하지 않을 수 있기 때문에 항상 약간 까다로운 :

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 

당신은 당신의 코드가 리눅스에서 잘 작동 말,이뿐만 아니라 다른 사람의 경험과 정렬 . 이것은 항상 Windows 인코딩 문제 일 것 같습니다. 이것은 tidytext 패키지의 코드 또는 tokenizers 패키지와 관련이 없습니다. 내가 본 것에서 볼 때, 이것은 stringi에있는 C 라이브러리와 다른 플랫폼에 비해 Windows에서 어떻게 작동하는지에 대해 의심 스럽습니다. 이 때문에 stringi (실제로 R의 NLP 모두)에 의존하는 것과 동일한 문제가있을 수 있습니다.

0

문제가 무엇인지 모르겠지만 재현 할 수있었습니다.

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의 다른 변수를 유지하지 않는 : 나는 또한 Windows에서 다음 작품을 확인할 수 있습니다.

y <- df %>% term_counts(ngrams = 2) 
cbind(df[y$text,], y)