正規表現による手抜き形態素解析
Ruby によるルーチン。
出力はこう。
「無」と「い」が分割されてしまっているが、人工無能的な乱れ文をつくるにはこの程度の解析で足りるし、かえっておもしろい文ができたりもする。精緻な解析が必要ならともかく、遊びでやるならこのルーチンはかなり使えます。以下は、MeCab との比較。
MeCab でやると、
もう少し長いのを上のスクリプトにかけると、
同じ文を MeCab で分解すると、
# -*- coding: utf-8 -*-
text = "吾輩は猫である。名前はまだ無い。"
text.scan(/[ぁ-んー]+ | [ァ-ンー]+ | [一-龍]+ | [。、]/) do | token |
if token =~ /^[ぁ-んー]/
if token =~ /^([はがのにへともでを])(.+)/ # これらが平仮名列の先頭にあったら助詞と見なす。
prefix = $1
token = $2
end
if token =~ /(.+)((ので) | (から) | (まで) | [もはがでを])$/ # これらが末尾にあったら助詞と見なす。
token = $1
suffix = $2
end
print prefix, " | " if prefix
print token, " | "
print suffix, " | " if suffix
else
print token, " | "
end
end
出力はこう。
吾輩 | は | 猫 | で | ある | 。 | 名前 | は | まだ | 無 | い | 。 |
「無」と「い」が分割されてしまっているが、人工無能的な乱れ文をつくるにはこの程度の解析で足りるし、かえっておもしろい文ができたりもする。精緻な解析が必要ならともかく、遊びでやるならこのルーチンはかなり使えます。以下は、MeCab との比較。
MeCab でやると、
吾輩 | は | 猫 | で | ある | 。 | 名前 | は | まだ | 無い | 。 |
もう少し長いのを上のスクリプトにかけると、
どこ | で | 生 | れたかとんと | 見当 | が | つかぬ | 。 | 何 | で | も | 薄暗 | いじめじめした | 所 | で | ニャーニャー | 泣 | いていた | 事 | だけ | は | 記憶 | している | 。 |
同じ文を MeCab で分解すると、
どこ | で | 生れ | た | か | とんと | 見当 | が | つか | ぬ | 。 | 何 | でも | 薄暗い | じめじめ | し | た | 所 | で | ニャーニャー | 泣い | て | いた事 | だけ | は | 記憶 | し | て | いる | 。 |