• 検索結果がありません。

Smalltalkと正規表現20090624 Recent site activity smalltalkusers.jp

N/A
N/A
Protected

Academic year: 2018

シェア "Smalltalkと正規表現20090624 Recent site activity smalltalkusers.jp"

Copied!
25
0
0

読み込み中.... (全文を見る)

全文

(1)

Smalltalk

で正規表現ラ

ブラ

を使う

10

Smalltalk

勉強会

(2)

正規表現

„

文字列集合を表す文字列

„

一般的には文字列のパタ

ーンマッ

チに利用

„

„

[ A-Z] [ ¥w¥d] *

„ 先頭が大文字アルファベット、それ以降は0個以上

(3)

正規表現の用途

„

文字列が関わる部分なら

どこ

でも

適用可

„

用途例

„

入力チェ

„

特定文字列の抽出

„

テンプレート

エンジン

„

ゲノ

ム解析

(4)

正規表現

I P

アド

レスにマッ

(25[0- 5] ¦

(2[ 0- 4] ¦

1[ 0- 9] ¦

[1- 9] )?[ 0- 9])¥

.

(25[0- 5] ¦

(2[ 0- 4] ¦

1[ 0- 9] ¦

[1- 9] )?[ 0- 9])¥

.

(25[0- 5] ¦

(2[ 0- 4] ¦

1[ 0- 9] ¦

[1- 9] )?[ 0- 9])¥

.

(5)

正規表現

HTTP URL

にマッ

(?:https? ¦shttp):/ / (?:(?:[ - _.!~ *'()a- zA- Z0- 9;:&=+$,] ¦%[ 0- 9A- F

a-f] [ 0- 9A- F a- a-f] )*@)? (?:(?:[ a- zA- 9] (?:[ - a- zA- 9] *[ a- zA-

Z0-9] )?¥.)*[ a- zA- Z] (?:[ - a- zA- Z0- 9] *[ a- zA- Z0- 9] )?¥.?¦[ 0- 9] +¥.[

0-9] +¥.[ 0- 9] +¥.[ 0- 9] +)(? ::[ 0- 9] *)? (?:/ (? :[ - _.!~ *'()a- zA-

Z0-9:@&=+$,] ¦%[ 0- 9A- F a- f] [ 0- 9A- F a- f] )*(?:;(?:[ - _.!~ *'()a- zA-

Z0-9:@&=+$,] ¦%[ 0- 9A- F a- f] [ 0- 9A- F a- f] )*)*(?:/ (?:[ - _.!~ *'()a- zA-

Z0-9:@&=+$,] ¦%[ 0- 9A- F a- f] [ 0- 9A- F a- f] )*(?:;(?:[ - _.!~ *'()a- zA-

Z0-9:@&=+$,] ¦%[ 0- 9A- F a- f] [ 0- 9A- F a- f] )*)*)*)? (?:¥? (?:[ - _.!~ *'()a-

zA-Z0- 9;/ ?:@&=+$,] ¦%[ 0- 9A- F a- f] [ 0- 9A- F a- f] )*)?(? :#(? :[- _.!~

(6)

正規表現

I P

アド

レスにマッ

チ その

2

1.

で区切ら

れた

4

組の数字を抽出

„

d+)¥

.(¥

d+)¥

.(¥

d+)¥

.(¥

d+)

2.

数字を抜き出し

てから

プログラ

ムで処理

(7)

正規表現ラ

ブラ

その1

„

Vassili Bykov

s Regular Expression Matcher

VBRegex)

„ Pure Smalltalk

„ マルチバイト文字列でも利用可

„ 利用可能な処理系

„ VisualWorks

„ Regex11

„ Squeak

„ VBRegex

(8)

VBRegex

のイ

ンスト

ール(

VisualWorks)

„

Cincom Public Store

から

„

最新版

„

Store -> Published I tems -> Regex11

[ 1.3.1]

„

標準添付のパーセルから

„

ちょ

古い

„

Percel Manager -> Advanced Utilities ->

(9)

VBRegex

のイ

ンスト

ール(

Squeak)

„ SqueakSourceから

„ 最新版

„ http: / / www.squeaksource.com/ Regex.html

„ 最も新しいものを取得してSqueakにDrag&Drop

„ Universeから

„ ちょっと古い

„ WorldMenu –> open… -> Universe Browser (basic) -> Model Extensionカテゴリ-> VBRegex version 1.9

„ SqueakMapから

„ かなり古い

(10)

