2012-10-01 5 views
1

저는 중국어 텍스트보다 Naive Bayes 분류자를 만드는 기계 학습 프로젝트를 진행하고 있습니다. n-gram의 중국어 문자를 기능으로 사용하고 싶기 때문에 텍스트를 유니 그램 (개별 문자), 바이 그램 (두 문자 시퀀스) 등으로 나눌 수 있어야합니다. (특수 토큰 화에 대해서는 신경 쓰지 않습니다. 원시 문자를 n-gram으로 사용하기를 원합니다.)한글 텍스트를 개별 문자로 분할하는 방법은 무엇입니까?

스칼라에서는 어떻게해야합니까? 나는 bigrams를 얻으려고 text.sliding(2)을 시도했지만 이것이 효과가없는 것 같습니다. (한자가 영어처럼 1 바이트가 아니기 때문에 추측하고 있습니다.)

+0

흠, 제발, 내부에 몇 가지 추가해주세요, 왜 작동하지 않나요? 나는 "囗 土 頁 米"에서 슬라이딩 (2)을 시도했고 다음과 같은 바이 그램을 얻었다 : "囗 土", "土'", "아 페이지"는 원하는 결과와 거의 비슷하다. –

+0

흠, 시도 할 때 그 문자열에'sliding (2)'을 쓰면 List (?, ??, ??,?, ??, ??,?, ??, ??,?, ??) 원하는 길이를 가진다]. – grautur

+1

아, 문제는 기본적으로 UTF-8을 사용하지 않고 있다는 것입니다. – grautur

답변

3

뿐만 아니라 자바 따라서 스칼라에서 유니 코드의 적절한 처리에 대한 질문입니다. 인터넷에서의 내 눈에 띄는 부분에서 Java에서 유니 코드를 처리하는 "진정한 방법"은없는 것처럼 보입니다. 나는 NLP 사람이 아니므로, 에 대한 나의 이해가 무엇인지 당신이하고 싶지 않을 수 있습니다. 그런

val text = "囗土夊米" 

val unigrams = text.toCharArray 

/* With the constraint unigrams is even, without the toString you get weird coercions */ 
val bigrams = 
    for (i <- 0 until unigrams.length if i % 2 == 0) yield unigrams(i).toString + unigrams(i + 1) 

뭔가는 물론이되는 간단한 순진 구현, 필요 추출합니다 N 그램 함수의 집합으로 일반화하기 쉬워야한다.

+0

흠, 코드 조각을 실행할 때, 나의 'unigrams' 변수는 크기가 12 인 배열입니다. 크기가 4 인 배열을 얻나요? – grautur

+1

@grautur 환경이 UTF8을 사용하고 있는지 확인하십시오 (예 : 명령 행에서 스칼라를 실행할 때 :'''scala -Dfile.encoding = "UTF-8"'''위의 코드는 크기가 4와 2 인 bigram 배열을 제공합니다. – opyate

관련 문제