2015年4月17日金曜日

Swift(iPhone)での形態素解析〜NSLinguisticTagger〜

iPhoneにmecabのframeworkが搭載されているのは見えるが、公式のリファレンスがなく、使用することができない。

しかし、それ以外の(?)形態素解析を用いることができる。
iOS 5.1から搭載されているが、紹介記事が少ないので。

        var testString="iPhoneでも形態素解析を手軽に、だれでも行うことができます。ただし、日本語の場合、機能制限が多いです"
        let tagschemes = NSLinguisticTagger.availableTagSchemesForLanguage("ja")//取得するだけ
        let tagger = NSLinguisticTagger(tagSchemes: tagschemes,options: 0)//インスタンス作成
        let options: NSLinguisticTaggerOptions = .OmitWhitespace | .OmitPunctuation | .JoinNames
        tagger.string=testString//文字列をセット
        tagger.enumerateTagsInRange(NSMakeRange(0, (testString as NSString).length), scheme: NSLinguisticTagSchemeTokenType, options: options) {
            (tag, tokenRange, sentenceRange, _) in
            let token = (self.testString as NSString).substringWithRange(tokenRange)
            println("\(token): \(tag)")
        }
たったこれだけ。

NSLinguisticTagger.availableTagSchemesForLanguage で取得できるのは、使える機能のリストです。
日本語("ja")では[TokenType, Language, Script]
英語("en")では[TokenType,Language,Script,Lemma,LexicalClass,NameType,NameTypeOrLexicalClass]
が返ってきます。

一般的な形態素解析(品詞まで分解)はNSLinguisticTagSchemeLexicalClassです

日本語に対してできる最大限、NSLinguisticTagSchemeTokenTypeを行うと、文をトークンに分割したものを出力してくれます。"tag"は基本的に"Word"になっています。

何かに使えればいいな。

ただし、認識精度は非常に低いです。。。
token= 今日: Word
token= : Word
token= : Word
token= : Word
token= 天気: Word
token= です: Word
token= : Word
token= なんで: Word
token= : Word
token= : Word
token= : Word
token= 同じ: Word
token= 単語: Word
token= : Word
token= : Word
token= : Word
token= 認識: Word
token= : Word
token= : Word
token= ない: Word
token= : Word
token= じゃ: Word

mecabなら
今日はいい天気ですね
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
助詞,終助詞,*,*,*,*,ね,ネ,ネ
EOS
なんで「いい」が同じ単語として認識されないんじゃ
なんで 副詞,一般,*,*,*,*,なんで,ナンデ,ナンデ
記号,括弧開,*,*,*,*,「,「,「
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
記号,括弧閉,*,*,*,*,」,」,」
助詞,格助詞,一般,*,*,*,が,ガ,ガ
同じ 連体詞,*,*,*,*,*,同じ,オナジ,オナジ
単語 名詞,一般,*,*,*,*,単語,タンゴ,タンゴ
として 助詞,格助詞,連語,*,*,*,として,トシテ,トシテ
認識 名詞,サ変接続,*,*,*,*,認識,ニンシキ,ニンシキ
動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
動詞,接尾,*,*,一段,未然形,れる,レ,レ
ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
名詞,非自立,一般,*,*,*,ん,ン,ン
じゃ 助詞,副助詞,*,*,*,*,じゃ,ジャ,ジャ

EOS




参考URL:
http://nshipster.com/nslinguistictagger/
http://d.hatena.ne.jp/shu223/20130318/1363566717

0 件のコメント:

コメントを投稿