VBRegex

の使い方

„

以下を参照

„

RxParser class

DOCUMENTATI ON

テゴリ

以下のメ

(11)

VBRegex

の使用例

マッチ

'192.168.0.1' matc hesR egex: '(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)'

=> true

全マッチ文字列に対する操作

'abc .de.f.gh.ijk' regex: '¥w+' matc hesDo: [:m ¦ T ransc ript c r; show: m] . 'abc .de.f.gh.ijk' regex: '¥w+' matc hesC ollec t: [:m ¦ m asUpperc ase]

=> an OrderedC ollec tion('ABC ' 'DE ' 'F ' 'GH' 'IJ K')

全置換

'abc .de.f.gh.ijk' c opyWithR egex: '¥.' matc hesR eplac edWith: '#'

(12)

„

鬼車

for VisualWorks

„

正規表現ラ

ブラ

リ 鬼車の

VisualWorks

バイ

ンディ

ング

„

Win32, Linux

に対応

„ OS Xには未対応

„ 開発環境があればすぐ対応できる。多分。

(13)

正規表現ラ

ブラ

リ 鬼車

„

様々な文字列エンコ

ーディ

ングに対応

„

30

„ UTF-8, UTF-16, UTF-32, EUC-JP, Shift_JI S, etc

„

様々な正規表現パタ

ーン文法をサポート

„

Ruby, Perl, Java, etc

„

マルチプラ

ーム対応

„

UN* X

Linux, OS X, etc), Win32, Cygwin

„

ジャ

ーな言語処理系で正式採用

(14)

鬼車

for VW

の特徴

„

Ruby

の正規表現周り

丸パク

大いに参考

„

不自然ではない範囲で準拠

„

API

„ match, sub, gsub, index, scan, split, = ~ , etc

„

正規表現パタ

ーン文法

„

テスト

ケース

„

Ruby

のラ

イブラ

パクり

取り

込みたい

(15)

鬼車

for VW

の特徴 その

2

„

機能が豊富

„

各所で紹介さ

れている正規表現がその

まま流用可能

„

詰まると

ろ、

鬼車のエンジンが優秀

„

API

が比較的シンプル

(16)

鬼車

for VW

の特徴 その

3

„

現在の実装では並行処理不可

„

外部ラ

ブラ

呼び出し

中は、

Smalltalk

側のプ

ロセスがほぼ停止状態

„ 要マルチスレッド対応

„

VBRegex

より

速度が出ない

„

関数コ

ールが重い

„ 呼出し、結果受け取り

„

文字列の変換、

ピーが重い

(17)

„

外部ラ

ブラ

の配置

„

Win32

„ onigvw.dllをパスの通った場所にコピー

„

Linux

„ libonigvw.so.x.x.xを/ usr/ local/ libにコピー

„ / usr/ local/ libにシンボリックリンク作成

„ 簡単なインストールスクリプトは準備してある

„

パーセルの読み込み

„

Regexp-Oniguruma.pcl

のロード

(18)

マッ

チ その

1

'S malltalk' matc hReg: 'S malltalk'

