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

时间:2012-10-01 04:05:31

标签: scala text machine-learning nlp

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

如何在Scala中执行此操作?我试过text.sliding(2)来获取bigrams,但这似乎并不合适。 (我猜是因为汉字不是像英文一样的单字节?)

2 个答案:

答案 0 :(得分: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函数,这些函数将提取你需要的东西,当然这些是简单的天真实现。

答案 1 :(得分:0)

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

参见此参考文献。

n-gram name analysis in non-english languages (CJK, etc)

请参阅有关如何安装mecab的信息。

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