私は、多数の Web サイトからブログ投稿をスクレイピングするプログラムを作成しています。フリーテキストからオーストラリアのフォーマットの電話番号を抽出しようとしています。これはかなり難しいことが証明されています。
構成されたブログ投稿の例をいくつか示します。
例 1:
「こんにちは、私の名前はアリシアです。私は 32 歳で、過去 40 年間ブリスベンに住んでいます。身長 6 インチで、機敏なランナーです。2004 年以来、私は週に 2 ~ 3 回走っています。お気軽に +61 (04) 654 456 にお電話いただくか、別の番号 0434 43 22 34 をお試しください。」
このブログ投稿から、「04654456」と「0434432234」を抽出する必要があります
例 2:
「私はジョーです。ランニングも大好きです。身長 7 インチで、2004 年から続けています。トレーニングのアドバイスについては、043 572-6087 または (02) 1232 23 56 までお電話ください。」
このブログ投稿から、「0435726087」と「0212322356」を抽出する必要があります。
例 3:
「私の名前は Pricilla です。ランニングが大好きです。電話番号は 0 434 45 45 12 ですが、午前 12 時より前に電話しないでください (クライアントは 10 時から 11 時くらいまで起きていました)。ライセンス番号は 4335TE33 で、私は新品の 6 インチ タイヤを装着した 2004 フォード ブロンコを運転します。私は 28 km 走ることができますが、通常は 3 ~ 4 km ごとに休憩が必要です。今日電話してください (04) 3 445 4512"
このブログ投稿から、「0434454512」を抽出する必要があります。
私は、各ブログエントリに対して次のことを行う非常に精巧なシステムを考え出しました。
1) 数字以外のすべての文字を取り除き、トリムして二重スペースを削除します
2) 文字列を配列に変換します。これで、['0', '434', '45', '45, '12', '4335', '33', '2004', '6', '28', '3', '4', '04', '34', '832', '234]
3) 数値の配列を繰り返し処理し、規則を適用してそれらをつなぎ合わせます。このコードは肥大化しており、あまりきれいではありません。
4) オーストラリアの携帯電話番号と固定電話番号の RegExp パターンを使用して結果を検証する
明らかに、正規表現を試してみましたが、この場合は大きな失敗です。
私のシステムはほとんどの場合動作しますが、コードは控えめに言ってもきれいではありません。
これをどのように攻撃しますか?