Phân tích ngôn ngữ tiếng Nhật với phần mềm Mecab và gem Natto

Bạn yêu thích tiếng Nhật và muốn học tiếng Nhật? Có bao giờ bạn đọc một câu văn tiếng Nhật và không biết nó có thể phân tích như thế nào, không biết các từ trong câu là gì? Hay cụ thể hơn, bạn có bao giờ phải lập trình một ứng dụng đòi hỏi phân tích câu tiếng Nhật? Đã có bộ đôi gem Natto + Mecab.

Mecab là gì?

Mecab là một công cụ mã nguồn mở phân tích hình thái từ, được phát triển bởi Taku Kudo. Tên của nó công cụ có nguồn gốc từ tên món ăn ưa thích của tác giả めかぶ (me-ka-bu) có nghĩa là củ cải.

Mecab được phát triển từ Chasen, một công cụ phân tích hình thái từ cũng bắt nguồn từ Viện Khoa học và công nghệ sau đại học Nara, xuất thân của Taku Kudo. Tuy nhiên khi so sánh với Chasen, Mecab nhanh hơn từ 3~4 lần khi phân tích câu có cùng độ phức tạp. Mecab có thể sử dụng một số loại từ điển khác nhau, nhưng từ điển được sử dụng nhiều nhất là IPADIC. Mecab đã được sử dụng trong việc tạo ra dữ liệu n-gram quy mô lớn của Google.

Cài đặt Mecab

Sau đây, tôi sẽ hướng dẫn bạn cách cài đặt Mecab trên các hệ điều hành Unix và trên OSX.

Trước hết, hãy download bộ cài Mecab tại đây

và download bộ cài IPADIC tại đây

Cài đặt Mecab

$ cd mecab-downloaded-directory
$ tar zxfv mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure
$ make
$ make check
$ sudo make install

Khi cài, có thể bạn sẽ gặp lỗi sau:

param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc

Hệ thống thông báo chưa tìm thấy từ điển. Không sao, từ điển sẽ được cài đặt ngay sau đây.

Cài đặt từ điển IPADIC

$ cd ipadic-downloaded-directory
$ tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801/
$ ./configure --with-charset=utf8
$ make
$ sudo make install

Bạn sẽ gặp lỗi sau:

configure: error: mecab-config is not found in your system

Vì hệ thống không tìm thấy mecab-config.

Hãy chạy lệnh sau để thiết lập mecab-config

$ which mecab-config
$ sudo ./configure --with-charset=utf8 --with-mecab-config=/usr/local/bin/mecab-config

Đến đây, ta đã cài đặt thành công mecab. Hãy thử test Mecab nhé. Bật mecab lên và gõ vào một câu tiếng Nhật.

# mecab
# この辺りに会社が沢山あります

Hệ thống sẽ tự động phân tích câu ra thành các hình thái từ, bạn nhận được kết quả như sau:

この	連体詞,*,*,*,*,*,この,コノ,コノ
辺り	名詞,一般,*,*,*,*,辺り,アタリ,アタリ
沢山	名詞,接尾,一般,*,*,*,沢山,ダクサン,ダクサン
あり	動詞,自立,*,*,五段・ラ行,連用形,ある,アリ,アリ
ます	助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
EOS

ở đây, trong kết quả trả về mặc định, bạn có thể biết từ loại và cách đọc của các hình thái từ được phân tích ra. Thú vị phải không.

Gem Natto

Natto, trong tiếng Nhật nghĩa là đậu hũ "thố...i". Mùi khó chịu nhưng ăn vào rất ngậy =)) Gem Natto cũng thế, cài đặt hơi phức tạp nhưng dùng thì rất tuyệt.

Natto là gì

Vậy Natto là gì? Natto là một thư viện ruby sử dụng Mecab để phân tích từ và hình thái từ tiếng Nhật.

  • Natto cung cấp một giao diện Ruby cho việc sử dụng Mecab
  • Chạy được trên cả CRuby và JRuby
  • Hoạt động với cả Mecab trên Windows, Unix/Linux và OS X
  • Hoạt động mà không cần compiler

