monkeyWzr/Assignment

★ 0Forks 0JavaGitHub ↗Compare

README

参考資料

TODO

  • Dockerfileの修正
  • GitHub Action(push -> jarをリリース-> docker imagesを更新)
  • アプリ内でデータファイルをURLから取得
  • Test

使い方

Java環境が構築済みの場合

Java環境がない場合、以下のdocker起動をご参考ください

java -jar AddressSearch.jar KEN_ALL.CSV

初期起動の場合、インデックスファイルが同じフォルダに作成されます。

docker起動

address-searchのイメージをご利用ください。 現時点でこのイメージは全国一括データファイルを利用しています。

docker pull monkeywzr/address-search
docker run -it --rm monkeywzr/address-search

データソースのpre処理

全角となっている町域部分の文字数が38文字を越える場合、また半角となっているフリガナ部分の文字数が76文字を越える場合は、複数レコードに分割しています。

上記により、複数行に分散されたレコード(町域名、又は町域名フリガナ部分)の結合処理を行う。 結合条件:カラム3(郵便番号)が同じ、かつカラム13が"0"(一つの郵便番号で二以上の町域を表す場合に該当しない) (町域名フリガナ部分が分割されていないレコードが存在しますので、制御が必要)

// 結合対象
26105,"605  ","6050874","キヨウトフ","キヨウトシヒガシヤマク","トキワチヨウ","京都府","京都市東山区","常盤町(東大路通渋谷上る、渋谷通東大路東入、渋谷通東大路東入2丁目、",0,0,0,0,0,0
26105,"605  ","6050874","キヨウトフ","キヨウトシヒガシヤマク","トキワチヨウ","京都府","京都市東山区","東大路五条下る)",0,0,0,0,0,0

// 結合対象
26103, "60112", "6011255", "キョウトフ", "キョウトシサキョウク", "カミタカノヒガシヤマ(55、57-6、64、65、71-1、71-21、", "京都府", "京都市左京区", "上高野東山(55、57−6、64、65、71−1、71−21、", 1, 0, 0, 0, 0, 0
26103, "60112", "6011255", "キョウトフ", "キョウトシサキョウク", "72、189、189-1バンチ)", "京都府", "京都市左京区", "72、189、189−1番地)", 1, 0, 0, 0, 0, 0

// 結合対象外
[15213, "95902", "9590248", "ニイガタケン", "ツバメシ", "ヨシダハマクビ", "新潟県", "燕市", "吉田浜首", 0, 0, 0, 1, 0, 0]
[15213, "95902", "9590248", "ニイガタケン", "ツバメシ", "ヨシダハマクビチョウ", "新潟県", "燕市", "吉田浜首町", 0, 0, 0, 1, 0, 0]

インデックスについて:

  • インデックス情報: 文字トークンと位置情報(データソースの該当行目)
トークン1,行目1,行目2,行目3,行目4,行目5,...
トークン2,行目1,行目2,行目3,行目4,行目5,...
...
  • インデックスファイル名: [source]_index.csv
  • データソースの住所情報[都道府県, 市区町村, 町域]をぞれぞれbi-gramトークン化し、位置情報(行目)を記録
  • トークン化の例:
  • [東京都, 江東区, 大島] --> [東京, 京都, 江東, 東区, 大島]

検索処理の流れ

  • 検索文字列をトークン化
  • トークンごとでインデックスから位置情報を取得
  • 位置情報情報をウェイトを計算する(同一行目のヒット回数) see: searchTokens
  • 該当行目のデータをソースから取得、ウェイトの降順で表示する

Contributors

monkeyWzr

Issues