=> {S malltalk : #()}

'S mallT alk' matc hReg: 'S malltalk'

=> nil

'S mallT alk' matc hReg: ('S malltalk'

asORegexpWithOptions:

(Array with: OOption IGNOR EC AS E ))

=> {S mallT alk : #()}

'S mallT alk' matc hReg: ('S malltalk' asOR egexpWithOptions: 'i')

=> {S mallT alk : #()}

'S mallT alk' matc hReg: ('S malltalk' regWith: #i).

(19)

マッ

チ その

2

matc h := '192.168.0.1' matc hR eg: '(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)'

=> {192.168.0.1 : #('192' '168' '0' '1')}

matc h matc hedS tring => '192.168.0.1'

matc h c aptures => #('192' '168' '0' '1')

matc h at: 1 => '192

matc h at: 2 => '168'

matc h at: 3 => '0'

(20)

置換

'abc .de.f.gh.ijk subR eg: '¥.' with: '?'

=> 'abc ?de.f.gh.ijk'

'abc .de.f.gh.ijk' subReg: '¥w+' with: '(¥0)'

=> '(abc ).de.f.gh.ijk'

'abc abc '

subReg: ¥w+

with: [:matc h ¦ '(<1s>)' expandMac rosWith: matc h matchedS tring asUpperc ase].

=> 'a(B)c abc '

dic := Dic tionary new at: 'b' put: 'X X X ';

at: 'd' put: 'ZZ Z';

yourself.

'abc dabc d' subReg: '[bd]' with: dic

(21)

全置換

'abc .de.f.gh.ijk' gsubR eg: '¥.' with: '?'

=> 'abc ?de?f?gh?ijk

'abc .de.f.gh.ijk' gsubR eg: '¥w+' with: '(¥0)'

=> '(abc ).(de).(f).(gh).(ijk)'

'abc .de.f.gh.ijk'

gsubReg: ¥w+

with: [:matc h ¦ '(<1s>)' expandMac rosWith: matc h matchedS tring asUpperc ase].

=> '(ABC ).(DE).(F ).(GH).(IJ K)'

dic := Dic tionary new at: 'b' put: 'X X X ';

at: 'd' put: 'ZZ Z';

yourself.

'abc dabc d' gsubR eg: '[bd]' with: dic

(22)

分割

'abc .de.f.gh.ijk' splitR eg: '¥.'

=> #('abc ' 'de' 'f' 'gh' 'ijk')

'今日の天気は快晴' splitR eg: '[ ぁ- ん] '

(23)

走査

'貴社の記者が汽車で帰社した' sc anR eg: '([ 一- 龠々] +)([ ぁ- ん] *)'

(24)

応用例

src := 'T inyS egmenterはJ avasc riptだけ書かれた極めてコンパクトな日本語分かち書きソフトウェアで す。わずか25kバイトのソースコードで、日本語の新聞記事であれば文字単位で95%程度の精度で分か ち書きが行えます。Y ahoo!の形態素解析のようにサーバーサイドで解析するのではなく、全てクライア ントサイドで解析を行うため、セキュリティの観点から見ても安全です。分かち書きの単位はMeC ab + ipadic と互換性があります。'.

ws := WriteS treamon:S tring new. (T inyS egmenternew segment: src )

do:[ :eac h ¦ ws nextP utAll:each]

separatedBy: [ ws nextP utAll:' ¦ '] . ws c ontents

=> 'T inyS egmenter ¦ は ¦ J avasc ript ¦ だけ ¦ 書か ¦ れ ¦ た ¦ 極め ¦ て ¦ コンパクト¦ な ¦ 日本 ¦ 語分 ¦

かち ¦ 書き ¦ ソフトウェア ¦ です ¦ 。わ ¦ ずか ¦ 2 ¦ 5 ¦ k ¦ バイト¦ の ¦ ソースコード¦ で ¦ 、¦ 日本語 ¦ の

¦ 新聞 ¦ 記事 ¦ で ¦ あれ ¦ ば ¦ 文字 ¦ 単位 ¦ で ¦ 9 ¦ 5 ¦ % ¦ 程度 ¦ の ¦ 精度 ¦ で ¦ 分かち ¦ 書き ¦ が ¦

行え ¦ ます ¦ 。¦ Y ahoo! ¦ の ¦ 形態 ¦ 素解 ¦ 析 ¦ の ¦ よう¦ に ¦ サーバーサイド¦ で ¦ 解析 ¦ する ¦ の ¦

で ¦ は ¦ なく¦ 、¦ 全 ¦ て ¦ クライアントサイド¦ で ¦ 解析 ¦ を ¦ 行う¦ ため ¦ 、¦ セキュリティ¦ の ¦ 観点

¦ から ¦ 見 ¦ て ¦ も ¦ 安全 ¦ です ¦ 。¦ 分かち ¦ 書き ¦ の ¦ 単位 ¦ は ¦ MeC ab + ipadic ¦ と ¦ 互換 ¦ 性 ¦

(25)

まと

„

Smalltalk

処理系でも

正規表現ラ

イブラ

普通に利用できます

„

文法も

概ね一般的なも

のが利用できます

„

正規表現リ

テラ

ルはあり

ません

参照

関連したドキュメント

“〇~□までの数字を表示する”というプログラムを組み、micro:bit

平成 28 年 7 月 4

各テーマ領域ではすべての変数につきできるだけ連続変量に表現してある。そのため

 今日のセミナーは、人生の最終ステージまで芸術の力 でイキイキと生き抜くことができる社会をどのようにつ

隙間部から抜けてく る放射線を測定する ため、測定装置 を垂 直方向から60度傾け て測定 (オペフロ表 面から検出器までの 距離は約80cm). b

イ  日常生活や社会で数学を利用する活動  ウ  数学的な表現を用いて,根拠を明らかにし筋.