1

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

我如何在 Scala 中做到这一点?我试图text.sliding(2)获得二元组,但这似乎并不奏效。(我猜是因为汉字不像英文那样是一个字节?)

4

2 回答 2

3

一般来说,这是一个关于在 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)

类似的东西应该很容易推广到一组 n-gram 函数,这些函数将提取你需要的东西,这些当然是简单的幼稚实现。

于 2012-10-01T08:31:52.640 回答
0

试试mecab。我使用 mecab 为日语和中文创建令牌。一旦安装了 mecab……python api。

请参阅此参考。

非英语语言(CJK 等)中的 n-gram 名称分析

有关如何安装 mecab,请参阅此内容。

http://nlp.solutions.asia/?tag=ubuntu

于 2012-10-01T04:09:34.700 回答