概要
日本語の形態素解析(MeCab)のようなことを中国語でもやりたいのでFNLPを利用する
環境
OS : Windows7 64bit
言語: Java8
IDE: Ecplise4.8.0
目的
日本語の文章をMecabにかけて得られる「形態素」「品詞」「基本形」を中国語でも行いたい
オープンソースの「FudanNLP(FNLP)」を利用して、中国分から「形態素」「品詞」を取得する
目次
- 中国語の事前知識
- Javaの実装
- 準備
- 分かち書き
- 品詞分解
1. 中国語の事前知識
文字は2種類
- 簡体字と繁体字
本記事では、簡体字の文章に限定して考える
時制がない
- 過去、現在、未来は文脈で判断する
- 過去形: 我昨天去了上海
- 私は昨日上海へ行った
- 現在形: 我去上海
- 私は上海へ行く
- 未来形: 我明天要去上海
- 私は明日上海へ行かなければならない
このため本記事では、中国語の形態素は全て「基本形」で取得できるものとして考える
2. Javaの実装
1. 準備
直接MavenRepository内のfnlp-coreをpom.xmlで指定するとエラーになる為、一度ソースコードをビルドして、fnlp-core-2.1-SNAPSHOT.jarファイルを作成する
※ fnlp-core-2.1-SNAPSHOT.jarの作成は、FNLPで中国語形態素解析の「ダウンロード」「ビルド」を行う
mavenプロジェクトを作成し、作成したfnlp-core-2.1-SNAPSHOT.jarファイルをdicフォルダ配下に配置する
pom.xmlに以下を追加する
<dependency>
<groupId>net.sf.trove4j</groupId>
<artifactId>trove4j</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.fnlp</groupId>
<artifactId>core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.fnlp</groupId>
<artifactId>core</artifactId>
<version>2.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/dic/fnlp-core-2.1-SNAPSHOT.jar</systemPath>
</dependency>
また、https://github.com/xpqiu/fnlp/releases で公開されているモデルファイル3つ(pos.m, seg.m, dep.m)をダウンロードし、dicフォルダに配置する
2. 分かち書き
CNFactory factory = null;
// モデルファイルのパスを指定し、形態素解析器を呼び出す
try {
factory = CNFactory.getInstance("./dic");
} catch (LoadModelException lme) {
lme.printStackTrace();
}
String message = "今天天气真好啊!";
String[][] tokens = factory.tag(message);
System.out.println(Arrays.asList(tokens[0]));
>> [今天, 天气, 真, 好, 啊, !]
3. 品詞分解
CNFactory factory = null;
// モデルファイルのパスを指定し、形態素解析器を呼び出す
try {
factory = CNFactory.getInstance("./dic");
} catch (LoadModelException lme) {
lme.printStackTrace();
}
String message = "今天天气真好啊!";
String[][] tokens = factory.tag(message);
System.out.println(Arrays.asList(tokens[1]));
>> [时间短语, 名词, 副词, 形谓词, 语气词, 标点]