Hiện tại có rất nhiều công việc liên quan đến xử lý văn bản tiếng Nhật. Bạn muốn lấy danh sách các danh từ, muốn lấy cách đọc chữ Hán hay muốn đổi động từ, tính từ về dạng từ điển để thuận lợi cho việc tìm kiếm. Tất cả các công việc này đều có thể thực hiện dễ dàng với Atikila Kuromoji.
Atilika Kuromoji là phần mở rộng hơn dựa trên nền tảng Mecab, 1 trong những engine phân tích ngôn ngữ học tiếng Nhật phổ biến nhất. Mecab lúc đầu phát triển dựa theo ChaSen nên có tên là ChaSenTNG,nhưng về sau đã được tách ra phát triển độc lập.
1.Atilika Kuromoji
Mô tả:
- Kuromoji là mã nguồn mở được viết bằng java, hỗ trợ phân tích ngôn ngữ học tiếng Nhật
- Hiện tại ngoài từ điển mặc định (kuromoji-ipadic) Kuromoji hỗ trợ các loại từ điển khác là - IPADIC (2.7.0-20070801)
- IPADIC NEologd (2.7.0-20070801-neologd-20151224)
- JUMANDIC (7.0-20130310)
- NAIST jdic (0.6.3b-20111013)
- UniDic (2.1.2)
- UniDic Kana Accent (2.1.2)
- UniDic NEologd (2.1.2-neologd-20151224)
Việc lựa chọn từ điển phụ thuộc vào ứng dụng của bạn. Đặc biệt đối với các ứng dụng cần danh sách từ vựng mới thì có thể sử dụng từ điển như mecab-unidic-NEologd ( được cập nhật 2 lần mỗi tuần , crawl từ dữ liệu trên internet và 1 số nguồn khác. Chi tiết xem tại unidic-neologd )
Các chức năng chính:
- Phân tích đoạn văn bản thành từ vựng
- Phân nhóm từ vựng
- Nhận dạng sự biến đổi của từ
- Hỗ trợ cách đọc chữ Hán
2.Example:
Cài đặt
Thêm nội dung bên dưới vào file pom.xml
Example 1: In ra các từ vựng trong câu “日本は最高の国です。”
import org.atilika.kuromoji.Token; import org.atilika.kuromoji.Tokenizer; public class KuromojiExample { public static void main(String[] args) { Tokenizer tokenizer = Tokenizer.builder().build(); for (Token token : tokenizer.tokenize("日本は最高の国です。")) { System.out.println(token.getSurfaceForm()); } } }
Output
日本 は 最高 の 国 です 。
Example 2: In ra các danh từ trong câu “母は息子をほこりに思っている”
import org.atilika.kuromoji.Token; import org.atilika.kuromoji.Tokenizer; public class KuromojiExample { public static void main(String[] args) { Tokenizer tokenizer = Tokenizer.builder().build(); for (Token token : tokenizer.tokenize("母は息子をほこりに思っている")) { String pos = token.getPartOfSpeech().split(",")[0]; if ("名詞".equals(pos)) { System.out.println(token.getSurfaceForm()); } } } }
Output
母 息子 ほこり
Example 3: In ra các từ vựng và toàn bộ các thông tin có thể lấy được “日本は最高の国です。”
import org.atilika.kuromoji.Token; import org.atilika.kuromoji.Tokenizer; public class KuromojiExample { public static void main(String[] args) { Tokenizer tokenizer = Tokenizer.builder().build(); for (Token token : tokenizer.tokenize("日本は最高の国です。")) { System.out.println(token.getSurfaceForm() + "\t" + token.getAllFeatures()); } } }
Output
日本 名詞,固有名詞,地域,国,,,日本,ニッポン,ニッポン は 助詞,係助詞,,,,,は,ハ,ワ 最高 名詞,一般,,,,,最高,サイコウ,サイコー の 助詞,連体化,,,,,の,ノ,ノ 国 名詞,一般,,,,,国,クニ,クニ です 助動詞,,,,特殊・デス,基本形,です,デス,デス 。 記号,句点,,,,*,。,。,。
3. Định dạng Output
Ví dụ kết quả ứng với từ 日本
名詞,固有名詞,地域,国,,,日本,ニッポン,ニッポン
名詞 | 固有名詞 | 地域 | 国 | * | * | 日本 | ニッポン | ニッポン |
Từ loại | Từ loại chi tiết 1 | Từ loại chi tiết 2 | Từ loại chi tiết 3 | Ctype(*2) | Cform(*2) | Nguyên gốc | Cách đọc | Phát âm |
Danh từ | Danh từ cố định | Địa danh | Quốc gia |
品詞 | 品詞細分類1 | 品詞細分類2 | 品詞細分類3 | 活用型 | 活用形 | 原形 | 読み | 発音 |
Từ loại | Từ loại chi tiết 1 | Từ loại chi tiết 2 | Từ loại chi tiết 3 | Ctype | Cform | Nguyên gốc | Cách đọc | Phát âm |
4. Kuromori Function:
Về cơ bản chỉ sử dụng 2 class Token và Tokenizer
Class Tokenizer phân tích văn bản thành các từ vựng ( token)
Class Token chứa các phương thức để lấy thông tin
getSurfaceForm() Trả lại từ vựng (token) getPartOfSpeech() Trả lại loại từ ( danh từ, động từ , tính từ …) getBaseForm() Trả lại dạng nguyên bản của từ. (Động từ thể từ điển) getReading() Trả lại cách đọc cho từ. isKnown()、isUnknown() Trả lại giá trị boolean, có hay không từ vựng này trong từ điển. isUser() Trả lại có từ này trong từ điển riêng của người dùng không. getAllFeatures()、getAllFeaturesArray() Trả lại toàn bộ thông tin dạng String hoặc String[]
5. Thay đổi Mode
Kujomoji hỗ trợ 3 hình thức phân tách dữ liệu
Mode.NORMAL (default)
Mode.SEARCH
Mode.EXTENDED
Builder builder = Tokenizer.builder(); // Normal mode default builder.mode(Mode.NORMAL); Tokenizer normal = builder.build(); // Search mode builder.mode(Mode.SEARCH); Tokenizer search = builder.build(); // Extends mode builder.mode(Mode.EXTENDED); Tokenizer extended = builder.build();
6. Sử dụng từ điển** riêng**
Ngoài các từ điển được hỗ trợ sẵn, chúng ta cũng có thể sử dụng từ điển tự định nghĩa.
Builder builder = Tokenizer.builder(); builder.userDictionary("userdic.txt");
Kết luận
Atilika Kuromoji cực kỳ hữu ích với các yêu cầu trích xuất dữ liệu, phân tích văn bản. Khả năng tích hợp cũng như sử dụng dễ dàng. Đặc biệt hoàn toàn là mã nguồn mở. Hệ thống từ điển được hỗ trợ cũng đa dạng và vẫn tiếp tục được bổ sung, cập nhật.
Tuy nhiên do đặc thù từ vựng cũng như sự phức tạp của tiếng Nhật, dữ liệu output sẽ không thể 100% chính xác như mong đợi. Việc sót các cụm từ là tên riêng, các từ mới chưa được cập nhật hay nhận dạng từ không chuẩn là vẫn có. Vì thế nên khi sử dụng cũng cần chú ý cho phép có sai số ở mức độ nào đó.
** Thông tin tham khảo**
(*1) Hệ thống từ loại IPA
Type1 | Type2 | Type3 | Type4 | Examples | Description |
---|---|---|---|---|---|
連体詞 | 「この」、「いろんな」、「おっきな」、「堂々たる」 | ||||
接頭詞 | 形容詞接続 | 「お」、「まっ」、「クソ」 | 「お高い」「クソ高い」「まっ赤」 | ||
数接続 | 「No.」、「計」、「毎分」 | あとに数値がくるもの。 | |||
動詞接続 | 「ぶっ」、「引き」 | あとに動詞がくるもの。「ぶったたく」 | |||
名詞接続 | 「もと」、「アンチ」、「最」、「総」 | あとに名詞がくるもの。 | |||
名詞 | 引用文字列 | 「いわく」のみ | |||
サ変接続 | 「苦労」、「終了」、「アピール」、「くしゃみ」 | 「~する」の形をとれるもの。 | |||
ナイ形容詞語幹 | 「申し訳」、「とんでも」、「おとなげ」 | 「~ない」の形をとれるもの。 | |||
形容動詞語幹 | 「あからさま」、「ミステリアス」、「決定的」、「無人」 | 「~な」の形をとれるもの。 | |||
動詞非自立的 | 「ごらん」、「ちょうだい」のみ | 「~してごらん」「~してちょうだい」 | |||
副詞可能 | 「10月」、「せんだって」、「当分」 | おもに時相名詞。 | |||
一般 | 「大根」、「シエスタ」、「加速度」、「ありさま」 | 一般名詞。 | |||
数 | 「ゼロ」、「億」 | 数値。 | |||
接続詞的 | 「VS」、「対」、「兼」のみ | ||||
固有名詞 | 一般 | 「北穂高岳」、「電通銀座ビル」、「G1」 | 下のカテゴリにあてはまらないもの。山・川・商品名など。 | ||
人名 | 一般 | 「グッチ裕三」、「紫式部」 | 芸能人名など。 | ||
姓 | 「山田」、「ビスコンティ」 | ||||
名 | 「B作」、「アントニオ」、「右京太夫」 | ||||
組織 | 「いすゞ自動車」、「ニチレイ」、「統一アイルランド党」 | ||||
地域 | 一般 | 「北海道」、「やながわ工業団地」、「ラムサール」 | |||
国 | 「露西亜」、「バングラデシュ」 | ||||
接尾 | サ変接続 | 「化」、「入り」 | 「巨大化」「キャンプ入り」 | ||
一般 | 「ぎみ」、「ゆかり」、「枚」、「不可」 | ||||
形容動詞語幹 | 「がち」、「的」、「同然」 | ||||
助数詞 | 「オクターブ」、「%」、「ヶ国」 | 単位。 | |||
助動詞語幹 | 「そ」、「そう」のみ | 「~してそう」「~そうだ」で使われる。 | |||
人名 | 「君」、「はん」 | ||||
地域 | 「州」、「市内」、「港」 | ||||
特殊 | 「ぶり」、「み」、「方」 | ||||
副詞可能 | 「いっぱい」、「前後」、「次第」 | ||||
代名詞 | 一般 | 「そこ」、「俺」、「こんちくしょう」 | |||
縮約 | 「わたしゃ」、「そりゃあ」 | ||||
非自立 | 一般 | 「こと」、「きらい」、「くせ」、「もの」 | |||
形容動詞語幹 | 「ふう」、「みたい」のみ | ||||
助動詞語幹 | 「よ」、「よう」のみ | ||||
副詞可能 | 「限り」、「さなか」、「うち」 | ||||
特殊 | 助動詞語幹 | 「そ」、「そう」のみ | |||
動詞 | 自立 | 「いがみ合う」、「たてつく」、「垢抜ける」 | |||
接尾 | 「する」、「られる」、「させる」、「がかる」 | ||||
非自立 | 「しまう」、「ちゃう」、「願う」 | 「行ってしまう」「やっちゃったね」「ご遠慮願う」 | |||
形容詞 | 自立 | 「けたたましい」、「分別臭い」、「めでたい」 | |||
接尾 | 「ったらしい」、「っぽい」 | ||||
非自立 | 「づらい」、「がたい」、「よい」 | 「聞きづらい」「見よい」 | |||
副詞 | 一般 | 「たいそう」、「人一倍」、「いけしゃあしゃあ」 | |||
助詞類接続 | 「あまり」、「いつも」、「ぱさぱさ」 | 同一文節内に付属語がこれるもの。 | |||
接続詞 | 「けれども」、「たとえば」、「反面」 | ||||
助詞 | 格助詞 | 一般 | 「の」、「から」、「を」 | ||
引用 | 「と」のみ | ||||
連語 | 「について」、「とかいう」 | 解析ミスを防ぐためのマクロ。 | |||
係助詞 | 「は」、「こそ」、「も」、「や」 | ||||
終助詞 | 「かしら」、「ぞ」、「っけ」、「わい」 | ||||
接続助詞 | 「て」、「つつ」、「および」、「ので」 | ||||
特殊 | 「かな」、「けむ」、「にゃ」 | 「せにゃならん」 これ以外の用途は不明。 | |||
副詞化 | 「と」、「に」のみ | ||||
副助詞 | 「くらい」、「なんか」、「ばっかり」 | ||||
副助詞/並立助詞/終助詞 | 「か」のみ | ||||
並立助詞 | 「とか」、「だの」、「やら」 | ||||
連体化 | 「の」のみ | ||||
助動詞 | 「らしい」、「ござる」、「っす」、「じゃん」 | 「そうでございます」 | |||
感動詞 | 「うむ」、「お疲れさま」、「トホホ」 | ||||
記号 | 句点 | 「。」、「.」のみ | |||
読点 | 「、」、「,」のみ | ||||
空白 | 「 」のみ | ||||
アルファベット | 「A」 | ||||
一般 | 「?」、「!」、「¥」 | ||||
括弧開 | 「(」、「【」 | ||||
括弧閉 | 「”」、「>」 | ||||
フィラー | 「えーと」、「なんか」 | (たぶん)音声認識用。 | |||
その他 | 間投 | 「あ」、「ア」のみ | 「そんなぁ」 | ||
未知語 | 「オマエモナー」「NULLPO」 |
Ví dụ
**活用型(ctype)** | **活用形(cform)** |
形容詞・イ段 | 基本形 |
五段・バ行 | 基本形 |
五段・マ行 | 基本形 |
五段・ラ行特殊 | 基本形 |
五段・ワ行促音便 | 基本形 |
Tham khảo
- http://www.atilika.org
- https://github.com/atilika/kuromoji
- http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html#diff
- http://manapedia.jp/text/1364