1

私は機械学習プロジェクトに取り組んでいます。そこでは、中国語のテキストに対して単純ベイズ分類器を構築しています。nグラムの漢字を特徴として使用したいので、テキストをユニグラム(個別の文字)、バイグラム(2文字のシーケンス)などに分割できる必要があります。(特別なトークン化などは気にしません。生の文字をn-gramとして使用したいだけです。)

Scalaでこれを行うにはどうすればよいですか?バイグラムを取得しようとtext.sliding(2)しましたが、うまくいかないようです。(漢字は英語のように1バイトではないので推測しますか?)

4

2 に答える 2

3

一般に、これはJavaでのUnicodeの適切な処理、したがってScalaについての質問です。インターネットをざっと見ただけでは、JavaでUnicodeを処理する「1つの本当の方法」はないようです。私は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がインストールされると...PythonAPIの。

このリファレンスを参照してください。

英語以外の言語(CJKなど)でのn-gram名の分析

mecabのインストール方法についてはこちらをご覧ください。

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

于 2012-10-01T04:09:34.700 に答える