OSX上のHaskell stackでMecabを扱う方法
本文章は以下に書いてあることを抽出して纏めた記事である.
問題点
自分のOSX環境では、なぜかHaskellからMecabを利用することができなかった
解決できたサンプルリポジトリ
git clone https://github.com/shouhei/mecab-sample-hs.git cd mecab-sample-hs stack build stack exec mecab-sample-hs-exe
以上を叩くと
隣 名詞,一般,*,*,*,*,隣,トナリ,トナリ の 助詞,連体化,*,*,*,*,の,ノ,ノ 客 名詞,一般,*,*,*,*,客,キャク,キャク は 助詞,係助詞,*,*,*,*,は,ハ,ワ よく 副詞,一般,*,*,*,*,よく,ヨク,ヨク 柿 名詞,一般,*,*,*,*,柿,カキ,カキ 食う 動詞,自立,*,*,五段・ワ行促音便,基本形,食う,クウ,クウ 客 名詞,一般,*,*,*,*,客,キャク,キャク だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ EOS
上記の様な出力になるはず
解決方法
stack.ymlを以下を追記する
packages: - '.' - location: git: git@github.com:morishin/hsmecab.git commit: 2da6677fbd42bb77d3b6e61c02edfeebe248e184
extra-include-dirs: - /usr/local/Cellar/mecab/0.996/include/
extra-lib-dirs: - /usr/local/Cellar/mecab/0.996/lib/
次にproject.cabalに以下を追記
library hs-source-dirs: src exposed-modules: Lib build-depends: base >= 4.7 && < 5 , mecab default-language: Haskell2010
でもって、 stack build
すると問題なく使えるようになるはず
問題を時系列に追う
Could not parse '/path/to/mecab-sample/stack.yaml': AesonException "failed to parse field 'packages': failed to parse field 'location': when expecting a PackageLocation, encountered Null instead" See https://github.com/commercialhaskell/stack/wiki/stack.yaml.
tanakhさんの作ったmecabバインディングではダメらしい
- githubのforkを利用する
Enter passphrase for key '/Users/shouhei/.ssh/id_rsa': Warning: File listed in mecab-sample.cabal file does not exist: README.md mecab-0.4.0: configure mecab-0.4.0: build mecab-0.4.0: install mecab-sample-0.1.0.0: configure mecab-sample-0.1.0.0: build Completed all -- While building package mecab-sample-0.1.0.0 using: /path/to/.stack/programs/x86_64-osx/ghc-7.10.2/bin/runhaskell -package=Cabal-1.22.4.0 -clear-package-db -global-package-db -package-db=/path/to/.stack/snapshots/x86_64-osx/lts-3.13/7.10.2/pkgdb/ /var/folders/lk/jk8fbl3s4 qgc7fzz7r3wxn300000gn/T/stack28485/Setup.hs --builddir=.stack-work/dist/x86_64-osx/Cabal-1.22.4.0/ build exe:mecab-sample-exe --ghc-options -hpcdir .stack-work/dist/x86_64-osx/Cabal-1.22.4.0/hpc/.hpc/ -ddump-hi -ddump-to-file Process exited with code: ExitFailure 1 Logs have been written to: /path/to/mecab-sample/.stack-work/logs/mecab-sample-0.1.0.0.log Configuring mecab-sample-0.1.0.0... Preprocessing library mecab-sample-0.1.0.0... [1 of 1] Compiling Lib ( src/Lib.hs, .stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/Lib.o ) In-place registering mecab-sample-0.1.0.0... Preprocessing executable 'mecab-sample-exe' for mecab-sample-0.1.0.0... [1 of 1] Compiling Main ( app/Main.hs, .stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/mecab-sample-exe/mecab-sample-exe-tmp/Main.o ) Linking .stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/mecab-sample-exe/mecab-sample-exe ... Undefined symbols for architecture x86_64: "_mecab_get_all_morphs", referenced from: _cdn2_info in libHSmecab-0.4.0-0HRiBJmaGDO9FQQzxhViZD.a(MeCab.o) "_mecab_get_partial", referenced from: _cdly_info in libHSmecab-0.4.0-0HRiBJmaGDO9FQQzxhViZD.a(MeCab.o) "_mecab_get_theta", referenced from: _cdpg_info in libHSmecab-0.4.0-0HRiBJmaGDO9FQQzxhViZD.a(MeCab.o) "_mecab_set_all_morphs", referenced from: _cdSu_info in libHSmecab-0.4.0-0HRiBJmaGDO9FQQzxhViZD.a(MeCab.o) "_mecab_set_partial", referenced from: _cdWY_info in libHSmecab-0.4.0-0HRiBJmaGDO9FQQzxhViZD.a(MeCab.o) "_mecab_set_theta", referenced from: _cdVy_info in libHSmecab-0.4.0-0HRiBJmaGDO9FQQzxhViZD.a(MeCab.o) ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) 2 action
ググったら
cabal install
のときにパラメータを指定する必要があるとのことcabalのパラメータをstackで実現するには?
- ドキュメントをみて解決