Scala 如何将一段中文文本拆分为单个字符?

Scala 如何将一段中文文本拆分为单个字符?,scala,text,machine-learning,nlp,Scala,Text,Machine Learning,Nlp,我在做一个机器学习项目,在那里我在中文文本上构建一个朴素贝叶斯分类器。我想使用n克汉字作为特征,因此我需要能够将文本拆分为单克(单个字符)、双格(两个字符的序列)等等。(我不关心特殊标记化之类的东西——我只希望原始字符为n-gram。) 在Scala中如何实现这一点?我尝试了text.slidering(2)来获取bigram,但这似乎不太管用。(我猜是因为汉字不像英语那样是一个字节?试试mecab。我使用mecab为日语和汉语创建代币。一旦安装了mecab,python api的 请参阅此参考

我在做一个机器学习项目,在那里我在中文文本上构建一个朴素贝叶斯分类器。我想使用n克汉字作为特征,因此我需要能够将文本拆分为单克(单个字符)、双格(两个字符的序列)等等。(我不关心特殊标记化之类的东西——我只希望原始字符为n-gram。)


在Scala中如何实现这一点?我尝试了
text.slidering(2)
来获取bigram,但这似乎不太管用。(我猜是因为汉字不像英语那样是一个字节?

试试mecab。我使用mecab为日语和汉语创建代币。一旦安装了mecab,python api的

请参阅此参考资料

有关如何安装mecab,请参见本节


一般来说,这是一个关于在Java中正确处理Unicode以及Scala的问题。从我对互联网的粗略浏览来看,似乎没有“一种真正的方法”来处理Java中的Unicode。我不是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)
val text=”囗土夊米"  
val unigrams=text.toCharArray
/*有了约束,unigrams是偶数,没有toString,你会得到奇怪的强制*/
val bigrams=

对于(我,嗯,你能不能,请,在里面加一些,为什么它不起作用?我试过滑(2)“囗土夊米“并得到了以下大图:
囗土
土夊
夊米
看起来很像一个期望的结果MM,当我尝试在该字符串上滑动(2)
时,我得到
列表(?,,,,,,,,,,,,,)
[没有期望的长度].Ah,问题是默认情况下我没有使用UTF-8。嗯,所以当我运行这段代码时,我的
unigrams
变量是一个大小为12的数组。您是否得到大小为4的数组?@grautur确保您的环境使用UTF8,例如在命令行上运行scala时:
scala-Dfile.encoding=“UTF-8“
上述代码将为您提供大小为4和2的bigram数组。