NISHIO Hirokazu[Translate]
mecabで入力の一部を分割しない
文章中に例えばURLが混ざっているような場合、それを単純にMeCabで分割するとURLも分割されてしまう
用途によっては前処理で特定の意味を持った構造を処理し、 MeCabがその範囲を分割しないようにしたい
制約付き解析を使えば実現できる

分割される例
python
INPUT = "文章中に https://scrapbox.io/nishio/new のようにURLが混ざっている" mecab = MeCab.Tagger() print(mecab.parse(INPUT))
output
文章 名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー 中 名詞,接尾,副詞可能,*,*,*,中,チュウ,チュー に 助詞,格助詞,一般,*,*,*,に,ニ,ニ https 名詞,一般,*,*,*,*,* :// 名詞,サ変接続,*,*,*,*,* scrapbox 名詞,一般,*,*,*,*,* . 名詞,サ変接続,*,*,*,*,* io 名詞,一般,*,*,*,*,* / 名詞,サ変接続,*,*,*,*,* nishio 名詞,一般,*,*,*,*,* / 名詞,サ変接続,*,*,*,*,* new 名詞,一般,*,*,*,*,* の 助詞,連体化,*,*,*,*,の,ノ,ノ よう 名詞,非自立,助動詞語幹,*,*,*,よう,ヨウ,ヨー に 助詞,副詞化,*,*,*,*,に,ニ,ニ ...

分割しない例
python
mecab = MeCab.Tagger("-p") INPUT += "\n" # need to avoid segment fault INPUT = re.sub( r"\s*(https://[-0-9a-zA-Z!#$&'()*+,/:;=?@\[\]._~%]+)\s*", r"\n\1\tURL\n", INPUT) print(mecab.parse(INPUT))
output
文章 名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー 中 名詞,接尾,副詞可能,*,*,*,中,チュウ,チュー に 助詞,格助詞,一般,*,*,*,に,ニ,ニ https://scrapbox.io/nishio/new URL の 助詞,連体化,*,*,*,*,の,ノ,ノ よう 名詞,非自立,助動詞語幹,*,*,*,よう,ヨウ,ヨー に 助詞,副詞化,*,*,*,*,に,ニ,ニ ...

"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]