Yêu cầu môi trường

  • Mecab 0.996 (đã cài đặt ở trên)
  • Một từ điển hệ thống, ví dụ như IPADIC đã cài ở trên
  • Ruby 1.9 hoặc cao hơn
  • ffi 1.9.0 hoặc cao hơn

Cài đặt

gem install natto

Trong chương trình Ruby, bạn cần thiết lập biến môi trường MECAB_PATH

ENV['MECAB_PATH']='/usr/local/lib/libmecab.so'

Cách sử dụng

Sau khi cài đặt gem và thiết lập MECAB_PATH, ta sẽ cùng test một số hàm của nó. Hãy bật rails console lên.

nm = Natto::MeCab.new
=> #<Natto::MeCab:0x00000803633ae8
     @model=#<FFI::Pointer address=0x000008035d4640>,             \
     @tagger=#<FFI::Pointer address=0x00000802b07c90>,            \
     @lattice=#<FFI::Pointer address=0x00000803602f80>,           \
     @libpath="/usr/local/lib/libmecab.so",                       \
     @options={},                                                 \
     @dicts=[#<Natto::DictionaryInfo:0x000008036337c8             \
             @filepath="/usr/local/lib/mecab/dic/ipadic/sys.dic", \
             charset=utf8,                                        \
             type=0>]                                             \
     @version=0.996>

puts nm.version
=> 0.996
puts nm.libpath
=> /usr/local/lib/libmecab.so

sysdic = nm.dicts.first
puts sysdic.filepath
=> /usr/local/lib/mecab/dic/ipadic/sys.dic

puts sysdic.charset
=> utf8

Phân tích câu với Mecab.

puts nm.parse('これは可笑しいよ!すぐ調べてください!')
これ	名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
可笑しい	形容詞,自立,*,*,形容詞・イ段,基本形,可笑しい,オカシイ,オカシイ
よ	助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
!	記号,一般,*,*,*,*,!,!,!
すぐ	副詞,助詞類接続,*,*,*,*,すぐ,スグ,スグ
調べ	動詞,自立,*,*,一段,連用形,調べる,シラベ,シラベ
て	助詞,接続助詞,*,*,*,*,て,テ,テ
ください	動詞,非自立,*,*,五段・ラ行特殊,命令i,くださる,クダサイ,クダサイ
!	名詞,サ変接続,*,*,*,*,*
EOS

Thiết lập kết quả output của Mecab

Ta có thể thiết lập format output của Mecab như sau:

format = '-F%M,%f[0],%F,[6,7]\n'
nm = Natto::MeCab.new format
nm.parse('これは可笑しいよ。すぐ調べてください。')

=> "これ,名詞,これ,コレ\nは,助詞,は,ハ\n可笑しい,形容詞,可笑しい,オカシイ\nよ,助詞,よ,ヨ\n。,記号,。,。\nすぐ,副詞,すぐ,スグ\n調べ,動詞,調べる,シラベ\nて,助詞,て,テ\nください,動詞,くださる,クダサイ\n。,記号,。,。\nEOS\n"

Với thiết lập format như thế này, ta sẽ nhận được kết quả trả về bao gồm: từ được phân tích ra, từ loại, thể từ điển và cách đọc katakana của từ đó. Rất tiện lợi phải không.

Kết luận

Việc phân tích từ loại của câu tưởng chường khó khăn, nhưng với gem Natto và Mecab, mọi việc đã trở nên đơn giản tiện lợi hơn nhiều phải không. Với một số cài đặt, từ giờ bạn có thể thực hiện phân tích câu tiếng Nhật trong Ruby application của mình được rồi. Chúc bạn thành công!

Tài liệu tham khảo

https://github.com/buruzaemon/natto

http://taku910.github.io/mecab/#download

http://kzy52.com/entry/2014/01/05/173628