SSブログ

クレメンタインでワイルドカードを使う方法 [データサイエンス、統計モデル]

クレメンタインでワイルドカードを使う方法

クレメンタインのCLEM式で
  issubstring(SUBSTRING, STRING)
というのがあるのだが、これは、ワイルドカードは使えない。

たとえば、
  URL
という変数の中に
  str1/str2/str3
という文字列があったとき、
  str1*str3
というワイルドカード付きの文字列を抽出したい場合、
  issubstring("str1*str3", URL)
と書いてもうまくいかないのだ。

では、どうすれば、良いかといえば、
  issubstring(SUBSTRING, N, STRING)
を利用すれば、うまく処理ができる。

まず、失敗例がこれ。
  issubstring("str3", issubstring("str1", URL), URL)

Nの部分は、0以上でないと、null を返してしまうので、処理上不具合が発生する。

そこで、
  issubstring("str3", issubstring("str1", URL) + 1, URL)
と変更したのだが、これでは、
  str1*str3
の抽出ではなく、
  str3
の抽出になってしまい駄目である。

パズルのようだが、下記のように書けば、OKである。

  issubstring("str3", issubstring("str1", URL) + 1, URL) * issubstring("str1", URL) > 0

str1 が含まれていなければ、後半部分が 0 になる。
また、str1 の後に str3 が含まれていなければ、 前半部分が 0 になる。
だから、
  str1*str3
を抽出したことになるのだ。

ここで注意点として、
  issubstring("str3", URL) * issubstring("str1", URL) > 0
としても、良さそうだが、これは、
  str1*str3
でも、
  str3*str1
でも、同じ判定になってしまうので、駄目である。

  str1*str3
という、順番付きのワイルドカードを抽出する場合は、
  issubstring("str3", issubstring("str1", URL) + 1, URL) * issubstring("str1", URL) > 0
と書かないといけない。

nice!(0) 
共通テーマ:学問

nice! 0