🍆

innerTextで取得した文章から住所っぽいところを抜き取る

2022/11/30に公開
// PlaywrightでinnerTextを取得する
const innerText = await (
  await page.locator("body").innerText()
).valueOf();

// 住所っぽいパターンを作る
const pattern =
        "(北海道|青森県|岩手県|宮城県|秋田県|山形県|福島県|茨城県|栃木県|群馬県|埼玉県|千葉県|東京都|神奈川県|新潟県|富山県|石川県|福井県|山梨県|長野県|岐阜県|静岡県|愛知県|三重県|滋賀県|京都府|大阪府|兵庫県|奈良県|和歌山県|鳥取県|島根県|岡山県|広島県|山口県|徳島県|香川県|愛媛県|高知県|福岡県|佐賀県|長崎県|熊本県|大分県|宮崎県|鹿児島県|沖縄県)((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下松|岩国|田川|大村|宮古|富良野|別府|佐伯|黒部|小諸|塩尻|玉野|周南)市|(?:余市|高市|[^市]{2,3}?)郡(?:玉村|大町|.{1,5}?)[町村]|(?:.{1,4}市)?[^町]{1,4}?区|.{1,7}?[市町村])(.*?)\\n";

// matchする箇所を探す
const address = innerText.match(pattern);

ネットで拾った情報と都道府県を全て書いた形、改行コードで末尾を判定するイメージにしました。
改行コードで末尾を判定するため、特商法の表記ページでしか使えそうにないと思います。

責任者名(特商法の表記から雑に抽出)

/(責任者名(\\n|\\t)|責任者(\\n|\\t))(.*?)[\\n]/g

電話番号(特商法の表記から雑に抽出)

/(電話番号(\\n|\\t)|TEL(\\n|\\t))(.*?)([ ]|[\\n])/g

課題

市区町村から書き始める系のやつはスルーされてしまうので注意。
市区町村を網羅するえげつない正規表現作るしか。

もしくは47都道府県以外で始まり、市区町村で終わる文言が先頭であればそこを住所として捉えるようなやつ作ればいいのかも?だが、XX市場みたいな文言が入ってたらそこ反応しちゃうよなぁとか。

Discussion