私は、会社が大規模(〜5,000 /日)で住所を整理し、ジオコードするために使用しているプログラムを開発しました。それは十分に機能していますが、毎日私が問題を引き起こしている特定のアドレス形式があります。条件付きで文字列内の単語の位置を変更する
このような形式のアドレスはpark avenue 1
で、私のジオコーディングで問題を引き起こしています。次のようにこの問題に取り組むために私の思考プロセスは、次のとおりです。
- スプリットリスト
- へのアドレスは、リスト内の私の区切り単語のインデックスを検索します。区切り文字は、
avenue, street, road, etc
などの単語です。私はpatterns
と呼ばれるこれらの区切り文字のリストを持っています。 - デリミタの直後の単語が長さ4以下の数字で構成されているかどうかを確認してください。番号の長さが4より大きい場合は、郵便番号になる可能性があります。これは必要ありません。それが4より小さい場合は、おそらく家の番号になります。
- 単語が前の手順で説明した条件を満たす場合は、リストの最初の位置に移動する必要があります。
- 最後に、リストをまとめて文字列にします。ここで
コードに私の考えを置くことで私の最初の試みである:
patterns ['my list of delimiters']
address = 'park avenue 1' # this is an example address
address = address.split(' ')
for pattern in patterns:
location = address.index(pattern) + 1
if address[location].isdigit() and len(address[location]) <= 4:
# here is where i'm getting a bit confused
# what would be a good way to go about moving the word to the first position in the list
address = ' '.join(address)
任意の助けをいただければ幸いです。皆さんありがとうございます。
さて、これは間違いなく私には意味があります。これは私の 'if'ステートメントの本体になるでしょうか?また、私はすでにやったことが意味をなさないのですか?また、どこから抜け出すのでしょうか?なぜなら、パターンの1つが見つかった場合にのみこれを実行する必要があるからです。 – Harrison
はい、 'if'ステートメントの本体です。 、しかし、あなたはあなたのロジックがアップ成り立つことを確認する例をとてもたくさんに対してそれをテストする必要があります---おそらく終了します:( ')('対処[場所] isdigit?擬似コードなど)何が持っていることは私には理にかなっていますエッジケースを処理するために改良しました。 –
ああ、完全には 'アドレス[位置] .isdigit()'右でなければならないのを忘れ?それを指摘してくれてありがとう! – Harrison