This is a Kuromoji tokenizer as a Transformer
on Spark DataFrame.
setInputCol
: Input column name as String
.setOutputCol
: Output column name as String
.setMode
: Kuromoji mode. Default value is NORMAL
. Others are SEARCH
and EXTENDED
.setDictPath
: Path to dictionary path.We can use this package like bellow:
// Creates a sample data which has a column whose name is `text`.
// The column involves Japanese text.
val data = Seq(
Row("天皇は、日本国の象徴であり日本国民統合の象徴であつて、この地位は、主権の存する日本国民の総意に基く。"),
Row("皇位は、世襲のものであつて、国会の議決した皇室典範 の定めるところにより、これを継承する。"),
Row("天皇の国事に関するすべての行為には、内閣の助言と承認を必要とし、内閣が、その責任を負ふ。"),
Row("天皇は、この憲法の定める国事に関する行為のみを行ひ、国政に関する権能を有しない。"),
Row("天皇は、法律の定めるところにより、その国事に関する行為を委任することができる。")
)
val schema = StructType(Seq(StructField("text", StringType, false)))
val df = sqlContext.createDataFrame(sc.parallelize(data), schema)
// Tokenizes with this package.
import org.atilika.kuromoji.{Tokenizer => KTokenizer}
val kuromoji = new KuromojiTokenizer()
.setInputCol("text")
.setOutputCol("tokens")
.setMode("NORMAL") // Optional
.setDictPath(pathToDictionary) // Optional
val transformed = kuromoji.transform(df)
transformed
is much kind of like the following.
text | tokens |
---|---|
天皇は、日本国の象徴であり日本国民統合の象徴であつて、この地位は、主権の存する日本国民の総意に基く。 | [天皇, は, 、, 日本, 国, の, 象徴, で, あり, 日本, 国民, 統合, の, 象徴, で, あ, つて, 、, この, 地位, は, 、, 主権, の, 存する, 日本, 国民, の, 総意, に, 基く, 。] |
皇位は、世襲のものであつて、国会の議決した皇室典範 の定めるところにより、これを継承する。 | [皇位, は, 、, 世襲, の, もの, で, あ, つて, 、, 国会, の, 議決, し, た, 皇室, 典範, , の, 定める, ところ, により, 、, これ, を, 継承, する, 。] |
天皇の国事に関するすべての行為には、内閣の助言と承認を必要とし、内閣が、その責任を負ふ。 | [天皇, の, 国事, に関する, すべて, の, 行為, に, は, 、, 内閣, の, 助言, と, 承認, を, 必要, と, し, 、, 内閣, が, 、, その, 責任, を, 負, ふ, 。] |
天皇は、この憲法の定める国事に関する行為のみを行ひ、国政に関する権能を有しない。 | [天皇, は, 、, この, 憲法, の, 定める, 国事, に関する, 行為, のみ, を, 行, ひ, 、, 国政, に関する, 権能, を, 有, し, ない, 。] |
天皇は、法律の定めるところにより、その国事に関する行為を委任することができる。 | [天皇, は, 、, 法律, の, 定める, ところ, により, 、, その, 国事, に関する, 行為, を, 委任, する, こと, が, できる, 。] |
The following is a Java example.
List<String> data = Arrays.asList(
"天皇は、日本国の象徴であり日本国民統合の象徴であつて、この地位は、主権の存する日本国民の総意に基く。",
"皇位は、世襲のものであつて、国会の議決した皇室典範 の定めるところにより、これを継承する。",
"天皇の国事に関するすべての行為には、内閣の助言と承認を必要とし、内閣が、その責任を負ふ。",
"天皇は、この憲法の定める国事に関する行為のみを行ひ、国政に関する権能を有しない。",
"天皇は、法律の定めるところにより、その国事に関する行為を委任することができる。"
);
JavaRDD<Row> rdd = jsc.parallelize(data).map((String text) -> {
return RowFactory.create(text);
});
StructType schema = DataTypes.createStructType(new StructField[]{
DataTypes.createStructField("text", DataTypes.StringType, false)
});
DataFrame df = jsql.createDataFrame(rdd, schema);
KuromojiTokenizer tokenizer = new KuromojiTokenizer()
.setInputCol("text")
.setOutputCol("tokens")
.setMode("EXTENDED");
DataFrame transformed = tokenizer.transform(df);
We still have an issue to save a dictionary.
It would be great to save an using dictionary on Amazon S3 or HDFS.
However, the saved data just holds a path to the using dictionary as String
.